<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" xmlns:gmd="http://www.isotc211.org/2005/gmd" 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-xsd:coordinateOperations:3.2.0">coordinateOperations.xsd</appinfo>
        <documentation>see GML 12.6</documentation>
    </annotation>
    <include schemaLocation="referenceSystems.xsd"/>
    <include schemaLocation="measures.xsd"/>
    <import namespace="http://www.isotc211.org/2005/gmd" schemaLocation="../../gmd/metadataEntity.xsd"/>
    <element name="AbstractCoordinateOperation" type="gml:AbstractCoordinateOperationType" abstract="true" substitutionGroup="gml:Definition" nillable="false"/>
    <complexType name="AbstractCoordinateOperationType" abstract="true" mixed="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <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:operationVersion" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:coordinateOperationAccuracy" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                    <element ref="gml:sourceCRS" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:targetCRS" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </xsd:complexContent>
    </complexType>
    <element name="operationVersion" type="string" nillable="false" abstract="false"/>
    <element name="coordinateOperationAccuracy" nillable="false" abstract="false">
        <complexType mixed="false">
            <sequence minOccurs="0" maxOccurs="1">
                <element ref="gmd:AbstractDQ_PositionalAccuracy" minOccurs="1" maxOccurs="1" nillable="false"/>
            </sequence>
            <attributeGroup ref="gml:AssociationAttributeGroup"/>
        </complexType>
    </element>
    <element name="sourceCRS" type="gml:CRSPropertyType" nillable="false" abstract="false"/>
    <element name="targetCRS" type="gml:CRSPropertyType" nillable="false" abstract="false"/>
    <complexType name="CoordinateOperationPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:AbstractCoordinateOperation" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="coordinateOperationRef" type="gml:CoordinateOperationPropertyType" nillable="false" abstract="false"/>
    <element name="AbstractSingleOperation" type="gml:AbstractCoordinateOperationType" abstract="true" substitutionGroup="gml:AbstractCoordinateOperation" nillable="false"/>
    <complexType name="SingleOperationPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:AbstractSingleOperation" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="singleOperationRef" type="gml:SingleOperationPropertyType" nillable="false" abstract="false"/>
    <element name="AbstractOperation" type="gml:AbstractCoordinateOperationType" abstract="true" substitutionGroup="gml:AbstractSingleOperation" nillable="false"/>
    <complexType name="OperationPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:AbstractOperation" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="operationRef" type="gml:OperationPropertyType" nillable="false" abstract="false"/>
    <element name="AbstractGeneralConversion" type="gml:AbstractGeneralConversionType" abstract="true" substitutionGroup="gml:AbstractOperation" nillable="false"/>
    <complexType name="AbstractGeneralConversionType" abstract="true" mixed="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:AbstractCoordinateOperationType">
                <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"/>
                    <element ref="gml:coordinateOperationAccuracy" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                </sequence>
                <attribute ref="gml:id" use="required"/>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <complexType name="GeneralConversionPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:AbstractGeneralConversion" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="generalConversionRef" type="gml:GeneralConversionPropertyType" nillable="false" abstract="false"/>
    <element name="AbstractGeneralTransformation" type="gml:AbstractGeneralTransformationType" abstract="true" substitutionGroup="gml:AbstractOperation" nillable="false"/>
    <complexType name="AbstractGeneralTransformationType" abstract="true" mixed="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <restriction base="gml:AbstractCoordinateOperationType">
                <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"/>
                    <element ref="gml:operationVersion" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:coordinateOperationAccuracy" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                    <element ref="gml:sourceCRS" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:targetCRS" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
                <attribute ref="gml:id" use="required"/>
            </restriction>
        </xsd:complexContent>
    </complexType>
    <complexType name="GeneralTransformationPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:AbstractGeneralTransformation" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="generalTransformationRef" type="gml:GeneralTransformationPropertyType" nillable="false" abstract="false"/>
    <element name="ConcatenatedOperation" type="gml:ConcatenatedOperationType" substitutionGroup="gml:AbstractCoordinateOperation" nillable="false" abstract="false"/>
    <complexType name="ConcatenatedOperationType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:AbstractCoordinateOperationType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:usesSingleOperation" minOccurs="2" maxOccurs="unbounded" nillable="false"/>
                </sequence>
                <attributeGroup ref="gml:AggregationAttributeGroup"/>
            </extension>
        </xsd:complexContent>
    </complexType>
    <element name="usesSingleOperation" type="gml:SingleOperationPropertyType" nillable="false" abstract="false"/>
    <complexType name="ConcatenatedOperationPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:ConcatenatedOperation" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="concatenatedOperationRef" type="gml:ConcatenatedOperationPropertyType" nillable="false" abstract="false"/>
    <element name="PassThroughOperation" type="gml:PassThroughOperationType" substitutionGroup="gml:AbstractSingleOperation" nillable="false" abstract="false"/>
    <complexType name="PassThroughOperationType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:AbstractCoordinateOperationType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:modifiedCoordinate" maxOccurs="unbounded" minOccurs="1" nillable="false"/>
                    <element ref="gml:usesOperation" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
                <attributeGroup ref="gml:AggregationAttributeGroup"/>
            </extension>
        </xsd:complexContent>
    </complexType>
    <element name="modifiedCoordinate" type="positiveInteger" nillable="false" abstract="false"/>
    <element name="usesOperation" type="gml:OperationPropertyType" nillable="false" abstract="false"/>
    <complexType name="PassThroughOperationPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:PassThroughOperation" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="passThroughOperationRef" type="gml:PassThroughOperationPropertyType" nillable="false" abstract="false"/>
    <element name="Conversion" type="gml:ConversionType" substitutionGroup="gml:AbstractGeneralConversion" nillable="false" abstract="false"/>
    <complexType name="ConversionType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:AbstractGeneralConversionType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:usesMethod" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:usesValue" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                </sequence>
            </extension>
        </xsd:complexContent>
    </complexType>
    <element name="usesMethod" type="gml:OperationMethodPropertyType" nillable="false" abstract="false"/>
    <element name="usesValue" type="gml:AbstractGeneralParameterValuePropertyType" nillable="false" abstract="false"/>
    <complexType name="ConversionPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:Conversion" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="conversionRef" type="gml:ConversionPropertyType" nillable="false" abstract="false"/>
    <element name="Transformation" type="gml:TransformationType" substitutionGroup="gml:AbstractGeneralTransformation" nillable="false" abstract="false"/>
    <complexType name="TransformationType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:AbstractGeneralTransformationType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:usesMethod" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:usesValue" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                </sequence>
            </extension>
        </xsd:complexContent>
    </complexType>
    <complexType name="TransformationPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:Transformation" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="transformationRef" type="gml:TransformationPropertyType" nillable="false" abstract="false"/>
    <element name="AbstractGeneralParameterValue" type="gml:AbstractGeneralParameterValueType" abstract="true" substitutionGroup="gml:AbstractObject" nillable="false"/>
    <complexType name="AbstractGeneralParameterValueType" abstract="true" mixed="false">
        <sequence minOccurs="1" maxOccurs="1"/>
    </complexType>
    <complexType name="AbstractGeneralParameterValuePropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:AbstractGeneralParameterValue" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
    </complexType>
    <element name="ParameterValue" type="gml:ParameterValueType" substitutionGroup="gml:AbstractGeneralParameterValue" nillable="false" abstract="false"/>
    <complexType name="ParameterValueType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:AbstractGeneralParameterValueType">
                <sequence minOccurs="1" maxOccurs="1">
                    <choice minOccurs="1" maxOccurs="1">
                        <element ref="gml:value" minOccurs="1" maxOccurs="1" nillable="false"/>
                        <element ref="gml:dmsAngleValue" minOccurs="1" maxOccurs="1" nillable="false"/>
                        <element ref="gml:stringValue" minOccurs="1" maxOccurs="1" nillable="false"/>
                        <element ref="gml:integerValue" minOccurs="1" maxOccurs="1" nillable="false"/>
                        <element ref="gml:booleanValue" minOccurs="1" maxOccurs="1" nillable="false"/>
                        <element ref="gml:valueList" minOccurs="1" maxOccurs="1" nillable="false"/>
                        <element ref="gml:integerValueList" minOccurs="1" maxOccurs="1" nillable="false"/>
                        <element ref="gml:valueFile" minOccurs="1" maxOccurs="1" nillable="false"/>
                    </choice>
                    <element ref="gml:valueOfParameter" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </xsd:complexContent>
    </complexType>
    <element name="value" type="gml:MeasureType" nillable="false" abstract="false"/>
    <element name="dmsAngleValue" type="gml:DMSAngleType" nillable="false" abstract="false"/>
    <element name="stringValue" type="string" nillable="false" abstract="false"/>
    <element name="integerValue" type="positiveInteger" nillable="false" abstract="false"/>
    <element name="booleanValue" type="boolean" nillable="false" abstract="false"/>
    <element name="valueList" type="gml:MeasureListType" nillable="false" abstract="false"/>
    <element name="integerValueList" type="gml:integerList" nillable="false" abstract="false"/>
    <element name="valueFile" type="anyURI" nillable="false" abstract="false"/>
    <element name="valueOfParameter" type="gml:OperationParameterPropertyType" nillable="false" abstract="false"/>
    <element name="ParameterValueGroup" type="gml:ParameterValueGroupType" substitutionGroup="gml:AbstractGeneralParameterValue" nillable="false" abstract="false"/>
    <complexType name="ParameterValueGroupType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:AbstractGeneralParameterValueType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:includesValue" minOccurs="2" maxOccurs="unbounded" nillable="false"/>
                    <element ref="gml:valuesOfGroup" minOccurs="1" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </xsd:complexContent>
    </complexType>
    <element name="includesValue" type="gml:AbstractGeneralParameterValueType" substitutionGroup="gml:AbstractGeneralParameterValue" nillable="false" abstract="false"/>
    <element name="valuesOfGroup" type="gml:OperationParameterGroupPropertyType" nillable="false" abstract="false"/>
    <element name="OperationMethod" type="gml:OperationMethodType" substitutionGroup="gml:Definition" nillable="false" abstract="false"/>
    <complexType name="OperationMethodType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:IdentifiedObjectType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:methodFormula" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:sourceDimensions" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:targetDimensions" minOccurs="1" maxOccurs="1" nillable="false"/>
                    <element ref="gml:usesParameter" minOccurs="0" maxOccurs="unbounded" nillable="false"/>
                </sequence>
            </extension>
        </xsd:complexContent>
    </complexType>
    <element name="methodFormula" type="gml:CodeType" nillable="false" abstract="false"/>
    <element name="sourceDimensions" type="positiveInteger" nillable="false" abstract="false"/>
    <element name="targetDimensions" type="positiveInteger" nillable="false" abstract="false"/>
    <element name="usesParameter" type="gml:AbstractGeneralOperationParameterPropertyType" nillable="false" abstract="false"/>
    <complexType name="OperationMethodPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:OperationMethod" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="operationMethodRef" type="gml:OperationMethodPropertyType" nillable="false" abstract="false"/>
    <element name="AbstractGeneralOperationParameter" type="gml:AbstractGeneralOperationParameterType" abstract="true" substitutionGroup="gml:Definition" nillable="false"/>
    <complexType name="AbstractGeneralOperationParameterType" abstract="true" mixed="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:IdentifiedObjectType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:minimumOccurs" minOccurs="0" maxOccurs="1" nillable="false"/>
                </sequence>
            </extension>
        </xsd:complexContent>
    </complexType>
    <element name="minimumOccurs" type="nonNegativeInteger" nillable="false" abstract="false"/>
    <complexType name="AbstractGeneralOperationParameterPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:AbstractGeneralOperationParameter" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="abstractGeneralOperationParameterRef" type="gml:AbstractGeneralOperationParameterPropertyType" nillable="false" abstract="false"/>
    <element name="OperationParameter" type="gml:OperationParameterType" substitutionGroup="gml:AbstractGeneralOperationParameter" nillable="false" abstract="false"/>
    <complexType name="OperationParameterType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:AbstractGeneralOperationParameterType">
                <sequence minOccurs="1" maxOccurs="1"/>
            </extension>
        </xsd:complexContent>
    </complexType>
    <complexType name="OperationParameterPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:OperationParameter" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="operationParameterRef" type="gml:OperationParameterPropertyType" nillable="false" abstract="false"/>
    <element name="OperationParameterGroup" type="gml:OperationParameterGroupType" substitutionGroup="gml:AbstractGeneralOperationParameter" nillable="false" abstract="false"/>
    <complexType name="OperationParameterGroupType" mixed="false" abstract="false">
        <xsd:complexContent xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <extension base="gml:AbstractGeneralOperationParameterType">
                <sequence minOccurs="1" maxOccurs="1">
                    <element ref="gml:maximumOccurs" minOccurs="0" maxOccurs="1" nillable="false"/>
                    <element ref="gml:includesParameter" minOccurs="2" maxOccurs="unbounded" nillable="false"/>
                </sequence>
            </extension>
        </xsd:complexContent>
    </complexType>
    <element name="maximumOccurs" type="positiveInteger" nillable="false" abstract="false"/>
    <element name="includesParameter" type="gml:AbstractGeneralOperationParameterPropertyType" nillable="false" abstract="false"/>
    <complexType name="OperationParameterGroupPropertyType" mixed="false" abstract="false">
        <sequence minOccurs="0" maxOccurs="1">
            <element ref="gml:OperationParameterGroup" minOccurs="1" maxOccurs="1" nillable="false"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
    </complexType>
    <element name="operationParameterGroupRef" type="gml:OperationParameterPropertyType" nillable="false" abstract="false"/>
</schema>