<xs:schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.opengis.net/gml" elementFormDefault="qualified" version="3.2.0" xml:lang="en" finalDefault="" blockDefault="" attributeFormDefault="unqualified">
    <xs:annotation>
        <appinfo source="urn:opengis:specification:gml:schema-xsd:coordinateSystems:3.2.0">coordinateSystems.xsd</appinfo>
        <documentation>see GML 12.4</documentation>
    </xs:annotation>
    <include schemaLocation="referenceSystems.xsd"/>
    <xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="CoordinateSystemAxis" type="gml:CoordinateSystemAxisType" substitutionGroup="gml:Definition" nillable="false" abstract="false"/>
    <complexType name="CoordinateSystemAxisType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:IdentifiedObjectType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:axisAbbrev" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:axisDirection" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:minimumValue" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:maximumValue" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:rangeMeaning" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
                <attribute ref="gml:uom" use="required"/>
            </extension>
        </complexContent>
    </complexType>
    <element name="axisAbbrev" type="gml:CodeType" nillable="false" abstract="false"/>
    <element name="axisDirection" type="gml:CodeWithAuthorityType" nillable="false" abstract="false"/>
    <element name="minimumValue" type="double" nillable="false" abstract="false"/>
    <element name="maximumValue" type="double" nillable="false" abstract="false"/>
    <element name="rangeMeaning" type="gml:CodeWithAuthorityType" nillable="false" abstract="false"/>
    <attribute name="uom" type="anyURI"/>
    <complexType name="CoordinateSystemAxisPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:CoordinateSystemAxis" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="coordinateSystemAxisRef" type="gml:CoordinateSystemAxisPropertyType" nillable="false" abstract="false"/>
    <element name="AbstractCoordinateSystem" type="gml:AbstractCoordinateSystemType" abstract="true" substitutionGroup="gml:Definition" nillable="false"/>
    <complexType name="AbstractCoordinateSystemType" abstract="true" mixed="false">
        <complexContent>
            <extension base="gml:IdentifiedObjectType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:usesAxis" maxOccurs="unbounded" minOccurs="1" nillable="false"/>
                </sequence>
                <attributeGroup ref="gml:AggregationAttributeGroup"/>
            </extension>
        </complexContent>
    </complexType>
    <element name="usesAxis" type="gml:CoordinateSystemAxisPropertyType" nillable="false" abstract="false"/>
    <complexType name="CoordinateSystemPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:AbstractCoordinateSystem" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="coordinateSystemRef" type="gml:CoordinateSystemPropertyType" nillable="false" abstract="false"/>
    <element name="EllipsoidalCS" type="gml:EllipsoidalCSType" substitutionGroup="gml:AbstractCoordinateSystem" nillable="false" abstract="false"/>
    <complexType name="EllipsoidalCSType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractCoordinateSystemType"/>
        </complexContent>
    </complexType>
    <complexType name="EllipsoidalCSPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:EllipsoidalCS" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="ellipsoidalCSRef" type="gml:EllipsoidalCSPropertyType" nillable="false" abstract="false"/>
    <element name="CartesianCS" type="gml:CartesianCSType" substitutionGroup="gml:AbstractCoordinateSystem" nillable="false" abstract="false"/>
    <complexType name="CartesianCSType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractCoordinateSystemType"/>
        </complexContent>
    </complexType>
    <complexType name="CartesianCSPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:CartesianCS" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="cartesianCSRef" type="gml:CartesianCSPropertyType" nillable="false" abstract="false"/>
    <element name="VerticalCS" type="gml:VerticalCSType" substitutionGroup="gml:AbstractCoordinateSystem" nillable="false" abstract="false"/>
    <complexType name="VerticalCSType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractCoordinateSystemType"/>
        </complexContent>
    </complexType>
    <complexType name="VerticalCSPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:VerticalCS" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="verticalCSRef" type="gml:VerticalCSPropertyType" nillable="false" abstract="false"/>
    <element name="TimeCS" type="gml:TimeCSType" substitutionGroup="gml:AbstractCoordinateSystem" nillable="false" abstract="false"/>
    <complexType name="TimeCSType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractCoordinateSystemType"/>
        </complexContent>
    </complexType>
    <complexType name="TimeCSPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:TimeCS" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="TemporalCS" type="gml:TemporalCSType" substitutionGroup="gml:AbstractCoordinateSystem" nillable="false" abstract="false"/>
    <complexType name="TemporalCSType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractCoordinateSystemType"/>
        </complexContent>
    </complexType>
    <complexType name="TemporalCSPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:TemporalCS" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="temporalCSRef" type="gml:TemporalCSPropertyType" nillable="false" abstract="false"/>
    <element name="LinearCS" type="gml:LinearCSType" substitutionGroup="gml:AbstractCoordinateSystem" nillable="false" abstract="false"/>
    <complexType name="LinearCSType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractCoordinateSystemType"/>
        </complexContent>
    </complexType>
    <complexType name="LinearCSPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:LinearCS" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="linearCSRef" type="gml:LinearCSPropertyType" nillable="false" abstract="false"/>
    <element name="UserDefinedCS" type="gml:UserDefinedCSType" substitutionGroup="gml:AbstractCoordinateSystem" nillable="false" abstract="false"/>
    <complexType name="UserDefinedCSType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractCoordinateSystemType"/>
        </complexContent>
    </complexType>
    <complexType name="UserDefinedCSPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:UserDefinedCS" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="userDefinedCSRef" type="gml:UserDefinedCSPropertyType" nillable="false" abstract="false"/>
    <element name="SphericalCS" type="gml:SphericalCSType" substitutionGroup="gml:AbstractCoordinateSystem" nillable="false" abstract="false"/>
    <complexType name="SphericalCSType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractCoordinateSystemType"/>
        </complexContent>
    </complexType>
    <complexType name="SphericalCSPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:SphericalCS" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="sphericalCSRef" type="gml:SphericalCSPropertyType" nillable="false" abstract="false"/>
    <element name="PolarCS" type="gml:PolarCSType" substitutionGroup="gml:AbstractCoordinateSystem" nillable="false" abstract="false"/>
    <complexType name="PolarCSType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractCoordinateSystemType"/>
        </complexContent>
    </complexType>
    <complexType name="PolarCSPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:PolarCS" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="polarCSRef" type="gml:PolarCSPropertyType" nillable="false" abstract="false"/>
    <element name="CylindricalCS" type="gml:CylindricalCSType" substitutionGroup="gml:AbstractCoordinateSystem" nillable="false" abstract="false"/>
    <complexType name="CylindricalCSType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractCoordinateSystemType"/>
        </complexContent>
    </complexType>
    <complexType name="CylindricalCSPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:CylindricalCS" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="cylindricalCSRef" type="gml:CylindricalCSPropertyType" nillable="false" abstract="false"/>
    <element name="AffineCS" type="gml:AffineCSType" substitutionGroup="gml:AbstractCoordinateSystem" nillable="false" abstract="false"/>
    <complexType name="AffineCSType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractCoordinateSystemType"/>
        </complexContent>
    </complexType>
    <complexType name="AffineCSPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:AffineCS" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="ObliqueCartesianCS" type="gml:ObliqueCartesianCSType" substitutionGroup="gml:AbstractCoordinateSystem" nillable="false" abstract="false"/>
    <complexType name="ObliqueCartesianCSType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractCoordinateSystemType"/>
        </complexContent>
    </complexType>
    <complexType name="ObliqueCartesianCSPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:ObliqueCartesianCS" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="obliqueCartesianCSRef" type="gml:ObliqueCartesianCSPropertyType" nillable="false" abstract="false"/>
</xs:schema>