Page 107 -
P. 107
94 N. Russell and A. ter Hofstede
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="PurchaseOrderType">
<xs:sequence>
<xs:element name="Company" type="CompanyType" />
<xs:element name="Order" type="OrderType" />
<xs:element name="FreightCost" type="xs:double" />
<xs:element name="DeliveryLocation" type="xs:string" />
<xs:element name="InvoiceRequired" type="xs:boolean" />
<xs:element name="PrePaid" type="xs:boolean" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="CompanyType">
<xs:sequence>
<xs:element name="Name" type="xs:string" />
<xs:element name="Address" type="xs:string" />
<xs:element name="City" type="xs:string" />
<xs:element name="State" type="xs:string" />
<xs:element name="PostCode" type="xs:string" />
<xs:element name="Phone" type="xs:string" />
<xs:element name="Fax" type="xs:string" />
<xs:element name="BusinessNumber" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="OrderType">
<xs:sequence>
<xs:element name="OrderNumber" type="xs:string" />
<xs:element name="OrderDate" type="xs:date" />
<xs:element name="Currency" type="xs:string" />
<xs:element name="OrderTerms" type="xs:string" />
<xs:element name="RevisionNumber" type="xs:integer" />
<xs:element name="Remarks" type="xs:string" />
<xs:element name="OrderLines" type="OrderLinesType" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="OrderLinesType">
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Line" type="LineType" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="LineType">
<xs:sequence>
<xs:element name="LineNumber" type="xs:integer" />
<xs:element name="UnitCode" type="xs:string" />
<xs:element name="UnitDescription" type="xs:string" />
<xs:element name="UnitQuantity" type="xs:integer" />
<xs:element name="Action" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="RouteGuideType">
<xs:sequence>
<xs:element name="OrderNumber" type="xs:string" />
<xs:element name="DeliveryLocation" type="xs:string" />
<xs:element name="Trackpoints" type="TrackpointsType" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="TrackpointsType">
<xs:sequence>
<xs:element maxOccurs="unbounded" name="Trackpoint" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="TrailerUsageType">
<xs:sequence>
<xs:element name="OrderNumber" type="xs:string" />
<xs:element name="OrderLines" type="OrderLinesType" />
<xs:element name="Packages" type="PackagesType" />
</xs:sequence>
</xs:complexType>
...
</xs:schema>
Listing 2.1 Working example: user-defined data type definition using XML schema