<xsd:schema targetNamespace="http://www.w3.org/2009/exi"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified">
    
    <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: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>

