<?xml version="1.0" encoding="UTF-8"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xs:complexType name="compliantSpecBag">
    <xs:sequence>
      <xs:element name="specification" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:string">
              <xs:attribute name="specificationKey" type="xs:string" use="required"/>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="featureBag">
    <xs:sequence>
      <xs:element name="feature" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="parameter">
    <xs:sequence>
      <xs:element name="keyName" type="xs:string"/>
      <xs:element name="keyValue" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="parameterBag">
    <xs:sequence>
      <xs:element name="parameter" type="parameter" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="product">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="description" type="xs:string"/>
      <xs:element name="compliantSpecBag" type="compliantSpecBag"/>
      <xs:element name="featureBag" type="featureBag"/>
      <xs:element name="parameterBag" type="parameterBag"/>
    </xs:sequence>
    <xs:attribute name="parentCategoryKey" type="xs:string" use="required"/>
  </xs:complexType>

  <xs:complexType name="category">
    <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="description" type="xs:string"/>
      <xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
      <xs:element name="product" type="product" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="categoryKey" type="xs:string" use="required"/>
    <xs:attribute name="parentCategoryKey" type="xs:string" use="required"/>
  </xs:complexType>

  <xs:element name="save_category">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="authInfo" type="xs:base64Binary"/>
        <xs:element name="category" type="category" minOccurs="0" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:schema>
