我希望能够为多种扩展类型指定单选类型.
例如,说我们有海,在海里有很多种鱼.所以在XML中我会写:
- <Sea name="Atlantic Ocean">
- <Tuna name="tuna1" />
- <Carp name="carp1" />
- <Carp name="carp2" />
- <Tuna name="tuna2" />
- <Salmon name="salmon1" />
- </Sea>
XSD
- <xs:complexType name="Fish">
- </xs:complexType>
- <xs:complexType name="Salmon">
- <xs:complexContent>
- <xs:extension base="Fish">
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- <xs:complexType name="Carp">
- <xs:complexContent>
- <xs:extension base="Fish">
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- <xs:complexType name="Tuna">
- <xs:complexContent>
- <xs:extension base="Fish">
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
- <xs:complexType name="Sea">
- <xs:complexContent>
- <xs:extension base="GeoZone">
- <xs:sequence minOccurs="0" maxOccurs="unbounded">
- <xs:choice>
- <xs:element type="Fish" name="Fish" minOccurs="0"
- maxOccurs="unbounded"/>
- </xs:choice>
- </xs:sequence>
- <xs:attribute name="Name" type="xs:string" use="optional" />
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
不幸的是,这是无效的,因为我只能添加Fish本身而不是其扩展类型.
使用
@L_403_0@ ……
XSD
- <?xml version="1.0" encoding="UTF-8"?>
- <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
- <xs:element name="Sea">
- <xs:complexType>
- <xs:sequence>
- <xs:element ref="FishSubGroup"
- minOccurs="0" maxOccurs="unbounded"/>
- </xs:sequence>
- <xs:attribute name="name" type="xs:string" use="optional"/>
- </xs:complexType>
- </xs:element>
- <xs:element name="FishSubGroup" abstract="true"/>
- <xs:element name="Tuna" type="FishType" substitutionGroup="FishSubGroup"/>
- <xs:element name="Carp" type="FishType" substitutionGroup="FishSubGroup"/>
- <xs:element name="Salmon" type="FishType" substitutionGroup="FishSubGroup"/>
- <xs:complexType name="FishType">
- <xs:attribute name="name" type="xs:string"/>
- </xs:complexType>
- </xs:schema>
XML
- <?xml version="1.0" encoding="UTF-8"?>
- <Sea name="Atlantic Ocean">
- <Tuna name="tuna1"/>
- <Carp name="carp1"/>
- <Carp name="carp2"/>
- <Tuna name="tuna2"/>
- <Salmon name="salmon1"/>
- </Sea>