<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>
        <xs:appinfo source="urn:opengis:specification:gml:schema-xsd:datums:3.2.0">datums.xsd</xs:appinfo>
        <xs:documentation>see GML 12.5</xs:documentation>
    </xs:annotation>
    <include schemaLocation="referenceSystems.xsd"/>
    <include schemaLocation="measures.xsd"/>
    <element name="AbstractDatum" type="gml:AbstractDatumType" abstract="true" substitutionGroup="gml:Definition" nillable="false"/>
    <complexType name="AbstractDatumType" abstract="true" mixed="false">
        <complexContent>
            <extension base="gml:IdentifiedObjectType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:domainOfValidity" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:scope" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                    <element ref="gml:anchorPoint" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:realizationEpoch" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <element name="anchorPoint" type="gml:CodeType" nillable="false" abstract="false"/>
    <element name="realizationEpoch" type="date" nillable="false" abstract="false"/>
    <complexType name="DatumPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:AbstractDatum" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="datumRef" type="gml:DatumPropertyType" nillable="false" abstract="false"/>
    <element name="GeodeticDatum" type="gml:GeodeticDatumType" substitutionGroup="gml:AbstractDatum" nillable="false" abstract="false"/>
    <complexType name="GeodeticDatumType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractDatumType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:usesPrimeMeridian" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:usesEllipsoid" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <element name="usesPrimeMeridian" type="gml:PrimeMeridianPropertyType" nillable="false" abstract="false"/>
    <element name="usesEllipsoid" type="gml:EllipsoidPropertyType" nillable="false" abstract="false"/>
    <complexType name="GeodeticDatumPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:GeodeticDatum" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="geodeticDatumRef" type="gml:GeodeticDatumPropertyType" nillable="false" abstract="false"/>
    <element name="Ellipsoid" type="gml:EllipsoidType" substitutionGroup="gml:Definition" nillable="false" abstract="false"/>
    <complexType name="EllipsoidType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:IdentifiedObjectType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:semiMajorAxis" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:secondDefiningParameter" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <element name="semiMajorAxis" type="gml:MeasureType" nillable="false" abstract="false"/>
    <element name="secondDefiningParameter" nillable="false" abstract="false">
        <complexType mixed="false">
            <sequence minOccurs="1" maxOccurs="1">
                <element ref="gml:SecondDefiningParameter" minOccurs="1" maxOccurs="1" nillable="false"/>
            </sequence>
        </complexType>
    </element>
    <element name="SecondDefiningParameter" nillable="false" abstract="false">
        <complexType mixed="false">
            <choice minOccurs="1" maxOccurs="1">
                <element name="inverseFlattening" type="gml:MeasureType" minOccurs="1" maxOccurs="1" nillable="false"/>
                <element name="semiMinorAxis" type="gml:LengthType" minOccurs="1" maxOccurs="1" nillable="false"/>
                <element name="isSphere" minOccurs="1" maxOccurs="1" nillable="false">
                    <simpleType>
                        <restriction base="string">
                            <enumeration value="sphere"/>
                        </restriction>
                    </simpleType>
                </element>
            </choice>
        </complexType>
    </element>
    <complexType name="EllipsoidPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:Ellipsoid" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="ellipsoidRef" type="gml:EllipsoidPropertyType" nillable="false" abstract="false"/>
    <element name="PrimeMeridian" type="gml:PrimeMeridianType" substitutionGroup="gml:Definition" nillable="false" abstract="false"/>
    <complexType name="PrimeMeridianType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:IdentifiedObjectType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:greenwichLongitude" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <element name="greenwichLongitude" type="gml:AngleType" nillable="false" abstract="false"/>
    <complexType name="PrimeMeridianPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:PrimeMeridian" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="primeMeridianRef" type="gml:PrimeMeridianPropertyType" nillable="false" abstract="false"/>
    <element name="EngineeringDatum" type="gml:EngineeringDatumType" substitutionGroup="gml:AbstractDatum" nillable="false" abstract="false"/>
    <complexType name="EngineeringDatumType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractDatumType"/>
        </complexContent>
    </complexType>
    <complexType name="EngineeringDatumPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:EngineeringDatum" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="engineeringDatumRef" type="gml:EngineeringDatumPropertyType" nillable="false" abstract="false"/>
    <element name="ImageDatum" type="gml:ImageDatumType" substitutionGroup="gml:AbstractDatum" nillable="false" abstract="false"/>
    <complexType name="ImageDatumType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractDatumType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:pixelInCell" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <element name="pixelInCell" type="gml:CodeWithAuthorityType" nillable="false" abstract="false"/>
    <complexType name="ImageDatumPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:ImageDatum" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="imageDatumRef" type="gml:ImageDatumPropertyType" nillable="false" abstract="false"/>
    <element name="VerticalDatum" type="gml:VerticalDatumType" substitutionGroup="gml:AbstractDatum" nillable="false" abstract="false"/>
    <complexType name="VerticalDatumType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:AbstractDatumType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:verticalDatumType" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <element name="verticalDatumType" type="gml:CodeWithAuthorityType" nillable="false" abstract="false"/>
    <complexType name="VerticalDatumPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:VerticalDatum" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="verticalDatumRef" type="gml:VerticalDatumPropertyType" nillable="false" abstract="false"/>
    <element name="TemporalDatum" type="gml:TemporalDatumType" substitutionGroup="gml:AbstractDatum" nillable="false" abstract="false"/>
    <complexType name="TemporalDatumType" mixed="false" abstract="false">
        <complexContent>
            <extension base="gml:TemporalDatumBaseType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:origin" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    <complexType name="TemporalDatumBaseType" abstract="true" mixed="false">
        <complexContent>
            <restriction base="gml:AbstractDatumType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                    <element ref="gml:description" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:descriptionReference" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:identifier" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:name" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                    <element ref="gml:remarks" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:domainOfValidity" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:scope" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                </sequence>
                <attribute ref="gml:id" use="required"/>
            </restriction>
        </complexContent>
    </complexType>
    <element name="origin" type="dateTime" nillable="false" abstract="false"/>
    <complexType name="TemporalDatumPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:TemporalDatum" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="temporalDatumRef" type="gml:TemporalDatumPropertyType" nillable="false" abstract="false"/>
</xs:schema>