XML/XML Schema/union
Содержание
A union datatype by reference to existing types
<source lang="xml">
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.wbex.ru" xmlns="http://www.wbex.ru" elementFormDefault="qualified"> <xs:simpleType name="integerOrData"> <xs:union memberTypes="xs:integer xs:date" /> </xs:simpleType>
</xs:schema>
</source>
A union datatype can embed one or more <xs:simpleType> elements
<source lang="xml">
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.wbex.ru" xmlns="http://www.wbex.ru" elementFormDefault="qualified"> <xs:simpleType name="myIntegerUnion"> <xs:union> <xs:simpleType> <xs:restriction base="xs:integer" /> </xs:simpleType> <xs:simpleType> <xs:restriction base="xs:NMTOKEN"> <xs:enumeration value="undefined" /> </xs:restriction> </xs:simpleType> </xs:union> </xs:simpleType>
</xs:schema>
</source>
The order between derivation by list and derivation by union depends on the result to achieve
<source lang="xml">
<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.wbex.ru" xmlns="http://www.wbex.ru" elementFormDefault="qualified"> <xs:simpleType name="listOfUnions"> <xs:list> <xs:simpleType> <xs:union memberTypes="xs:date xs:integer" /> </xs:simpleType> </xs:list> </xs:simpleType> <xs:simpleType name="UnionOfLists"> <xs:union> <xs:simpleType> <xs:list itemType="xs:date" /> </xs:simpleType> <xs:simpleType> <xs:list itemType="xs:integer" /> </xs:simpleType> </xs:union> </xs:simpleType>
</xs:schema>
</source>
Union anonymous simple types
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <Party xmlns="http://www.wbex.ru"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://www.wbex.ru Schema.xsd"> <Participants> <Name>Item0</Name> <Name>Item1</Name> <Name>Item2</Name> </Participants>
</Party> File: Schema.xsd <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.wbex.ru" xmlns="http://www.wbex.ru" elementFormDefault="qualified"> <xsd:simpleType name="CostelloFamily"> <xsd:union> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item0"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item1"/> <xsd:enumeration value="Item2"/> <xsd:enumeration value="Item3"/> <xsd:enumeration value="Item4"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item5"/> <xsd:enumeration value="Item6"/> <xsd:enumeration value="Item7"/> <xsd:enumeration value="Item8"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item9"/> <xsd:enumeration value="Item10"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item11"/> <xsd:enumeration value="Item12"/> <xsd:enumeration value="Item13"/> <xsd:enumeration value="Item14"/> <xsd:enumeration value="Item15"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item16"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item17"/> </xsd:restriction> </xsd:simpleType> </xsd:union> </xsd:simpleType> <xsd:element name="Party"> <xsd:complexType> <xsd:sequence> <xsd:element name="Participants"> <xsd:complexType> <xsd:sequence> <xsd:element name="Name" type="CostelloFamily" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>
</xsd:schema>
</source>
union types with restriction
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <Party xmlns="http://www.wbex.ru"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wbex.ru Schema.xsd"> <Participants> <Name>Item0</Name> <Name>Item1</Name> </Participants>
</Party>
File: Schema.xsd <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.wbex.ru" xmlns="http://www.wbex.ru" elementFormDefault="qualified"> <xsd:simpleType name="Group0"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item0"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="Group1"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item1"/> <xsd:enumeration value="Item2"/> <xsd:enumeration value="Item3"/> <xsd:enumeration value="Item4"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="Group2"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item5"/> <xsd:enumeration value="Item6"/> <xsd:enumeration value="Item7"/> <xsd:enumeration value="Item8"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="Group3"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item9"/> <xsd:enumeration value="Item10"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="Group4"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item11"/> <xsd:enumeration value="Item12"/> <xsd:enumeration value="Item13"/> <xsd:enumeration value="Item14"/> <xsd:enumeration value="Item15"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="Group5"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item16"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="Group6"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="Item17"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="CostelloFamily"> <xsd:union memberTypes="Group0 Group1 Group2 Group3 Group4 Group5 Group6"/> </xsd:simpleType> <xsd:element name="Party"> <xsd:complexType> <xsd:sequence> <xsd:element name="Participants"> <xsd:complexType> <xsd:sequence> <xsd:element name="Name" type="CostelloFamily" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>
</xsd:schema>
</source>
union with memberTypes
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <schema xmlns="http://www.wbex.ru"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://www.wbex.ru maxOccurs.xsd"> <element maxOccurs="unbounded"/>
</schema>
File: maxOccurs.xsd <?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.wbex.ru" xmlns="http://www.wbex.ru" elementFormDefault="qualified"> <xsd:simpleType name="unbounded_type"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="unbounded"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="maxOccurs_type"> <xsd:union memberTypes="unbounded_type xsd:nonNegativeInteger"/> </xsd:simpleType> <xsd:element name="schema"> <xsd:complexType> <xsd:sequence> <xsd:element name="element"> <xsd:complexType> <xsd:attribute name="maxOccurs" type="maxOccurs_type" default="1"/> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>
</xsd:schema>
</source>