<xsd:schema targetNamespace="http://www.w3.org/2009/exi"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified">

  <!-- 
     * This is a schema for the EXI options
     *
     * The schema is made available under the terms of the W3C software notice and license
     * at https://www.w3.org/Consortium/Legal/copyright-software-19980720
     *
    -->

  <xsd:element name="header">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="lesscommon" minOccurs="0">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="uncommon" minOccurs="0">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
                             processContents="skip" />
                    <xsd:element name="alignment" minOccurs="0">
                      <xsd:complexType>
                        <xsd:choice>
                          <xsd:element name="byte">
                            <xsd:complexType />
                          </xsd:element>
                          <xsd:element name="pre-compress">
                            <xsd:complexType />
                          </xsd:element>
                        </xsd:choice>
                      </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="selfContained" minOccurs="0">
                      <xsd:complexType />
                    </xsd:element>
                    <xsd:element name="valueMaxLength" minOccurs="0">
                      <xsd:simpleType>
                        <xsd:restriction base="xsd:unsignedInt" />
                      </xsd:simpleType>
                    </xsd:element>
                    <xsd:element name="valuePartitionCapacity" minOccurs="0">
                      <xsd:simpleType>
                        <xsd:restriction base="xsd:unsignedInt" />
                      </xsd:simpleType>
                    </xsd:element>
                    <xsd:element name="datatypeRepresentationMap"
                                 minOccurs="0" maxOccurs="unbounded">
                      <xsd:complexType>
                        <xsd:sequence>
                          <!-- schema datatype -->
                          <xsd:any namespace="##other" processContents="skip" />
                          <!-- datatype representation -->
                          <xsd:any processContents="skip" />
                        </xsd:sequence>
                      </xsd:complexType>
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="preserve" minOccurs="0">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="dtd" minOccurs="0">
                      <xsd:complexType />
                    </xsd:element>
                    <xsd:element name="prefixes" minOccurs="0">
                      <xsd:complexType />
                    </xsd:element>
                    <xsd:element name="lexicalValues" minOccurs="0">
                      <xsd:complexType />
                    </xsd:element>
                    <xsd:element name="comments" minOccurs="0">
                      <xsd:complexType />
                    </xsd:element>
                    <xsd:element name="pis" minOccurs="0">
                      <xsd:complexType />
                    </xsd:element>
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="blockSize" minOccurs="0">
                <xsd:simpleType>
                  <xsd:restriction base="xsd:unsignedInt">
                    <xsd:minInclusive value="1" />
                  </xsd:restriction>
                </xsd:simpleType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="common" minOccurs="0">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="compression" minOccurs="0">
                <xsd:complexType />
              </xsd:element>
              <xsd:element name="fragment" minOccurs="0">
                <xsd:complexType />
              </xsd:element>
              <xsd:element name="schemaId" minOccurs="0" nillable="true">
                <xsd:simpleType>
                  <xsd:restriction base="xsd:string" />
                </xsd:simpleType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="strict" minOccurs="0">
          <xsd:complexType />
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

  <!-- Built-in EXI Datatype IDs for use in datatype representation maps -->
  <xsd:simpleType name="base64Binary">
     <xsd:restriction base="xsd:base64Binary"/>
  </xsd:simpleType>
  <xsd:simpleType name="hexBinary" >
     <xsd:restriction base="xsd:hexBinary"/>
  </xsd:simpleType>
  <xsd:simpleType name="boolean" >
     <xsd:restriction base="xsd:boolean"/>
  </xsd:simpleType>
  <xsd:simpleType name="decimal" >
     <xsd:restriction base="xsd:decimal"/>
  </xsd:simpleType>
  <xsd:simpleType name="double" >
     <xsd:restriction base="xsd:double"/>
  </xsd:simpleType>
  <xsd:simpleType name="integer" >
     <xsd:restriction base="xsd:integer"/>
  </xsd:simpleType>
  <xsd:simpleType name="string" >
     <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
  <xsd:simpleType name="dateTime" >
     <xsd:restriction base="xsd:dateTime"/>
  </xsd:simpleType>
  <xsd:simpleType name="date" >
     <xsd:restriction base="xsd:date"/>
  </xsd:simpleType>
  <xsd:simpleType name="time" >
     <xsd:restriction base="xsd:time"/>
  </xsd:simpleType>
  <xsd:simpleType name="gYearMonth" >
     <xsd:restriction base="xsd:gYearMonth"/>
  </xsd:simpleType>
  <xsd:simpleType name="gMonthDay" >
     <xsd:restriction base="xsd:gMonthDay"/>
  </xsd:simpleType>
  <xsd:simpleType name="gYear" >
     <xsd:restriction base="xsd:gYear"/>
  </xsd:simpleType>
  <xsd:simpleType name="gMonth" >
     <xsd:restriction base="xsd:gMonth"/>
  </xsd:simpleType>
  <xsd:simpleType name="gDay" >
     <xsd:restriction base="xsd:gDay"/>
  </xsd:simpleType>

  <!-- Qnames reserved for future use in datatype representation maps -->
  <xsd:simpleType name="ieeeBinary32" >
     <xsd:restriction base="xsd:float"/>
  </xsd:simpleType>
  <xsd:simpleType name="ieeeBinary64" >
     <xsd:restriction base="xsd:double"/>
  </xsd:simpleType>
</xsd:schema>
