<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd"
targetNamespace="http://www.ubercart.org"
xmlns="http://www.ubercart.org"
elementFormDefault="qualified">

<!-- Standard data types -->
<xs:element name="id" type="xs:integer"/>
<xs:element name="name" type="xs:string"/>
<xs:element default="" name="description">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:whiteSpace value="preserve"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>

<!-- Store components -->
<xs:element name="vocabulary">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="id"/>
      <xs:element ref="name"/>
      <xs:element minOccurs="0" ref="description"/>
      <xs:element minOccurs="0" name="relations" type="xs:boolean"/>
      <xs:element minOccurs="0" name="hierarchy">
        <xs:simpleType>
          <xs:restriction base="xs:integer">
            <xs:enumeration value="0"/>
            <xs:enumeration value="1"/>
            <xs:enumeration value="2"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element minOccurs="0" name="multiple" type="xs:boolean"/>
      <xs:element minOccurs="0" name="required" type="xs:boolean"/>
      <xs:element minOccurs="0" name="tags" type="xs:boolean"/>
      <xs:element minOccurs="0" name="weight" type="xs:integer"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="nodes" type="xs:string"/>
      <xs:any minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="category">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="id"/>
      <xs:element name="vid" type="xs:integer"/>
      <xs:element ref="name"/>
      <xs:element minOccurs="0" ref="description"/>
      <xs:element maxOccurs="unbounded" minOccurs="0" name="parent" type="xs:integer"/>
      <xs:any minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="manufacturer">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="id"/>
      <xs:element ref="name"/>
      <xs:element minOccurs="0" ref="description"/>
      <xs:element minOccurs="0" name="url" type="xs:string"/>
      <xs:element minOccurs="0" name="phone_no" type="xs:string"/>
      <xs:element minOccurs="0" name="fax_no" type="xs:string"/>
      <xs:any minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="attribute">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="id"/>
      <xs:element ref="name"/>
      <xs:element minOccurs="0" name="ordering" type="xs:integer"/>
      <xs:element minOccurs="0" name="options">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="option">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="id"/>
                  <xs:element ref="name"/>
                  <xs:element minOccurs="0" name="price" type="xs:decimal"/>
                  <xs:element minOccurs="0" name="weight" type="xs:decimal"/>
                  <xs:element minOccurs="0" name="ordering" type="xs:integer"/>
                  <xs:any minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:any minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="class">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="id" type="xs:string"/>
      <xs:element ref="name"/>
      <xs:element ref="description"/>
      <xs:any minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="product">
  <xs:complexType>
    <xs:sequence>
      <xs:element minOccurs="0" name="unique_hash">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:length value="32"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
      <xs:element ref="id"/>
      <xs:element name="type" type="xs:string"/>
      <xs:element ref="name"/>
      <xs:element minOccurs="0" ref="description"/>
      <xs:element name="model" type="xs:string"/>
      <xs:element minOccurs="0" name="manufacturer" type="xs:string"/>
      <xs:element minOccurs="0" name="list_price" type="xs:decimal"/>
      <xs:element minOccurs="0" name="cost" type="xs:decimal"/>
      <xs:element name="sell_price" type="xs:decimal"/>
      <xs:element minOccurs="0" name="weight" type="xs:decimal"/>
      <xs:element minOccurs="0" name="weight_units" type="xs:string"/>
      <xs:element minOccurs="0" name="length" type="xs:decimal"/>
      <xs:element minOccurs="0" name="width" type="xs:decimal"/>
      <xs:element minOccurs="0" name="height" type="xs:decimal"/>
      <xs:element minOccurs="0" name="length_units" type="xs:string"/>
      <xs:element minOccurs="0" name="pkg_qty" type="xs:integer"/>
      <xs:element minOccurs="0" name="default_qty" type="xs:integer"/>
      <xs:element minOccurs="0" name="shippable" type="xs:boolean"/>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="image">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="path" type="xs:string"/>
            <xs:element minOccurs="0" name="alt" type="xs:string"/>
            <xs:element minOccurs="0" name="title" type="xs:string"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="fields">
        <xs:complexType>
          <xs:sequence>
            <xs:element minOccurs="0" maxOccurs="unbounded" name="field">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="name"/>
                  <xs:element maxOccurs="unbounded" name="delta">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:any maxOccurs="unbounded"/>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="categories">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="category">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="id"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="attributes">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="attribute">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="id"/>
                  <xs:element ref="name"/>
                  <xs:element minOccurs="0" name="ordering" type="xs:integer"/>
                  <xs:element minOccurs="0" name="default_option" type="xs:integer"/>
                  <xs:element minOccurs="0" name="options">
                    <xs:complexType>
                      <xs:sequence>
                        <xs:element maxOccurs="unbounded" name="option">
                          <xs:complexType>
                            <xs:sequence>
                              <xs:element ref="id"/>
                              <xs:element ref="name"/>
                              <xs:element minOccurs="0" name="price" type="xs:decimal"/>
                              <xs:element minOccurs="0" name="weight" type="xs:decimal"/>
                              <xs:element minOccurs="0" name="ordering" type="xs:integer"/>
                              <xs:any minOccurs="0" maxOccurs="unbounded"/>
                            </xs:sequence>
                          </xs:complexType>
                        </xs:element>
                      </xs:sequence>
                    </xs:complexType>
                  </xs:element>
                  <xs:any minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="adjustments">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="adjustment">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="combination" type="xs:string"/>
                  <xs:element name="model" type="xs:string"/>
                  <xs:any minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:any minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="status">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="id"/>
      <xs:element ref="name"/>
      <xs:any minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="order">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="id"/>
      <xs:element name="order_status" type="xs:string"/>
      <xs:element name="order_total" type="xs:decimal"/>
      <xs:element name="primary_email" type="xs:string"/>
      <xs:element name="delivery_first_name" type="xs:string"/>
      <xs:element name="delivery_last_name" type="xs:string"/>
      <xs:element name="delivery_phone" type="xs:string"/>
      <xs:element name="delivery_company" type="xs:string"/>
      <xs:element name="delivery_street1" type="xs:string"/>
      <xs:element name="delivery_street2" type="xs:string"/>
      <xs:element name="delivery_city" type="xs:string"/>
      <xs:element name="delivery_zone" type="xs:integer"/>
      <xs:element name="delivery_postal_code" type="xs:string"/>
      <xs:element name="delivery_country" type="xs:integer"/>
      <xs:element name="billing_first_name" type="xs:string"/>
      <xs:element name="billing_last_name" type="xs:string"/>
      <xs:element name="billing_phone" type="xs:string"/>
      <xs:element name="billing_company" type="xs:string"/>
      <xs:element name="billing_street1" type="xs:string"/>
      <xs:element name="billing_street2" type="xs:string"/>
      <xs:element name="billing_city" type="xs:string"/>
      <xs:element name="billing_zone" type="xs:integer"/>
      <xs:element name="billing_postal_code" type="xs:string"/>
      <xs:element name="billing_country" type="xs:integer"/>
      <xs:element name="payment_method" type="xs:string"/>
      <xs:element name="modified" type="xs:decimal"/>
      <xs:element name="created" type="xs:decimal"/>
      <xs:element minOccurs="0" name="products">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="product">
              <xs:complexType>
                <xs:sequence>
                  <xs:element ref="id"/>
                  <xs:element name="qty" type="xs:integer"/>
                  <xs:element ref="name"/>
                  <xs:element minOccurs="0" name="manufacturer" type="xs:string"/>
                  <xs:element name="model" type="xs:string"/>
                  <xs:element name="cost" type="xs:decimal"/>
                  <xs:element name="price" type="xs:decimal"/>
                  <xs:element name="weight" type="xs:decimal"/>
                  <xs:element name="data" type="xs:string"/>
                  <xs:any minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="quote">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="method" type="xs:string"/>
            <xs:element name="accessorials" type="xs:string"/>
            <xs:element name="rate" type="xs:decimal"/>
            <xs:element name="quote_form" type="xs:string"/>
            <xs:any minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="line_items">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="line_item">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="type" type="xs:string"/>
                  <xs:element name="title" type="xs:string"/>
                  <xs:element name="amount" type="xs:decimal"/>
                  <xs:element name="weight" type="xs:integer"/>
                  <xs:any minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="comments">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="comment">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="order_status" type="xs:decimal"/>
                  <xs:element name="created" type="xs:decimal"/>
                  <xs:element name="notified" type="xs:decimal"/>
                  <xs:element name="message" type="xs:string"/>
                  <xs:element name="user" type="xs:string"/>
                  <xs:any minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="admin_comments">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" name="comment">
              <xs:complexType>
                <xs:sequence>
                  <xs:element name="created" type="xs:decimal"/>
                  <xs:element name="message" type="xs:string"/>
                  <xs:element name="user" type="xs:string"/>
                  <xs:any minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:any minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

<xs:element name="store">
  <xs:complexType>
    <xs:sequence>
      <xs:element minOccurs="0" name="vocabularies">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="vocabulary"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="categories">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="category"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="manufacturers">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="manufacturer"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="attributes">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="attribute"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="classes">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="class"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="products">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="product"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="statuses">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="status"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element minOccurs="0" name="orders">
        <xs:complexType>
          <xs:sequence>
            <xs:element maxOccurs="unbounded" ref="order"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:any minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

</xs:schema>
