Definitive XML Schema
Priscilla Walmsley (pwalmsley@datypic.com)
ISBN: 0132886723
2nd edition, , Prentice Hall PTR.
Chapter 20: XML information modeling
Book examples
<model> <order> <number>1234</number> <total>213.12</total> </order> <customer> <number>12345</number> <firstName>Priscilla</firstName> <lastName>Walmsley</lastName> </customer> <address> <type>Billing</type> <line1>123 Main Street</line1> <line2>Apartment 2B</line2> <city>Traverse City</city> <state>MI</state> <zip>49684</zip> </address> <address> <type>Shipping</type> <line1>PO Box 9999999</line1> <city>Traverse City</city> <state>MI</state> <zip>49686</zip> </address> <lineItem> <giftWrap>bday</giftWrap> <number>557</number> <size>12</size> <color>blue</color> <quantity>1</quantity> </lineItem> <lineItem> <number>443</number> <size>L</size> <color>tan</color> <quantity>2</quantity> </lineItem> <product> <number>557</number> <name>Short-Sleeved Linen Blouse</name> <availableSizes>2 4 6 8 10 12 14</availableSizes> <availableColors>blue red</availableColors> <desc>Our best-selling shirt!</desc> </product> <product> <number>563</number> <name>Ten-Gallon Hat</name> <availableSizes>S M L</availableSizes> </product> <product> <number>443</number> <name>Deluxe Golf Umbrella</name> <availableColors>tan black</availableColors> <desc>Protect yourself from the rain!</desc> </product> </model>
<report> <order> <number>1234</number> <total>213.12</total> <lineItem> <giftWrap>bday</giftWrap> <size>12</size> <color>blue</color> <quantity>1</quantity> <product> <number>557</number> <name>Short-Sleeved Linen Blouse</name> <availableColors>blue red</availableColors> </product> </lineItem> <lineItem> <size>L</size> <color>tan</color> <quantity>2</quantity> <product> <number>443</number> <name>Deluxe Golf Umbrella</name> <availableColors>tan black</availableColors> </product> </lineItem> </order> <order> <number>5678</number> <total>245.55</total> <lineItem> <giftWrap>bday</giftWrap> <size>12</size> <color>blue</color> <quantity>1</quantity> <product> <number>557</number> <name>Short-Sleeved Linen Blouse</name> <availableColors>blue red</availableColors> </product> </lineItem> <lineItem> <size>L</size> <quantity>1</quantity> <product> <number>563</number> <name>Ten-Gallon Hat</name> <availableSizes>S M L</availableSizes> </product> </lineItem> </order> </report>
<report> <order> <number>1234</number> <total>213.12</total> <lineItem> <giftWrap>bday</giftWrap> <size>12</size> <color>blue</color> <quantity>1</quantity> <productRef ref="557"/> </lineItem> <lineItem> <size>L</size> <color>tan</color> <quantity>2</quantity> <productRef ref="443"/> </lineItem> </order> <order> <number>5678</number> <total>245.55</total> <lineItem> <giftWrap>bday</giftWrap> <size>12</size> <color>blue</color> <quantity>1</quantity> <productRef ref="557"/> </lineItem> <lineItem> <size>L</size> <quantity>1</quantity> <productRef ref="563"/> </lineItem> </order> <product> <number>443</number> <name>Deluxe Golf Umbrella</name> <availableColors>tan black</availableColors> </product> <product> <number>557</number> <name>Short-Sleeved Linen Blouse</name> <availableColors>blue red</availableColors> </product> <product> <number>563</number> <name>Ten-Gallon Hat</name> <availableSizes>S M L</availableSizes> </product> </report>
<xs:element name="report" type="ReportType"> <xs:key name="productKey"> <xs:selector xpath=".//product"/> <xs:field xpath="number"/> </xs:key> <xs:keyref name="productKeyRef" refer="productKey"> <xs:selector xpath=".//productRef"/> <xs:field xpath="@ref"/> </xs:keyref> </xs:element>
<report> <order> <number>1234</number> <total>213.12</total> </order> <order> <number>5678</number> <total>245.55</total> </order> <product> <number>443</number> <name>Deluxe Golf Umbrella</name> <availableColors>tan black</availableColors> </product> <product> <number>557</number> <name>Short-Sleeved Linen Blouse</name> <availableColors>blue red</availableColors> </product> <product> <number>563</number> <name>Ten-Gallon Hat</name> <availableSizes>S M L</availableSizes> </product> <orderProductRelationship> <orderRef ref="1234"/> <productRef ref="557"/> <giftWrap>bday</giftWrap> <size>12</size> <color>blue</color> <quantity>1</quantity> </orderProductRelationship> <orderProductRelationship> <orderRef ref="1234"/> <productRef ref="443"/> <size>L</size> <color>tan</color> <quantity>2</quantity> </orderProductRelationship> <orderProductRelationship> <orderRef ref="5678"/> <productRef ref="557"/> <giftWrap>bday</giftWrap> <size>12</size> <color>blue</color> <quantity>1</quantity> </orderProductRelationship> <orderProductRelationship> <orderRef ref="5678"/> <productRef ref="563"/> <size>L</size> <quantity>1</quantity> </orderProductRelationship> </report>
<xs:complexType name="ProductType" abstract="true"> <xs:sequence> <xs:element name="number" type="xs:integer"/> <xs:element name="name" type="xs:string"/> <xs:element name="desc" type="xs:string"/> </xs:sequence> </xs:complexType>
<xs:element name="shirt" type="ShirtType"/> <xs:complexType name="ShirtType"> <xs:complexContent> <xs:extension base="ProductType"> <xs:sequence> <xs:element name="fabric" type="xs:string"/> <xs:element name="availableSizes" type="AvailableShirtSizesType"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:simpleType name="AvailableShirtSizesType"> <xs:list> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="2"/> <xs:maxInclusive value="18"/> </xs:restriction> </xs:simpleType> </xs:list> </xs:simpleType>
<shirt> <number>557</number> <name>Short-Sleeved Linen Blouse</name> <desc>Our best-selling shirt!</desc> <fabric>linen</fabric> <availableSizes>2 4 6 8 10 12 14</availableSizes> </shirt>
<xs:element name="hat" type="HatType"/> <xs:complexType name="HatType"> <xs:complexContent> <xs:extension base="ProductType"> <xs:sequence> <xs:element name="spfRating" type="xs:integer"/> <xs:element name="availableSizes" type="AvailableHatSizesType"/> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType> <xs:simpleType name="AvailableHatSizesType"> <xs:list> <xs:simpleType> <xs:restriction base="xs:string"/> </xs:simpleType> </xs:list> </xs:simpleType>
<xs:group name="ProductProperties"> <xs:sequence> <xs:element name="number" type="xs:integer"/> <xs:element name="name" type="xs:string"/> <xs:element name="desc" type="xs:string"/> </xs:sequence> </xs:group>
<xs:complexType name="ShirtType"> <xs:sequence> <xs:group ref="ProductProperties"/> <xs:element name="fabric" type="xs:string"/> <xs:element name="availableSizes" type="AvailableShirtSizesType"/> </xs:sequence> </xs:complexType>
<xs:complexType name="ProductType"> <xs:sequence> <xs:element name="number" type="xs:integer"/> <xs:element name="name" type="xs:string"/> <xs:element name="desc" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:complexType name="ShirtType"> <xs:sequence> <xs:element name="productProperties" type="ProductType"/> <xs:element name="fabric" type="xs:string"/> <xs:element name="availableSizes" type="AvailableShirtSizesType"/> </xs:sequence> </xs:complexType>
<shirt> <productProperties> <number>557</number> <name>Short-Sleeved Linen Blouse</name> <desc>Our best-selling shirt!</desc> </productProperties> <fabric>linen</fabric> <availableSizes>2 4 6 8 10 12 14</availableSizes> </shirt>
<order> <number>12345</number> <date>2012-10-31</date> <customerNumber>12345</customerNumber> <customerName>Priscilla Walmsley</customerName> <billToAddressLine>123 Main Street</billToAddressLine> <billToCity>Traverse City</billToCity> <billToState>MI</billToState> <billToZip>49684</billToZip> <shipToAddressLine>5100 Garfield Road</shipToAddressLine> <shipToCity>Hillsborough</shipToCity> <shipToState>NJ</shipToState> <shipToZip>08876</shipToZip> <!--...--> <lineItem> <number>557</number> <!--...--> </lineItem> <lineItem> <number>443</number> <!--...--> </lineItem> </order>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="order" type="OrderType"/> <xs:complexType name="OrderType"> <xs:sequence> <xs:element name="number" type="xs:integer"/> <xs:element name="date" type="xs:date"/> <xs:element name="customerNumber" type="xs:integer"/> <xs:element name="customerName" type="xs:string"/> <xs:element name="billToAddressLine" type="xs:string" maxOccurs="unbounded"/> <xs:element name="billToCity" type="xs:string"/> <xs:element name="billToState" type="xs:string"/> <xs:element name="billToZip" type="xs:string"/> <xs:element name="shipToAddressLine" type="xs:string" maxOccurs="unbounded"/> <xs:element name="shipToCity" type="xs:string"/> <xs:element name="shipToState" type="xs:string"/> <xs:element name="shipToZip" type="xs:string"/> <xs:element name="lineItem" type="LineItemType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name="LineItemType"> <xs:sequence> <xs:element name="number" type="xs:integer"/> <!--...--> </xs:sequence> </xs:complexType> </xs:schema>
<order> <!--...--> <billToAddress> <addressLine>123 Main St.</addressLine> <city>Traverse City</city> <state>MI</state> <zip>49684</zip> </billToAddress> <shipToAddress> <addressLine>5100 Garfield Road</addressLine> <city>Hillsborough</city> <state>NJ</state> <zip>08876</zip> </shipToAddress> <!--...--> </order>
<xs:complexType name="OrderType"> <xs:sequence> <xs:element name="number" type="xs:integer"/> <xs:element name="date" type="xs:date"/> <xs:element name="customerNumber" type="xs:integer"/> <xs:element name="customerName" type="xs:string"/> <xs:element name="billToAddress" type="AddressType"/> <xs:element name="shipToAddress" type="AddressType"/> <xs:element name="lineItem" type="LineItemType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name="AddressType"> <xs:sequence> <xs:element name="addressLine" type="xs:string"/> <xs:element name="city" type="xs:string"/> <xs:element name="state" type="xs:string"/> <xs:element name="zip" type="xs:string"/> </xs:sequence> </xs:complexType>
<order> <!--...--> <lineItems> <lineItem> <number>557</number> <!--...--> </lineItem> <lineItem> <number>443</number> <!--...--> </lineItem> </lineItems> </order>
<product> <!--...--> <availableColors>blue red</availableColors> <availableSizes>S M L</availableSizes> <monogrammable>true</monogrammable> <weight units="g">113</weight> </product>
<product> <!--...--> <feature name="availableColors">blue red</feature> <feature name="availableSizes">S M L</feature> <feature name="monogrammable">true</feature> <feature name="weight">113</feature> </product>
<xs:complexType name="ProductType"> <xs:sequence> <xs:element name="number" type="xs:integer"/> <xs:element name="name" type="xs:string"/> <xs:element name="desc" type="xs:string"/> <xs:element name="feature" maxOccurs="unbounded" type="FeatureType"/> </xs:sequence> </xs:complexType> <xs:complexType name="FeatureType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="name" type="xs:string"/> </xs:extension> </xs:simpleContent> </xs:complexType>