Chapter 16: Substitution groupsΒΆ
Schema
<!--Definitive XML Schema by Priscilla Walmsley (c) 2012 Prentice Hall PTR -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:annotation>
<xsd:documentation>
This example illustrates substitution groups.
</xsd:documentation>
</xsd:annotation>
<xsd:element name="items" type="ItemsType"/>
<xsd:complexType name="ItemsType">
<xsd:sequence>
<xsd:element ref="product" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="product" type="ProductType"/>
<xsd:complexType name="ProductType">
<xsd:sequence>
<xsd:element name="number" type="xsd:integer"/>
<xsd:element name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="shirt" type="ShirtType"
substitutionGroup="product"/>
<xsd:complexType name="ShirtType">
<xsd:complexContent>
<xsd:extension base="ProductType">
<xsd:sequence>
<xsd:element name="size" type="ShirtSizeType"/>
<xsd:element name="color" type="ColorType"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="hat" substitutionGroup="product">
<xsd:complexType>
<xsd:complexContent>
<xsd:extension base="ProductType">
<xsd:sequence>
<xsd:element name="size" type="HatSizeType"/>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name="umbrella" substitutionGroup="product"/>
<xsd:complexType name="ShirtSizeType">
<xsd:simpleContent>
<xsd:extension base="xsd:integer">
<xsd:attribute name="system" type="xsd:token"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="HatSizeType">
<xsd:simpleContent>
<xsd:extension base="xsd:token">
<xsd:attribute name="system" type="xsd:token"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>
<xsd:complexType name="ColorType">
<xsd:attribute name="value" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>
XML Document
<items xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="chapter16.xsd">
<product>
<number>999</number>
<name>Special Seasonal</name>
</product>
<shirt>
<number>557</number>
<name>Short-Sleeved Linen Blouse</name>
<size>10</size>
<color value="blue"/>
</shirt>
<hat>
<number>563</number>
<name>Ten-Gallon Hat</name>
<size>L</size>
</hat>
<umbrella>
<number>443</number>
<name>Deluxe Golf Umbrella</name>
</umbrella>
</items>
xsData XML Document
<?xml version='1.0' encoding='UTF-8'?>
<items>
<umbrella>
<number>443</number>
<name>Deluxe Golf Umbrella</name>
</umbrella>
<hat>
<number>563</number>
<name>Ten-Gallon Hat</name>
<size>L</size>
</hat>
<shirt>
<number>557</number>
<name>Short-Sleeved Linen Blouse</name>
<size>10</size>
<color value="blue"/>
</shirt>
<product>
<number>999</number>
<name>Special Seasonal</name>
</product>
</items>
xsData JSON
{
"umbrella": [
{
"any_element": {
"qname": null,
"text": null,
"tail": null,
"children": [
{
"qname": "number",
"text": "443",
"tail": null,
"children": [],
"attributes": {}
},
{
"qname": "name",
"text": "Deluxe Golf Umbrella",
"tail": null,
"children": [],
"attributes": {}
}
],
"attributes": {}
}
}
],
"hat": [
{
"number": 563,
"name": "Ten-Gallon Hat",
"size": {
"value": "L",
"system": null
}
}
],
"shirt": [
{
"number": 557,
"name": "Short-Sleeved Linen Blouse",
"size": {
"value": 10,
"system": null
},
"color": {
"value": "blue"
}
}
],
"product": [
{
"number": 999,
"name": "Special Seasonal"
}
]
}
Samples Source
Definitive XML Schema by Priscilla Walmsley (c) 2012 Prentice Hall PTR