5.6.3 Schema Documents to Use (purchaseOrder.xsd, personalData.xsd)
This sample uses purchaseOrder.xsd and personalData.xsd as the schema documents.
- Organization of this subsection
(1) Relation between namespaces in schema documents
The following figure shows the relation among namespaces in purchaseOrder.xsd and personalData.xsd. Each arrow indicates the target namespace in which the type definition or element to be referred to is defined.
(2) Schema document (purchaseOrder.xsd)
The following shows the schema document to use (purchaseOrder.xsd):
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.myshopping.com/schema/purchaseOrder" xmlns:po="http://www.myshopping.com/schema/purchaseOrder" xmlns:psd="http://www.myshopping.com/schema/personalData"> <xsd:import namespace="http://www.myshopping.com/schema/personalData" schemaLocation="personalData.xsd"/> <xsd:element name="purchaseOrder" type="po:purchaseOrderType"/> <xsd:element name="shipTo" type="psd:personalDataType"/> <xsd:element name="billTo" type="po:billToPersonalDataType"/> <xsd:element name="items" type="po:itemsType"> <xsd:key name="productID_unique"> <xsd:selector xpath="po:item/po:productName"/> <xsd:field xpath="@productID"/> </xsd:key> </xsd:element> <xsd:element name="item" type="po:itemType"/> <xsd:element name="productName" type="po:productNameType"/> <xsd:element name="quantity"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:maxExclusive value="100"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="price" type="xsd:positiveInteger"/> <xsd:element name="shipDate" type="xsd:date"/> <xsd:element name="credit" type="po:creditType"/> <xsd:element name="creditHolder" type="xsd:string"/> <xsd:element name="creditNumber"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:pattern value="\d{16}"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:element name="creditCompany"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="CardCompanyA"/> <xsd:enumeration value="CardCompanyB"/> <xsd:enumeration value="CardCompanyC"/> <xsd:enumeration value="CardCompanyD"/> </xsd:restriction> </xsd:simpleType> </xsd:element> <xsd:complexType name="purchaseOrderType"> <xsd:sequence> <xsd:element ref="po:shipTo"/> <xsd:element ref="po:billTo"/> <xsd:element ref="po:items"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="billToPersonalDataType"> <xsd:sequence> <xsd:group ref="psd:personalDataGroup"/> <xsd:element ref="po:credit"/> </xsd:sequence> <xsd:attributeGroup ref="psd:personalAttributeGroup"/> </xsd:complexType> <xsd:complexType name="itemsType"> <xsd:sequence> <xsd:element ref="po:item" minOccurs="0" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="itemType"> <xsd:sequence> <xsd:element ref="po:productName"/> <xsd:element ref="po:quantity"/> <xsd:element ref="po:price"/> <xsd:element ref="po:shipDate"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="productNameType"> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="productID" type="xsd:string"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> <xsd:complexType name="creditType"> <xsd:sequence> <xsd:element ref="po:creditHolder"/> <xsd:element ref="po:creditNumber"/> <xsd:element ref="po:creditCompany"/> </xsd:sequence> <xsd:attribute name="year" type="po:yearType" use="required"/> <xsd:attribute name="month" type="po:monthType" use="required"/> </xsd:complexType> <xsd:simpleType name="yearType"> <xsd:annotation> <xsd:documentation> Year set from 2004 to 2008 </xsd:documentation> </xsd:annotation> <xsd:restriction base="xsd:string"> <xsd:pattern value="200[4-8]"/> </xsd:restriction> </xsd:simpleType> <xsd:simpleType name="monthType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="0[1-9]|1[0-2]"/> </xsd:restriction> </xsd:simpleType> </xsd:schema>
(3) Schema document (personalData.xsd)
The following shows the schema document to use (personalData.xsd):
<?xml version="1.0"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.myshopping.com/schema/personalData" xmlns:psd="http://www.myshopping.com/schema/personalData"> <xsd:element name="personalData" type="psd:personalDataType"/> <xsd:element name="firstName" type="xsd:string"/> <xsd:element name="familyName" type="xsd:string"/> <xsd:element name="occupation" type="xsd:string"/> <xsd:element name="email" type="xsd:string"/> <xsd:element name="tel" type="xsd:string"/> <xsd:element name="address" type="psd:addressType"/> <xsd:element name="building" type="xsd:string"/> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string"/> <xsd:element name="zip" type="xsd:string"/> <xsd:complexType name="personalDataType"> <xsd:group ref="psd:personalDataGroup"/> <xsd:attributeGroup ref="psd:personalAttributeGroup"/> </xsd:complexType> <xsd:group name="personalDataGroup"> <xsd:sequence> <xsd:element ref="psd:firstName"/> <xsd:element ref="psd:familyName"/> <xsd:element ref="psd:occupation"/> <xsd:element ref="psd:email"/> <xsd:element ref="psd:tel"/> <xsd:element ref="psd:address"/> </xsd:sequence> </xsd:group> <xsd:attributeGroup name="personalAttributeGroup"> <xsd:attribute name="age" type="xsd:positiveInteger" use="optional"/> <xsd:attribute name="company" type="xsd:string" use="optional"/> <xsd:attribute name="department" type="xsd:string" use="optional"/> <xsd:attribute name="title" type="xsd:string" use="optional"/> <xsd:attribute name="fax" type="xsd:string" use="optional"/> </xsd:attributeGroup> <xsd:complexType name="addressType"> <xsd:sequence> <xsd:element ref="psd:building" minOccurs="0"/> <xsd:element ref="psd:street"/> <xsd:element ref="psd:city"/> <xsd:element ref="psd:state"/> <xsd:element ref="psd:zip"/> </xsd:sequence> <xsd:attribute name="country" type="xsd:string" use="optional" default="US"/> </xsd:complexType> </xsd:schema>