<schema xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:bidi="http://schemas.microsoft.com/windows/2010/09/printing/usbbidi"
        targetNamespace="http://schemas.microsoft.com/windows/2010/09/printing/usbbidi">
  <annotation>
    <documentation>
      USB Printing Bidi Extension XML Schema for Print Class Driver v1.0

      Copyright (c) Microsoft Corporation.  All rights reserved.
    </documentation>
  </annotation>

  <element name="Schema">
    <complexType>
      <sequence minOccurs="1" maxOccurs="unbounded">
        <element name="Property" type="bidi:PROPERTY" minOccurs="1" maxOccurs="unbounded"/>
        <element name="PortStatus" type="bidi:PortStatusType" minOccurs="0" maxOccurs="1"/>
      </sequence>
    </complexType>
  </element>


  <complexType name="PROPERTY">
    <sequence minOccurs="1" maxOccurs="unbounded">
      <choice>
        <element name="Property"        type="bidi:PROPERTY"/>
        <element name="IndexedProperty" type="bidi:INDEXED_PROPERTY"/>
        <element name="Const"           type="bidi:CONST"/>
        <element name="Value"           type="bidi:VALUE"/>
        <element name="BuiltIn"         type="bidi:BUILT_IN"/>
        <element name="Event"           type="bidi:EVENT"/>
      </choice>
    </sequence>
    <attribute name="name" type="bidi:PROPERTY_NAME" use="required"/>
  </complexType>

  <simpleType name="PROPERTY_NAME">
    <restriction base="string">
      <pattern value="\w+"/>
    </restriction>
  </simpleType>

  <complexType name="INDEXED_PROPERTY">
    <sequence minOccurs="1" maxOccurs="unbounded">
      <choice>
        <element name="IndexedProperty"    type="bidi:INDEXED_PROPERTY"/>
        <element name="NonIndexedProperty" type="bidi:NON_INDEXED_PROPERTY"/>
        <element name="Value"              type="bidi:VALUE"/>
        <element name="BuiltIn"         type="bidi:BUILT_IN"/>
      </choice>
    </sequence>
    <attribute name="name" type="bidi:PROPERTY_NAME" use="required"/>
  </complexType>

  <complexType name="NON_INDEXED_PROPERTY">
    <complexContent>
      <extension base="bidi:INDEXED_PROPERTY"/>
    </complexContent>
  </complexType>

  <simpleType name="BIDI_TYPE">
    <restriction base="string">
      <enumeration value="BIDI_INT"/>
      <enumeration value="BIDI_ENUM"/>
      <enumeration value="BIDI_STRING"/>
      <enumeration value="BIDI_TEXT"/>
      <enumeration value="BIDI_FLOAT"/>
      <enumeration value="BIDI_BOOL"/>
      <enumeration value="BIDI_BLOB"/>
    </restriction>
  </simpleType>

  <simpleType name="ACCESS_TYPE">
    <restriction base="string">
      <enumeration value="Get"/>
      <enumeration value="Set"/>
      <enumeration value="GetSet"/>
    </restriction>
  </simpleType>

  <complexType name="CONST">
    <attribute name="name"              type="bidi:VALUE_NAME"   use="required"/>
    <attribute name="type"              type="bidi:BIDI_TYPE"    use="required"/>
    <attribute name="value"             type="string"            use="required"/>
  </complexType>

  <complexType name="VALUE">
    <attribute name="name"              type="bidi:VALUE_NAME"   use="required"/>
    <attribute name="type"              type="bidi:BIDI_TYPE"    use="required"/>
    <attribute name="accessType"        type="bidi:ACCESS_TYPE"  use="required"/>
    <attribute name="queryKey"          type="string"            use="optional"/>
    <attribute name="refreshInterval"   type="integer"           use="optional"/>
    <attribute name="drvPrinterEvent"   type="boolean"           use="optional"/>
  </complexType>

  <complexType name="EVENT">
    <attribute name="name"              type="bidi:VALUE_NAME"   use="required"/>
  </complexType>

  <simpleType name="VALUE_NAME">
    <restriction base="string">
      <pattern value="\w+"/>
    </restriction>
  </simpleType>

  <complexType name="BUILT_IN" >
    <attribute name="name"              type="string"   use="required"/>
    <attribute name="id"                type="string"   use="required"/>
  </complexType>

  <complexType name ="PortStatusType">
    <sequence>
      <element name="Status" type="bidi:StatusEntryType" maxOccurs="unbounded" />
    </sequence>
  </complexType>

  <complexType name ="StatusEntryType">
    <sequence>
      <element name="Keyword" type="bidi:string64"/>
      <element name="Code" type="int"/>
      <element name="Severity" type="int"/>
    </sequence>
  </complexType>

  <simpleType name='string64'>
    <restriction base='string'>
      <maxLength value='64'/>
      <pattern value='\w+'/>
    </restriction>
  </simpleType>

</schema>
