<?xml version="1.0" encoding="UTF-8"?>
<QuoteRequest>
<CustomerDetails Id="12345" Name="Hewlett-Packard Co."
ContactEmail="buyer@hp.com"/>
<PartList>
<PartItem SupplierPartSKU="12345" PartDescription="part1"
Quantity="2" QuotedPrice="0.0" />
<PartItem SupplierPartSKU="67899" PartDescription="part2"
Quantity="5" QuotedPrice="0.0" />
</PartList>
</QuoteRequest>
Listing 2: Monolithic Schema design (Russian Doll Design)
<schema targetNamespace="http://acme.com/supplier/types">
<element name="QuoteRequest">
<complexType>
<choice maxOccurs="unbounded">
<element name="CustomerDetails">
<complexType>
<attribute name="CustId" type="string"/>
<attribute name="CustName" type="string"/>
<attribute name="CustEmail" type="string"/>
</complexType>
</element>
<element name="PartList">
<complexType>
<sequence>
<element maxOccurs="unbounded" minOccurs="0"
name="PartItem">
<complexType>
<attribute name="SKU" type="string"/>
<attribute name="Descr" type="string"/>
<attribute name="Qty" type="integer"/>
</complexType>
</element>
</sequence>
</complexType>
</element>
</choice>
</complexType>
</element>
</schema>
Listing 3: A more modular design (Venetian Blind design)
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://acme.com/supplier/RequestTypes"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:supReq="http://acme.com/supplier/RequestTypes"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<complexType name="OwnerDetails">
<attribute name="CustId" type="string"/>
<attribute name="CustName" type="string"/>
<attribute name="CustEmail" type="string"/>
</complexType>
<complexType name="PartItemType">
<attribute name="SKU" type="string"/>
<attribute name="Descr" type="string"/>
<attribute name="Qty" type="int"/>
<attribute name="QuotedPrice" type="float"/>
</complexType>
<complexType name="PartListType">
<sequence>
<element name="PartItem" type="supReq:PartItemType"
maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="QuoteRequestType">
<sequence>
<element name="CustomerDetails" type="supReq:OwnerDetails"/>
<element name="PartList" type="supReq:PartListType"/>
</sequence>
</complexType>
<element name="QuoteRequest" type="sup:QuoteRequestType"/>
</schema>
Listing 4: Using a separate Schema definition for shared types
<schema targetNamespace="http://acme.com/supplier/quoteCommon"
xmlns:qc="http://acme.com/supplier/quoteCommon"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<complexType name="OwnerDetails">
<attribute name="CustId" type="string" use="required"/>
<attribute name="CustName" type="string" use="required"/>
<attribute name="CustEmail" type="string" use="required"/>
</complexType>
<complexType name="PartItemType">
<attribute name="SKU" type="string" use="required"/>
<attribute name="Descr" type="string" use="required"/>
<attribute name="Qty" type="int" use="required"/>
<attribute name="QuotedPrice" type="float" use="optional"/>
</complexType>
<complexType name="PartListType">
<sequence>
<element type="qc:PartItemType" maxOccurs="unbounded"/>
</sequence>
</complexType>
Listing 5: Importing and referencing common types
<schema targetNamespace="http://acme.com/supplier/types"
xmlns:supReq="http://acme.com/supplier/types"
xmlns:common="http://acme.com/supplier/quoteCommon">
<import namespace="http://acme.com/supplier/QuoteCommon"
schemaLocation="http://acme.com/supplier/commontypes.xsd"/>
<complexType name="QuoteRequestType">
<sequence>
<element type="common:DocumentInfoType" name="DocumentInfo"/>
<element type="common:OwnerDetails” name=CustomerDetails"/>
<element type="common:PartListType" name=”PartList"/>
</sequence>
</complexType>
<element name="QuoteRequest" type="supReq:QuoteRequestType"></element>
</schema>