<?xml version="1.0"?>
<!DOCTYPE schema>

<xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema">

  <xsd:annotation>
    <xsd:documentation>
      Purchase order schema for Example.com.
      Copyright 2000 Example.com.
      All rights reserved.
    </xsd:documentation>
  </xsd:annotation>

  <xsd:simpleType name="SKU">
    <xsd:annotation>
      <xsd:documentation>
        Stock Keeping Unit, a code for identifying products
      </xsd:documentation>
    </xsd:annotation>
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="\d{3}-[A-Z]{2}"/>
    </xsd:restriction>
  </xsd:simpleType>

  <xsd:complexType name="PurchaseOrderType">
    <xsd:sequence>
      <xsd:element type="USAddress" name="shipTo"/>
      <xsd:element type="USAddress" name="billTo"/>
      <xsd:element ref="comment" minOccurs="0"/>
      <xsd:element type="Items" name="items"/>
    </xsd:sequence>
    <xsd:attribute name="orderDate" type="xsd:date"/>
  </xsd:complexType>

  <xsd:complexType name="Items">
    <xsd:sequence>
      <xsd:element maxOccurs="unbounded" name="item" minOccurs="0">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element type="xsd:string" name="productName"/>
            <xsd:element name="quantity">
              <xsd:simpleType>
                <xsd:restriction base="xsd:positiveInteger">
                  <xsd:maxExclusive value="100"/>
                </xsd:restriction>
              </xsd:simpleType>
            </xsd:element>
            <xsd:element type="xsd:number" name="USPrice"/>
            <xsd:element ref="comment" minOccurs="0"/>
            <xsd:element type="xsd:date" name="shipDate" minOccurs="0"/>
          </xsd:sequence>
          <xsd:attribute name="partNum" type="SKU"/>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="USAddress">
    <xsd:sequence>
      <xsd:element type="xsd:string" name="name"/>
      <xsd:element type="xsd:string" name="street"/>
      <xsd:element type="xsd:string" name="city"/>
      <xsd:element type="xsd:string" name="state"/>
      <xsd:element type="xsd:number" name="zip"/>
    </xsd:sequence>
    <xsd:attribute name="country" use="fixed" value="US" type="xsd:NMTOKEN"/>
  </xsd:complexType>

  <xsd:element type="PurchaseOrderType" name="purchaseOrder"/>

  <xsd:element type="xsd:string" name="comment"/>

</xsd:schema>

