<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" targetNamespace="http://www.opengis.net/gml" elementFormDefault="qualified" version="3.2.0" xml:lang="en" finalDefault="" blockDefault="" attributeFormDefault="unqualified">
    <annotation>
        <appinfo source="urn:opengis:specification:gml:schema-units:v3.2.0">units.xsd</appinfo>
        <documentation>see GML 16.2</documentation>
    </annotation>
    <include schemaLocation="dictionary.xsd"/>
    <element name="unitOfMeasure" type="gml:UnitOfMeasureType" nillable="false" abstract="false"/>
    <complexType name="UnitOfMeasureType" mixed="false" abstract="false">
        <sequence minOccurs="1" maxOccurs="1"/>
        <attribute name="uom" type="gml:UomIdentifier" use="required"/>
    </complexType>
    <element name="UnitDefinition" type="gml:UnitDefinitionType" substitutionGroup="gml:Definition" nillable="false" abstract="false"/>
    <complexType name="UnitDefinitionType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:DefinitionType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:quantityType" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:quantityTypeReference" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:catalogSymbol" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <element name="quantityType" type="gml:StringOrRefType" nillable="false" abstract="false"/>
    <element name="quantityTypeReference" type="gml:ReferenceType" nillable="false" abstract="false"/>
    <element name="catalogSymbol" type="gml:CodeType" nillable="false" abstract="false"/>
    <element name="BaseUnit" type="gml:BaseUnitType" substitutionGroup="gml:UnitDefinition" nillable="false" abstract="false"/>
    <complexType name="BaseUnitType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:UnitDefinitionType"/>
        </complexContent>
    </complexType>
    <element name="DerivedUnit" type="gml:DerivedUnitType" substitutionGroup="gml:UnitDefinition" nillable="false" abstract="false"/>
    <complexType name="DerivedUnitType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:UnitDefinitionType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:derivationUnitTerm" maxOccurs="unbounded" minOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <element name="derivationUnitTerm" type="gml:DerivationUnitTermType" nillable="false" abstract="false"/>
    <complexType name="DerivationUnitTermType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:UnitOfMeasureType">
                <attribute name="exponent" type="integer" use="optional"/>
            </extension>
        </complexContent>
    </complexType>
    <element name="ConventionalUnit" type="gml:ConventionalUnitType" substitutionGroup="gml:UnitDefinition" nillable="false" abstract="false"/>
    <complexType name="ConventionalUnitType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:UnitDefinitionType">
                <sequence minOccurs="1" maxOccurs="1">
                    <choice minOccurs="1" maxOccurs="1">
                        <element ref="gml:conversionToPreferredUnit" minOccurs="1" maxOccurs="1" nillable="false"/>
                        <element ref="gml:roughConversionToPreferredUnit" minOccurs="1" maxOccurs="1" nillable="false"/>
                    </choice>
                    <element ref="gml:derivationUnitTerm" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <element name="conversionToPreferredUnit" type="gml:ConversionToPreferredUnitType" nillable="false" abstract="false"/>
    <element name="roughConversionToPreferredUnit" type="gml:ConversionToPreferredUnitType" nillable="false" abstract="false"/>
    <complexType name="ConversionToPreferredUnitType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:UnitOfMeasureType">
                <choice minOccurs="1" maxOccurs="1">
                    <element name="factor" type="double" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element name="formula" type="gml:FormulaType" minOccurs="1" maxOccurs="1" nillable="false"/>
                </choice>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="FormulaType" mixed="false" abstract="false">
        <sequence minOccurs="1" maxOccurs="1">
            <element name="a" type="double" minOccurs="0" maxOccurs="1" nillable="false"/>
            <element name="b" type="double" minOccurs="1" maxOccurs="1" nillable="false"/>
            <element name="c" type="double" minOccurs="1" maxOccurs="1" nillable="false"/>
            <element name="d" type="double" minOccurs="0" maxOccurs="1" nillable="false"/>
        </sequence>
    </complexType>
</schema>