XML/XML Schema/substitutionGroup
Element with substitutionGroup
<source lang="xml">
File: Data.xml <?xml version="1.0"?> <products xmlns ="http://www.wbex.ru"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wbex.ru Schema.xsd"> <product id="n1" electric="true" type="gear"> <description>description1</description> <warranty>lifetime warranty</warranty> <name>name1</name> <image>a.gif</image> <cost currency="USD">41.95</cost> <retailer>http://www.wbex.ru</retailer> </product> <product id="n2" electric="true" type="gear"> <description>description1</description> <warranty>lifetime warranty</warranty> <name>name2</name> <image>b.gif</image> <cost currency="USD">239.00</cost> <retailer>http://www.wbex.ru</retailer> </product>
</products> 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:element name="warranty" type="xsd:string"/> <xsd:element name="guarantee" substitutionGroup="warranty" type="xsd:string"/> <xsd:complexType name="appliance"> <xsd:sequence> <xsd:element name="description" type="xsd:string"/> <xsd:element ref="warranty" minOccurs="0"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="productType"> <xsd:complexContent> <xsd:extension base="appliance"> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="image" type="imageType"/> <xsd:element name="weight" type="xsd:positiveInteger" minOccurs="0"/> <xsd:element name="cost" maxOccurs="unbounded"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="money"> <xsd:attribute name="currency" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="USD"/> <xsd:enumeration value="CAD"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd:element name="retailer" type="xsd:anyURI"/> </xsd:sequence> <xsd:attribute name="id" type="xsd:ID" use="required"/> <xsd:attribute name="electric" type="xsd:boolean" use="required"/> <xsd:attribute name="type" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="press"/> <xsd:enumeration value="gear"/> <xsd:enumeration value="centrifugal"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:element name="products"> <xsd:complexType> <xsd:sequence> <xsd:element name="product" type="productType" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:simpleType name="money"> <xsd:restriction base="xsd:decimal"> <xsd:fractionDigits value="2"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="imageType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="(.)+\.(gif|jpg|jpeg|bmp)"/> </xsd:restriction> </xsd:simpleType>
</xsd:schema>
</source>