<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
 targetNamespace="http://www.xml-buddy.com" xmlns="http://www.xml-buddy.com" elementFormDefault="qualified">
  <xs:annotation>
    <xs:documentation xml:lang="en">
            A Purchase order schema example</xs:documentation>
  </xs:annotation>
      <xs:simpleType name="SKU">
    <xs:restriction base="xs:string">
      <xs:pattern value="\d{3}-[A-Z]{2}"/>
    </xs:restriction>
  </xs:simpleType> 
  <xs:complexType name="USAddress">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="street" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="state">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="AL"/>
            <xs:enumeration value="AK"/>
            <xs:enumeration value="AZ"/>
            <xs:enumeration value="AR"/>
            <xs:enumeration value="CA"/>
            <xs:enumeration value="CO"/>
            <xs:enumeration value="CT"/>
            <xs:enumeration value="DE"/>
            <xs:enumeration value="DC"/>
            <xs:enumeration value="FL"/>
            <xs:enumeration value="GA"/>
            <xs:enumeration value="HI"/>
            <xs:enumeration value="ID"/>
            <xs:enumeration value="IL"/>
            <xs:enumeration value="IN"/>
            <xs:enumeration value="IA"/>
            <xs:enumeration value="KS"/>
            <xs:enumeration value="KY"/>
            <xs:enumeration value="LA"/>
            <xs:enumeration value="ME"/>
            <xs:enumeration value="MD"/>
            <xs:enumeration value="MA"/>
            <xs:enumeration value="MI"/>
            <xs:enumeration value="MN"/>
            <xs:enumeration value="MS"/>
            <xs:enumeration value="MO"/>
            <xs:enumeration value="MT"/>
            <xs:enumeration value="NE"/>
            <xs:enumeration value="NV"/>
            <xs:enumeration value="NH"/>
            <xs:enumeration value="NJ"/>
            <xs:enumeration value="NM"/>
            <xs:enumeration value="NY"/>
            <xs:enumeration value="NC"/>
            <xs:enumeration value="ND"/>
            <xs:enumeration value="OH"/>
            <xs:enumeration value="OK"/>
            <xs:enumeration value="OR"/>
            <xs:enumeration value="PA"/>
            <xs:enumeration value="RI"/>
            <xs:enumeration value="SC"/>
            <xs:enumeration value="SD"/>
            <xs:enumeration value="TN"/>
            <xs:enumeration value="TX"/>
            <xs:enumeration value="UT"/>
            <xs:enumeration value="VT"/>
            <xs:enumeration value="VA"/>
            <xs:enumeration value="WA"/>
            <xs:enumeration value="WV"/>
            <xs:enumeration value="WI"/>
            <xs:enumeration value="WY"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element name="zip">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:pattern value="\d{5}"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>
    <xs:attribute name="country" type="xs:NMTOKEN" fixed="US"/>
  </xs:complexType> 
  <xs:complexType name="Items">
    <xs:sequence>
      <xs:element name="item" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="productName" type="xs:string"/>
            <xs:element name="quantity">
              <xs:simpleType>
                <xs:restriction base="xs:positiveInteger">
                  <xs:maxExclusive value="100"/>
                </xs:restriction>
              </xs:simpleType>
            </xs:element>
            <xs:element name="USPrice" type="xs:decimal"/>
            <xs:element name="comment" minOccurs="0"/>
            <xs:element name="shipDate" type="xs:date" minOccurs="0"/>
          </xs:sequence>
          <xs:attribute name="partNum" type="SKU" use="required"/>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="PurchaseOrderType">
    <xs:sequence>
      <xs:element name="shipTo" type="USAddress"/>
      <xs:element name="billTo" type="USAddress"/>
      <xs:element name="comment" minOccurs="0"/>
      <xs:element name="items" type="Items"/>
    </xs:sequence>
    <xs:attribute name="orderDate" type="xs:date"/>
  </xs:complexType>
  <xs:element name="purchaseOrder" type="PurchaseOrderType"/>
  <xs:element name="comment" type="xs:string"/>
</xs:schema>