<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" targetNamespace="http://www.opengis.net/gml" elementFormDefault="qualified" version="3.2.0" finalDefault="" blockDefault="" attributeFormDefault="unqualified">
    <annotation>
        <appinfo source="urn:opengis:specification:gml:schema-xsd:coverage:v3.2.0">coverage.xsd</appinfo>
        <documentation>see GML 19.3</documentation>
    </annotation>
    <include schemaLocation="feature.xsd"/>
    <include schemaLocation="valueObjects.xsd"/>
    <include schemaLocation="grids.xsd"/>
    <include schemaLocation="geometryAggregates.xsd"/>
    <complexType name="AbstractCoverageType" abstract="true" mixed="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:AbstractFeatureType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:domainSet" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:rangeSet" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </xsd:complexContent>
    </complexType>
    <element name="AbstractCoverage" type="gml:AbstractCoverageType" abstract="true" substitutionGroup="gml:AbstractFeature" nillable="false"/>
    <complexType name="AbstractDiscreteCoverageType" abstract="true" mixed="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:AbstractCoverageType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:coverageFunction" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </xsd:complexContent>
    </complexType>
    <element name="AbstractDiscreteCoverage" type="gml:AbstractDiscreteCoverageType" abstract="true" substitutionGroup="gml:AbstractCoverage" nillable="false"/>
    <complexType name="AbstractContinuousCoverageType" abstract="true" mixed="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:AbstractCoverageType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:coverageFunction" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </xsd:complexContent>
    </complexType>
    <element name="AbstractContinuousCoverage" type="gml:AbstractContinuousCoverageType" abstract="true" substitutionGroup="gml:AbstractFeature" nillable="false"/>
    <element name="domainSet" type="gml:DomainSetType" nillable="false" abstract="false"/>
    <complexType name="DomainSetType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <choice minOccurs="1" maxOccurs="1">
                <element ref="gml:AbstractGeometry" minOccurs="1" maxOccurs="1" nillable="false"/>
                <element ref="gml:AbstractTimeObject" minOccurs="1" maxOccurs="1" nillable="false"/>
            </choice>
        </sequence>
        <attributeGroup ref="gml:OwnershipAttributeGroup"/>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="rangeSet" type="gml:RangeSetType" nillable="false" abstract="false"/>
    <complexType name="RangeSetType" mixed="false" abstract="false">
        <choice minOccurs="1" maxOccurs="1">
            <element ref="gml:ValueArray" maxOccurs="unbounded" minOccurs="1" nillable="false"/>
            <element ref="gml:AbstractScalarValueList" maxOccurs="unbounded" minOccurs="1" nillable="false"/>
            <element ref="gml:DataBlock" minOccurs="1" maxOccurs="1" nillable="false"/>
            <element ref="gml:File" minOccurs="1" maxOccurs="1" nillable="false"/>
        </choice>
    </complexType>
    <element name="DataBlock" type="gml:DataBlockType" substitutionGroup="gml:AbstractObject" nillable="false" abstract="false"/>
    <complexType name="DataBlockType" mixed="false" abstract="false">
        <sequence minOccurs="1" maxOccurs="1">
            <element ref="gml:rangeParameters" minOccurs="1" maxOccurs="1" nillable="false"/>
            <choice minOccurs="1" maxOccurs="1">
                <element ref="gml:tupleList" minOccurs="1" maxOccurs="1" nillable="false"/>
                <element ref="gml:doubleOrNilReasonTupleList" minOccurs="1" maxOccurs="1" nillable="false"/>
            </choice>
        </sequence>
    </complexType>
    <element name="rangeParameters" type="gml:RangeParametersType" nillable="false" abstract="false"/>
    <complexType name="RangeParametersType" mixed="false" abstract="false">
        <sequence minOccurs="1" maxOccurs="1">
            <element ref="gml:AbstractValue" minOccurs="0" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:OwnershipAttributeGroup"/>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="tupleList" type="gml:CoordinatesType" nillable="false" abstract="false"/>
    <element name="doubleOrNilReasonTupleList" type="gml:doubleOrNilReasonList" nillable="false" abstract="false"/>
    <element name="File" type="gml:FileType" substitutionGroup="gml:AbstractObject" nillable="false" abstract="false"/>
    <complexType name="FileType" mixed="false" abstract="false">
        <sequence minOccurs="1" maxOccurs="1">
            <element ref="gml:rangeParameters" minOccurs="1" maxOccurs="1" nillable="false"/>
            <element name="fileName" type="anyURI" minOccurs="1" maxOccurs="1" nillable="false"/>
            <element name="fileStructure" type="gml:FileValueModelType" minOccurs="1" maxOccurs="1" nillable="false"/>
            <element name="mimeType" type="anyURI" minOccurs="0" maxOccurs="1" nillable="false"/>
            <element name="compression" type="anyURI" minOccurs="0" maxOccurs="1" nillable="false"/>
        </sequence>
    </complexType>
    <simpleType name="FileValueModelType">
        <restriction base="string">
            <enumeration value="Record Interleaved"/>
        </restriction>
    </simpleType>
    <element name="coverageFunction" type="gml:CoverageFunctionType" substitutionGroup="gml:AbstractObject" nillable="false" abstract="false"/>
    <complexType name="CoverageFunctionType" mixed="false" abstract="false">
        <choice minOccurs="1" maxOccurs="1">
            <element ref="gml:MappingRule" minOccurs="1" maxOccurs="1" nillable="false"/>
            <element ref="gml:CoverageMappingRule" minOccurs="1" maxOccurs="1" nillable="false"/>
            <element ref="gml:GridFunction" minOccurs="1" maxOccurs="1" nillable="false"/>
        </choice>
    </complexType>
    <element name="CoverageMappingRule" type="gml:MappingRuleType" substitutionGroup="gml:AbstractObject" nillable="false" abstract="false"/>
    <complexType name="MappingRuleType" final="#all" mixed="false" abstract="false">
        <choice minOccurs="1" maxOccurs="1">
            <element name="ruleDefinition" type="string" minOccurs="1" maxOccurs="1" nillable="false"/>
            <element name="ruleReference" type="gml:ReferenceType" minOccurs="1" maxOccurs="1" nillable="false"/>
        </choice>
    </complexType>
    <element name="MappingRule" type="gml:StringOrRefType" nillable="false" abstract="false"/>
    <element name="GridFunction" type="gml:GridFunctionType" substitutionGroup="gml:AbstractObject" nillable="false" abstract="false"/>
    <complexType name="GridFunctionType" mixed="false" abstract="false">
        <sequence minOccurs="1" maxOccurs="1">
            <element name="sequenceRule" type="gml:SequenceRuleType" minOccurs="0" maxOccurs="1" nillable="false"/>
            <element name="startPoint" type="gml:integerList" minOccurs="0" maxOccurs="1" nillable="false"/>
        </sequence>
    </complexType>
    <complexType name="SequenceRuleType" mixed="false" abstract="false">
        <simpleContent>
            <extension base="gml:SequenceRuleNames">
                <attribute name="order" type="gml:IncrementOrder" use="optional"/>
                <attribute name="axisOrder" type="gml:AxisDirectionList" use="optional"/>
            </extension>
        </simpleContent>
    </complexType>
    <simpleType name="SequenceRuleNames">
        <restriction base="string">
            <enumeration value="Linear"/>
            <enumeration value="Boustrophedonic"/>
            <enumeration value="Cantor-diagonal"/>
            <enumeration value="Spiral"/>
            <enumeration value="Morton"/>
            <enumeration value="Hilbert"/>
        </restriction>
    </simpleType>
    <simpleType name="AxisDirectionList">
        <list itemType="gml:AxisDirection"/>
    </simpleType>
    <simpleType name="AxisDirection">
        <restriction base="string">
            <pattern value="[\+\-][1-9][0-9]*"/>
        </restriction>
    </simpleType>
    <simpleType name="IncrementOrder">
        <restriction base="string">
            <enumeration value="+x+y"/>
            <enumeration value="+y+x"/>
            <enumeration value="+x-y"/>
            <enumeration value="-x-y"/>
        </restriction>
    </simpleType>
    <element name="MultiPointCoverage" type="gml:MultiPointCoverageType" substitutionGroup="gml:AbstractDiscreteCoverage" nillable="false" abstract="false"/>
    <complexType name="MultiPointCoverageType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:AbstractDiscreteCoverageType">
                <sequence minOccurs="1" maxOccurs="1">
                    <group ref="gml:StandardObjectProperties" minOccurs="1" maxOccurs="1"/>
                    <element ref="gml:boundedBy" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:multiPointDomain" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:rangeSet" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:coverageFunction" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <element name="multiPointDomain" type="gml:MultiPointDomainType" substitutionGroup="gml:domainSet" nillable="false" abstract="false"/>
    <complexType name="MultiPointDomainType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:DomainSetType">
                <sequence minOccurs="0" maxOccurs="1">
                    <element ref="gml:MultiPoint" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <element name="MultiCurveCoverage" type="gml:MultiCurveCoverageType" substitutionGroup="gml:AbstractDiscreteCoverage" nillable="false" abstract="false"/>
    <complexType name="MultiCurveCoverageType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:AbstractDiscreteCoverageType">
                <sequence minOccurs="1" maxOccurs="1">
                    <group ref="gml:StandardObjectProperties" minOccurs="1" maxOccurs="1"/>
                    <element ref="gml:boundedBy" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:multiCurveDomain" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:rangeSet" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:coverageFunction" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <element name="multiCurveDomain" type="gml:MultiCurveDomainType" substitutionGroup="gml:domainSet" nillable="false" abstract="false"/>
    <complexType name="MultiCurveDomainType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:DomainSetType">
                <sequence minOccurs="0" maxOccurs="1">
                    <element ref="gml:MultiCurve" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <element name="MultiSurfaceCoverage" type="gml:MultiSurfaceCoverageType" substitutionGroup="gml:AbstractDiscreteCoverage" nillable="false" abstract="false"/>
    <complexType name="MultiSurfaceCoverageType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:AbstractDiscreteCoverageType">
                <sequence minOccurs="1" maxOccurs="1">
                    <group ref="gml:StandardObjectProperties" minOccurs="1" maxOccurs="1"/>
                    <element ref="gml:boundedBy" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:multiSurfaceDomain" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:rangeSet" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:coverageFunction" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <element name="multiSurfaceDomain" type="gml:MultiSurfaceDomainType" substitutionGroup="gml:domainSet" nillable="false" abstract="false"/>
    <complexType name="MultiSurfaceDomainType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:DomainSetType">
                <sequence minOccurs="0" maxOccurs="1">
                    <element ref="gml:MultiSurface" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <element name="MultiSolidCoverage" type="gml:MultiSolidCoverageType" substitutionGroup="gml:AbstractDiscreteCoverage" nillable="false" abstract="false"/>
    <complexType name="MultiSolidCoverageType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:AbstractDiscreteCoverageType">
                <sequence minOccurs="1" maxOccurs="1">
                    <group ref="gml:StandardObjectProperties" minOccurs="1" maxOccurs="1"/>
                    <element ref="gml:boundedBy" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:multiSolidDomain" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:rangeSet" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:coverageFunction" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <element name="multiSolidDomain" type="gml:MultiSolidDomainType" substitutionGroup="gml:domainSet" nillable="false" abstract="false"/>
    <complexType name="MultiSolidDomainType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:DomainSetType">
                <sequence minOccurs="0" maxOccurs="1">
                    <element ref="gml:MultiSolid" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <element name="GridCoverage" type="gml:GridCoverageType" substitutionGroup="gml:AbstractDiscreteCoverage" nillable="false" abstract="false"/>
    <complexType name="GridCoverageType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:AbstractDiscreteCoverageType">
                <sequence minOccurs="1" maxOccurs="1">
                    <group ref="gml:StandardObjectProperties" minOccurs="1" maxOccurs="1"/>
                    <element ref="gml:boundedBy" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:gridDomain" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:rangeSet" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:coverageFunction" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <element name="gridDomain" type="gml:GridDomainType" substitutionGroup="gml:domainSet" nillable="false" abstract="false"/>
    <complexType name="GridDomainType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:DomainSetType">
                <sequence minOccurs="0" maxOccurs="1">
                    <choice minOccurs="1" maxOccurs="1">
                        <choice minOccurs="1" maxOccurs="1">
                            <element ref="gml:Grid" minOccurs="1" maxOccurs="1" nillable="false"/>
                        </choice>
                        <choice minOccurs="1" maxOccurs="1"/>
                    </choice>
                </sequence>
                <attributeGroup ref="gml:OwnershipAttributeGroup"/>
                <attributeGroup ref="gml:AssociationAttributeGroup"/>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <element name="RectifiedGridCoverage" type="gml:RectifiedGridCoverageType" substitutionGroup="gml:AbstractDiscreteCoverage" nillable="false" abstract="false"/>
    <complexType name="RectifiedGridCoverageType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:AbstractDiscreteCoverageType">
                <sequence minOccurs="1" maxOccurs="1">
                    <group ref="gml:StandardObjectProperties" minOccurs="1" maxOccurs="1"/>
                    <element ref="gml:boundedBy" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:rectifiedGridDomain" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:rangeSet" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:coverageFunction" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <element name="rectifiedGridDomain" type="gml:RectifiedGridDomainType" substitutionGroup="gml:domainSet" nillable="false" abstract="false"/>
    <complexType name="RectifiedGridDomainType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:DomainSetType">
                <sequence minOccurs="0" maxOccurs="1">
                    <element ref="gml:RectifiedGrid" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
                <attributeGroup ref="gml:OwnershipAttributeGroup"/>
                <attributeGroup ref="gml:AssociationAttributeGroup"/>
            </restriction>
        </xsd:complexContent>
    </complexType>
</schema>