<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns:gml="http://www.opengis.net/gml"
        targetNamespace="http://www.opengis.net/gml"
        xmlns="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified" version="3.1.1" xml:lang="en">
  <annotation>
    <appinfo source="urn:opengis:specification:gml:schema-xsd:coordinateSystems:3.1.1"/>
    <documentation>Subset of coordinateSystems.xsd for GML 3.1.1 common CRSs profile. Primary
      editor: Arliss Whiteside. Last updated 2005-11-14.
      Copyright © 2005 Open Geospatial Consortium, Inc. All Rights Reserved.
    </documentation>
  </annotation>
  <!-- ======================================================
       includes and imports
    ====================================================== -->
  <include schemaLocation="../../CrsSupport/1.0.0/gmlCrsSupportProfile.xsd"/>
  <!-- ======================================================
       elements and types
    ====================================================== -->
  <element name="CoordinateSystemAxis" type="gml:CoordinateSystemAxisType"
           substitutionGroup="gml:Definition"/>
  <!-- =================================================== -->
  <complexType name="CoordinateSystemAxisBaseType" abstract="true">
    <annotation>
      <documentation>Basic encoding for coordinate system axis objects, simplifying and restricting
        the DefinitionType as needed.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="gml:DefinitionType">
        <sequence>
          <element ref="gml:name">
            <annotation>
              <documentation>The name by which this coordinate system axis is identified.
              </documentation>
            </annotation>
          </element>
        </sequence>
        <attribute ref="gml:id" use="required"/>
      </restriction>
    </complexContent>
  </complexType>
  <!-- =================================================== -->
  <complexType name="CoordinateSystemAxisType">
    <annotation>
      <documentation>Definition of a coordinate system axis.</documentation>
    </annotation>
    <complexContent>
      <extension base="gml:CoordinateSystemAxisBaseType">
        <sequence>
          <element ref="gml:axisID" minOccurs="0" maxOccurs="unbounded">
            <annotation>
              <documentation>Set of alternative identifications of this coordinate system axis. The
                first axisID, if any, is normally the primary identification code, and any others
                are aliases.
              </documentation>
            </annotation>
          </element>
          <element ref="gml:remarks" minOccurs="0">
            <annotation>
              <documentation>Comments on or information about this coordinate system axis, including
                data source information.
              </documentation>
            </annotation>
          </element>
          <element ref="gml:axisAbbrev"/>
          <element ref="gml:axisDirection"/>
        </sequence>
        <attribute ref="gml:uom" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- =================================================== -->
  <element name="axisID" type="gml:IdentifierType">
    <annotation>
      <documentation>An identification of a coordinate system axis.</documentation>
    </annotation>
  </element>
  <!-- =================================================== -->
  <element name="axisAbbrev" type="gml:CodeType">
    <annotation>
      <documentation>The abbreviation used for this coordinate system axis. This abbreviation can be
        used to identify the ordinates in a coordinate tuple. Examples are X and Y. The codeSpace
        attribute can reference a source of more information on a set of standardized abbreviations,
        or on this abbreviation.
      </documentation>
    </annotation>
  </element>
  <!-- =================================================== -->
  <element name="axisDirection" type="gml:CodeType">
    <annotation>
      <documentation>Direction of this coordinate system axis (or in the case of Cartesian projected
        coordinates, the direction of this coordinate system axis at the origin). Examples: north or
        south, east or west, up or down. Within any set of coordinate system axes, only one of each
        pair of terms can be used. For earth-fixed CRSs, this direction is often approximate and
        intended to provide a human interpretable meaning to the axis. When a geodetic datum is
        used, the precise directions of the axes may therefore vary slightly from this approximate
        direction. Note that an EngineeringCRS can include specific descriptions of the directions
        of its coordinate system axes. For example, the path of a linear CRS axis can be referenced
        in another document, such as referencing a GML feature that references or includes a curve
        geometry. The codeSpace attribute can reference a source of more information on a set of
        standardized directions, or on this direction.
      </documentation>
    </annotation>
  </element>
  <!-- =================================================== -->
  <attribute name="uom" type="anyURI">
    <annotation>
      <documentation>Identifier of the unit of measure used for this coordinate system axis. The
        value of this coordinate in a coordinate tuple shall be recorded using this unit of measure,
        whenever those coordinates use a coordinate reference system that uses a coordinate system
        that uses this axis.
      </documentation>
    </annotation>
  </attribute>
  <!-- =================================================== -->
  <complexType name="CoordinateSystemAxisRefType">
    <annotation>
      <documentation>Association to a coordinate system axis, either referencing or containing the
        definition of that axis.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:CoordinateSystemAxis"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- =================================================== -->
  <!-- =================================================== -->
  <element name="_CoordinateSystem" type="gml:AbstractCoordinateSystemType" abstract="true"
           substitutionGroup="gml:Definition"/>
  <!-- =================================================== -->
  <complexType name="AbstractCoordinateSystemBaseType" abstract="true">
    <annotation>
      <documentation>Basic encoding for coordinate system objects, simplifying and restricting the
        DefinitionType as needed.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="gml:DefinitionType">
        <sequence>
          <element ref="gml:csName"/>
        </sequence>
        <attribute ref="gml:id" use="required"/>
      </restriction>
    </complexContent>
  </complexType>
  <!-- =================================================== -->
  <element name="csName" type="gml:CodeType" substitutionGroup="gml:name">
    <annotation>
      <documentation>The name by which this coordinate system is identified.</documentation>
    </annotation>
  </element>
  <!-- =================================================== -->
  <complexType name="AbstractCoordinateSystemType" abstract="true">
    <annotation>
      <documentation>A coordinate system (CS) is the set of coordinate system axes that spans a
        given coordinate space. A CS is derived from a set of (mathematical) rules for specifying
        how coordinates in a given space are to be assigned to points. The coordinate values in a
        coordinate tuple shall be recorded in the order in which the coordinate system axes
        associations are recorded, whenever those coordinates use a coordinate reference system that
        uses this coordinate system. This abstract complexType shall not be used, extended, or
        restricted, in an Application Schema, to define a concrete subtype with a meaning equivalent
        to a concrete subtype specified in this document.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractCoordinateSystemBaseType">
        <sequence>
          <element ref="gml:csID" minOccurs="0" maxOccurs="unbounded">
            <annotation>
              <documentation>Set of alternative identifications of this coordinate system. The first
                csID, if any, is normally the primary identification code, and any others are
                aliases.
              </documentation>
            </annotation>
          </element>
          <element ref="gml:remarks" minOccurs="0">
            <annotation>
              <documentation>Comments on or information about this coordinate system, including data
                source information.
              </documentation>
            </annotation>
          </element>
          <element ref="gml:usesAxis" maxOccurs="unbounded">
            <annotation>
              <documentation>Ordered sequence of associations to the coordinate system axes included
                in this coordinate system.
              </documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- =================================================== -->
  <element name="csID" type="gml:IdentifierType">
    <annotation>
      <documentation>An identification of a coordinate system.</documentation>
    </annotation>
  </element>
  <!-- =================================================== -->
  <element name="usesAxis" type="gml:CoordinateSystemAxisRefType">
    <annotation>
      <documentation>Association to a coordinate system axis.</documentation>
    </annotation>
  </element>
  <!-- =================================================== -->
  <complexType name="CoordinateSystemRefType">
    <annotation>
      <documentation>Association to a coordinate system, either referencing or containing the
        definition of that coordinate system.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:_CoordinateSystem"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- =================================================== -->
  <element name="EllipsoidalCS" type="gml:EllipsoidalCSType"
           substitutionGroup="gml:_CoordinateSystem"/>
  <!-- =================================================== -->
  <complexType name="EllipsoidalCSType">
    <annotation>
      <documentation>A two- or three-dimensional coordinate system in which position is specified by
        geodetic latitude, geodetic longitude, and (in the three-dimensional case) ellipsoidal
        height. An EllipsoidalCS shall have two or three usesAxis associations.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractCoordinateSystemType"/>
    </complexContent>
  </complexType>
  <!-- =================================================== -->
  <complexType name="EllipsoidalCSRefType">
    <annotation>
      <documentation>Association to an ellipsoidal coordinate system, either referencing or
        containing the definition of that coordinate system.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:EllipsoidalCS"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- =================================================== -->
  <element name="CartesianCS" type="gml:CartesianCSType" substitutionGroup="gml:_CoordinateSystem"/>
  <!-- =================================================== -->
  <complexType name="CartesianCSType">
    <annotation>
      <documentation>A 1-, 2-, or 3-dimensional coordinate system. Gives the position of points
        relative to orthogonal straight axes in the 2- and 3-dimensional cases. In the 1-dimensional
        case, it contains a single straight coordinate axis. In the multi-dimensional case, all axes
        shall have the same length unit of measure. A CartesianCS shall have one, two, or three
        usesAxis associations.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractCoordinateSystemType"/>
    </complexContent>
  </complexType>
  <!-- =================================================== -->
  <complexType name="CartesianCSRefType">
    <annotation>
      <documentation>Association to a Cartesian coordinate system, either referencing or containing
        the definition of that coordinate system.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:CartesianCS"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- =================================================== -->
  <element name="VerticalCS" type="gml:VerticalCSType" substitutionGroup="gml:_CoordinateSystem"/>
  <!-- =================================================== -->
  <complexType name="VerticalCSType">
    <annotation>
      <documentation>A one-dimensional coordinate system used to record the heights (or depths) of
        points. Such a coordinate system is usually dependent on the Earth's gravity field, perhaps
        loosely as when atmospheric pressure is the basis for the vertical coordinate system axis. A
        VerticalCS shall have one usesAxis association.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractCoordinateSystemType"/>
    </complexContent>
  </complexType>
  <!-- =================================================== -->
  <complexType name="VerticalCSRefType">
    <annotation>
      <documentation>Association to a vertical coordinate system, either referencing or containing
        the definition of that coordinate system.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:VerticalCS"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- =================================================== -->
</schema>
