<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XML Spy 2005 R3 U (http://www.xmlspy.com) by David S. Burggraf (Galdos Systems Inc.) -->
<schema xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:gml="http://www.opengis.net/gml"
        xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:smil20="http://www.w3.org/2001/SMIL20/"
        xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.opengis.net/gml"
        elementFormDefault="qualified" version="3.1.1">
  <annotation>
    <documentation>GML Subset schema for
      gml:_Feature,gml:_FeatureCollection,gml:FeatureCollection,gml:_Coverage,gml:RectifiedGridCoverage,gml:MeasureOrNullListType,gml:Point,gml:LineString,gml:Polygon,gml:LinearRing,gml:Dictionary,gml:_Definition,gml:dictionaryEntry,gml:Dictionary,gml:BaseUnit,gml:ConventionalUnit,gml:DerivedUnit,gml:ProjectedCRS,gml:Conversion,gml:GeographicCRS,gml:centerLineOf,gml:extentOf,gml:QuantityList,gml:GeometryPropertyType,gml:PolygonPropertyType,gml:defaultStyle,gml:MultiSurface,gml:Style,gml:_MetaData,
      written by gmlSubset.xslt.
    </documentation>
  </annotation>
  <import namespace="http://www.w3.org/1999/xlink"
          schemaLocation="../../../../../xlink/1.0.0/xlinks.xsd"/>
  <import namespace="http://www.w3.org/2001/SMIL20/" schemaLocation="../../../smil/smil20.xsd"/>
  <import namespace="http://www.w3.org/2001/SMIL20/Language"
          schemaLocation="../../../smil/smil20-language.xsd"/>
  <!-- ================================================= -->
  <element name="_Feature" type="gml:AbstractFeatureType" abstract="true"
           substitutionGroup="gml:_GML"/>
  <!-- ================================================= -->
  <complexType name="AbstractFeatureType" abstract="true">
    <annotation>
      <documentation>An abstract feature provides a set of common properties, including id,
        metaDataProperty, name and description inherited from AbstractGMLType, plus boundedBy. A
        concrete feature type shall derive from this type and specify additional properties in an
        application schema. A feature shall possess an identifying attribute ('id' - 'fid' has been
        deprecated).
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <element ref="gml:boundedBy" minOccurs="0"/>
          <element ref="gml:location" minOccurs="0">
            <annotation>
              <appinfo>deprecated</appinfo>
              <documentation>deprecated in GML version 3.1</documentation>
            </annotation>
          </element>
          <!-- additional properties shall be specified in an application schema -->
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractGMLType" abstract="true">
    <annotation>
      <documentation>All complexContent GML elements are directly or indirectly derived from this
        abstract supertype
        establish a hierarchy of GML types that may be distinguished from other XML types by their
        ancestry.
        in this hierarchy may have an ID and are thus referenceable.
      </documentation>
    </annotation>
    <sequence>
      <group ref="gml:StandardObjectProperties"/>
    </sequence>
    <attribute ref="gml:id" use="optional"/>
  </complexType>
  <!-- ================================================= -->
  <group name="StandardObjectProperties">
    <annotation>
      <documentation>This content model group makes it easier to construct types that
        derive from AbstractGMLType and its descendents "by restriction".
        A reference to the group saves having to enumerate the standard object properties.
      </documentation>
    </annotation>
    <sequence>
      <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
      <element ref="gml:description" minOccurs="0"/>
      <element ref="gml:name" minOccurs="0" maxOccurs="unbounded">
        <annotation>
          <documentation>Multiple names may be provided. These will often be distinguished by being
            assigned by different authorities, as indicated by the value of the codeSpace attribute.
            In an instance document there will usually only be one name per authority.
          </documentation>
        </annotation>
      </element>
    </sequence>
  </group>
  <!-- ================================================= -->
  <element name="metaDataProperty" type="gml:MetaDataPropertyType">
    <annotation>
      <documentation>Contains or refers to a metadata package that contains metadata properties.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="MetaDataPropertyType">
    <annotation>
      <documentation>Base type for complex metadata property types.</documentation>
    </annotation>
    <sequence minOccurs="0">
      <!-- <element ref="gml:_MetaData"/> -->
      <any processContents="lax"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
    <attribute name="about" type="anyURI" use="optional"/>
  </complexType>
  <!-- ================================================= -->
  <attributeGroup name="AssociationAttributeGroup">
    <annotation>
      <documentation>Attribute group used to enable property elements to refer to their value
        remotely. It contains the simple link components from xlinks.xsd, with all members optional,
        and the remoteSchema attribute, which is also optional. These attributes can be attached to
        any element, thus allowing it to act as a pointer. The 'remoteSchema' attribute allows an
        element that carries link attributes to indicate that the element is declared in a remote
        schema rather than by the schema that constrains the current document instance.
      </documentation>
    </annotation>
    <attributeGroup ref="xlink:simpleLink"/>
    <attribute ref="gml:remoteSchema" use="optional"/>
  </attributeGroup>
  <!-- ================================================= -->
  <attribute name="remoteSchema" type="anyURI">
    <annotation>
      <documentation>Reference to an XML Schema fragment that specifies the content model of the
        propertys value. This is in conformance with the XML Schema Section 4.14 Referencing Schemas
        from Elsewhere.
      </documentation>
    </annotation>
  </attribute>
  <!-- ================================================= -->
  <element name="description" type="gml:StringOrRefType">
    <annotation>
      <documentation>Contains a simple text description of the object, or refers to an external
        description.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="StringOrRefType">
    <annotation>
      <documentation>type is available wherever there is a need for a "text" type property. It is of
        string type, so the text can be included inline, but the value can also be referenced
        remotely via xlinks from the AssociationAttributeGroup. If the remote reference is present,
        then the value obtained by traversing the link should be used, and the string content of the
        element can be used for an annotation.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="string">
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <!-- ================================================= -->
  <element name="name" type="gml:CodeType">
    <annotation>
      <documentation>Label for the object, normally a descriptive name. An object may have several
        names, typically assigned by different authorities. The authority for a name is indicated by
        the value of its (optional) codeSpace attribute. The name may or may not be unique, as
        determined by the rules of the organization responsible for the codeSpace.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="CodeType">
    <annotation>
      <documentation>Name or code with an (optional) authority. Text token.
        If the codeSpace attribute is present, then its value should identify a dictionary,
        thesaurus
        or authority for the term, such as the organisation who assigned the value,
        or the dictionary from which it is taken.
        A text string with an optional codeSpace attribute.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="string">
        <attribute name="codeSpace" type="anyURI" use="optional"/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <attribute name="id" type="ID">
    <annotation>
      <documentation>Database handle for the object. It is of XML type ID, so is constrained to be
        unique in the XML document within which it occurs. An external identifier for the object in
        the form of a URI may be constructed using standard XML and XPointer methods. This is done
        by concatenating the URI for the document, a fragment separator, and the value of the id
        attribute.
      </documentation>
    </annotation>
  </attribute>
  <!-- ================================================= -->
  <element name="boundedBy" type="gml:BoundingShapeType"/>
  <!-- ================================================= -->
  <complexType name="BoundingShapeType">
    <annotation>
      <documentation>Bounding shape.</documentation>
    </annotation>
    <sequence>
      <choice>
        <element ref="gml:Envelope"/>
        <element ref="gml:Null"/>
      </choice>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <element name="Envelope" type="gml:EnvelopeType"/>
  <!-- ================================================= -->
  <complexType name="EnvelopeType">
    <annotation>
      <documentation>Envelope defines an extent using a pair of positions defining opposite corners
        in arbitrary dimensions. The first direct
        is the "lower corner" (a coordinate position consisting of all the minimal ordinates for
        each dimension for all points within the envelope),
        second one the "upper corner" (a coordinate position consisting of all the maximal ordinates
        for each dimension for all points within the
        ).
      </documentation>
    </annotation>
    <choice>
      <sequence>
        <element name="lowerCorner" type="gml:DirectPositionType"/>
        <element name="upperCorner" type="gml:DirectPositionType"/>
      </sequence>
      <element ref="gml:coord" minOccurs="2" maxOccurs="2">
        <annotation>
          <appinfo>deprecated</appinfo>
          <documentation>deprecated with GML version 3.0</documentation>
        </annotation>
      </element>
      <element ref="gml:pos" minOccurs="2" maxOccurs="2">
        <annotation>
          <appinfo>deprecated</appinfo>
          <documentation>Deprecated with GML version 3.1. Use the explicit properties "lowerCorner"
            and "upperCorner" instead.
          </documentation>
        </annotation>
      </element>
      <element ref="gml:coordinates">
        <annotation>
          <documentation>Deprecated with GML version 3.1.0. Use the explicit properties
            "lowerCorner" and "upperCorner" instead.
          </documentation>
        </annotation>
      </element>
    </choice>
    <attributeGroup ref="gml:SRSReferenceGroup"/>
  </complexType>
  <!-- ================================================= -->
  <complexType name="DirectPositionType">
    <annotation>
      <documentation>DirectPosition instances hold the coordinates for a position within some
        coordinate reference system (CRS). Since
        , as data types, will often be included in larger objects (such as geometry elements) that
        have references to CRS, the
        "srsName" attribute will in general be missing, if this particular DirectPosition is
        included in a larger element with such a reference to a
        . In this case, the CRS is implicitly assumed to take on the value of the containing
        object's CRS.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="gml:doubleList">
        <attributeGroup ref="gml:SRSReferenceGroup"/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <simpleType name="doubleList">
    <annotation>
      <documentation>XML List based on XML Schema double type. An element of this type contains a
        space-separated list of double values
      </documentation>
    </annotation>
    <list itemType="double"/>
  </simpleType>
  <!-- ================================================= -->
  <!-- ================================================= -->
  <attributeGroup name="SRSReferenceGroup">
    <annotation>
      <documentation>Optional reference to the CRS used by this geometry, with optional additional
        information to simplify use when
        more complete definition of the CRS is not needed.
      </documentation>
    </annotation>
    <attribute name="srsName" type="anyURI" use="optional">
      <annotation>
        <documentation>In general this reference points to a CRS instance of
          gml:CoordinateReferenceSystemType
          (see coordinateReferenceSystems.xsd). For well known references it is not required that
          the CRS description exists at the
          the URI points to. If no srsName attribute is given, the CRS shall be specified as part of
          the larger context this
          element is part of, e.g. a geometric element like point, curve, etc. It is expected that
          this attribute will be specified
          the direct position level only in rare cases.
        </documentation>
      </annotation>
    </attribute>
    <attribute name="srsDimension" type="positiveInteger" use="optional">
      <annotation>
        <documentation>The "srsDimension" is the length of coordinate sequence (the number of
          entries in the list). This dimension is
          by the coordinate reference system. When the srsName attribute is omitted, this attribute
          shall be omitted.
        </documentation>
      </annotation>
    </attribute>
    <attributeGroup ref="gml:SRSInformationGroup"/>
  </attributeGroup>
  <!-- ================================================= -->
  <attributeGroup name="SRSInformationGroup">
    <annotation>
      <documentation>Optional additional and redundant information for a CRS to simplify use when a
        more complete definition of the
        is not needed. This information shall be the same as included in the more complete
        definition of the CRS, referenced by the
        attribute. When the srsName attribute is included, either both or neither of the axisLabels
        and uomLabels attributes
        be included. When the srsName attribute is omitted, both of these attributes shall be
        omitted.
      </documentation>
    </annotation>
    <attribute name="axisLabels" type="gml:NCNameList" use="optional">
      <annotation>
        <documentation>Ordered list of labels for all the axes of this CRS. The gml:axisAbbrev value
          should be used for these axis
          , after spaces and forbiddden characters are removed. When the srsName attribute is
          included, this attribute is optional.
          the srsName attribute is omitted, this attribute shall also be omitted.
        </documentation>
      </annotation>
    </attribute>
    <attribute name="uomLabels" type="gml:NCNameList" use="optional">
      <annotation>
        <documentation>Ordered list of unit of measure (uom) labels for all the axes of this CRS.
          The value of the string in the
          :catalogSymbol should be used for this uom labels, after spaces and forbiddden characters
          are removed. When the
          attribute is included, this attribute shall also be included. When the axisLabels
          attribute is omitted, this attribute
          also be omitted.
        </documentation>
      </annotation>
    </attribute>
  </attributeGroup>
  <!-- ================================================= -->
  <simpleType name="NCNameList">
    <annotation>
      <documentation>A set of values, representing a list of token with the lexical value space of
        NCName. The tokens are seperated by whitespace.
      </documentation>
    </annotation>
    <list itemType="NCName"/>
  </simpleType>
  <!-- ================================================= -->
  <!-- ================================================= -->
  <element name="coord" type="gml:CoordType">
    <annotation>
      <documentation>Deprecated with GML 3.0 and included for backwards compatibility with GML 2.
        Use the "pos" element instead.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="CoordType">
    <annotation>
      <documentation>Represents a coordinate tuple in one, two, or three dimensions. Deprecated with
        GML 3.0 and replaced by
        .
      </documentation>
    </annotation>
    <sequence>
      <element name="X" type="decimal"/>
      <element name="Y" type="decimal" minOccurs="0"/>
      <element name="Z" type="decimal" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <element name="pos" type="gml:DirectPositionType">
    <annotation>
      <appinfo>
        <sch:pattern>
          <sch:rule context="gml:pos">
            <sch:extends rule="CRSLabels"/>
          </sch:rule>
        </sch:pattern>
      </appinfo>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="coordinates" type="gml:CoordinatesType">
    <annotation>
      <documentation>Deprecated with GML version 3.1.0.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="CoordinatesType">
    <annotation>
      <documentation>Tables or arrays of tuples.
        May be used for text-encoding of values from a table.
        Actually just a string, but allows the user to indicate which characters are used as
        separators.
        The value of the 'cs' attribute is the separator for coordinate values,
        and the value of the 'ts' attribute gives the tuple separator (a single space by default);
        the default values may be changed to reflect local usage.
        Defaults to CSV within a tuple, space between tuples.
        However, any string content will be schema-valid.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="string">
        <attribute name="decimal" type="string" default="."/>
        <attribute name="cs" type="string" default=","/>
        <attribute name="ts" type="string" default=" "/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <element name="Null" type="gml:NullType"/>
  <!-- ================================================= -->
  <simpleType name="NullType">
    <annotation>
      <documentation>Utility type for null elements. The value may be selected from one of the
        enumerated tokens, or may be a URI in which case this should identify a resource which
        describes the reason for the null.
      </documentation>
    </annotation>
    <union memberTypes="gml:NullEnumeration anyURI"/>
  </simpleType>
  <!-- ================================================= -->
  <simpleType name="NullEnumeration">
    <annotation>
      <documentation>Some common reasons for a null value:

        innapplicable - the object does not have a value
        missing - The correct value is not readily available to the sender of this data.
        Furthermore, a correct value may not exist.
        template - the value will be available later
        unknown - The correct value is not known to, and not computable by, the sender of this data.
        However, a correct value probably exists.
        withheld - the value is not divulged

        other:reason - as indicated by "reason" string

        Specific communities may agree to assign more strict semantics when these terms are used in
        a particular context.
      </documentation>
    </annotation>
    <union>
      <simpleType>
        <restriction base="string">
          <enumeration value="inapplicable"/>
          <enumeration value="missing"/>
          <enumeration value="template"/>
          <enumeration value="unknown"/>
          <enumeration value="withheld"/>
        </restriction>
      </simpleType>
      <simpleType>
        <restriction base="string">
          <pattern value="other:\w{2,}"/>
        </restriction>
      </simpleType>
    </union>
  </simpleType>
  <!-- ================================================= -->
  <!-- ================================================= -->
  <element name="location" type="gml:LocationPropertyType">
    <annotation>
      <documentation>Deprecated in GML 3.1.0</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="LocationPropertyType">
    <annotation>
      <documentation>Convenience property for generalised location.
        A representative location for plotting or analysis.
        Often augmented by one or more additional geometry properties with more specific semantics.
      </documentation>
      <documentation>Deprecated in GML 3.1.0</documentation>
    </annotation>
    <sequence minOccurs="0">
      <choice>
        <element ref="gml:_Geometry"/>
        <element ref="gml:LocationKeyWord"/>
        <element ref="gml:LocationString"/>
        <element ref="gml:Null"/>
      </choice>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="_Geometry" type="gml:AbstractGeometryType" abstract="true"
           substitutionGroup="gml:_GML">
    <annotation>
      <documentation>The "_Geometry" element is the abstract head of the substituition group for all
        geometry elements of GML 3. This
        pre-defined and user-defined geometry elements. Any geometry element shall be a direct or
        indirect extension/restriction
        AbstractGeometryType and shall be directly or indirectly in the substitution group of
        "_Geometry".
      </documentation>
      <appinfo>
        <sch:pattern>
          <sch:rule context="gml:_Geometry">
            <sch:extends rule="CRSLabels"/>
          </sch:rule>
        </sch:pattern>
      </appinfo>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="AbstractGeometryType" abstract="true">
    <annotation>
      <documentation>All geometry elements are derived directly or indirectly from this abstract
        supertype. A geometry element may
        an identifying attribute ("gml:id"), a name (attribute "name") and a description (attribute
        "description"). It may be associated
        a spatial reference system (attribute "srsName"). The following rules shall be adhered: -
        Every geometry type shall derive
        this abstract type. - Every geometry element (i.e. an element of a geometry type) shall be
        directly or indirectly in the
        group of _Geometry.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <attribute name="gid" type="string" use="optional">
          <annotation>
            <documentation>This attribute is included for backward compatibility with GML 2 and is
              deprecated with GML 3.
              identifer is superceded by "gml:id" inherited from AbstractGMLType. The attribute
              "gid" should not be used
              and may be deleted in future versions of GML without further notice.
            </documentation>
          </annotation>
        </attribute>
        <attributeGroup ref="gml:SRSReferenceGroup"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="_GML" type="gml:AbstractGMLType" abstract="true" substitutionGroup="gml:_Object">
    <annotation>
      <documentation>Global element which acts as the head of a substitution group that may include
        any element which is a GML feature, object, geometry or complex value
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="_Object" abstract="true">
    <annotation>
      <documentation>This abstract element is the head of a substitutionGroup hierararchy which may
        contain either simpleContent or complexContent elements. It is used to assert the model
        position of "class" elements declared in other GML schemas.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="LocationKeyWord" type="gml:CodeType"/>
  <!-- ================================================= -->
  <element name="LocationString" type="gml:StringOrRefType"/>
  <!-- ================================================= -->
  <element name="_FeatureCollection" type="gml:AbstractFeatureCollectionType" abstract="true"
           substitutionGroup="gml:_Feature"/>
  <!-- ================================================= -->
  <complexType name="AbstractFeatureCollectionType" abstract="true">
    <annotation>
      <documentation>A feature collection contains zero or more features.</documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractFeatureType">
        <sequence>
          <element ref="gml:featureMember" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:featureMembers" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="featureMember" type="gml:FeaturePropertyType"/>
  <!-- ================================================= -->
  <complexType name="FeaturePropertyType">
    <annotation>
      <documentation>Container for a feature - follow gml:AssociationType pattern.</documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:_Feature"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="featureMembers" type="gml:FeatureArrayPropertyType"/>
  <!-- ================================================= -->
  <complexType name="FeatureArrayPropertyType">
    <annotation>
      <documentation>Container for features - follow gml:ArrayAssociationType pattern.
      </documentation>
    </annotation>
    <sequence>
      <element ref="gml:_Feature" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <element name="FeatureCollection" type="gml:FeatureCollectionType"
           substitutionGroup="gml:_Feature"/>
  <!-- ================================================= -->
  <complexType name="FeatureCollectionType">
    <annotation>
      <documentation>Concrete generic feature collection.</documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractFeatureCollectionType"/>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="_Coverage" type="gml:AbstractCoverageType" abstract="true"
           substitutionGroup="gml:_Feature"/>
  <!-- ================================================= -->
  <complexType name="AbstractCoverageType" abstract="true">
    <annotation>
      <documentation>Abstract element which acts as the head of a substitution group for coverages.
        Note that a coverage is a GML feature.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractFeatureType">
        <sequence>
          <element ref="gml:domainSet"/>
          <element ref="gml:rangeSet"/>
        </sequence>
        <attribute name="dimension" type="positiveInteger" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="domainSet" type="gml:DomainSetType"/>
  <!-- ================================================= -->
  <complexType name="DomainSetType">
    <annotation>
      <documentation>The spatiotemporal domain of a coverage.
        Typically
        * a geometry collection,
        * an implicit geometry (e.g. a grid),
        * an explicit or implicit collection of time instances or periods, or
        .B. Temporal geometric complexes and temporal grids are not yet implemented in GML.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <choice>
        <element ref="gml:_Geometry"/>
        <element ref="gml:_TimeObject"/>
      </choice>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="_TimeObject" type="gml:AbstractTimeObjectType" abstract="true"
           substitutionGroup="gml:_GML">
    <annotation>
      <documentation xml:lang="en">
        This abstract element acts as the head of the substitution group for temporal primitives and
        complexes.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="AbstractTimeObjectType" abstract="true">
    <annotation>
      <documentation xml:lang="en">
        The abstract supertype for temporal objects.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGMLType"/>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="rangeSet" type="gml:RangeSetType"/>
  <!-- ================================================= -->
  <complexType name="RangeSetType">
    <choice>
      <element ref="gml:ValueArray" maxOccurs="unbounded">
        <annotation>
          <documentation>each member _Value holds a tuple or "row" from the equivalent table
          </documentation>
        </annotation>
      </element>
      <group ref="gml:ScalarValueList" maxOccurs="unbounded">
        <annotation>
          <documentation>each list holds the complete set of one scalar component from the values -
            i.e. a "column" from the equivalent table
          </documentation>
        </annotation>
      </group>
      <element ref="gml:DataBlock">
        <annotation>
          <documentation>Its tuple list holds the values as space-separated tuples each of which
            contains comma-separated components, and the tuple structure is specified using the
            rangeParameters property.
          </documentation>
        </annotation>
      </element>
      <element ref="gml:File">
        <annotation>
          <documentation>a reference to an external source for the data, together with a description
            of how that external source is structured
          </documentation>
        </annotation>
      </element>
    </choice>
  </complexType>
  <!-- ================================================= -->
  <element name="ValueArray" type="gml:ValueArrayType" substitutionGroup="gml:CompositeValue">
    <annotation>
      <appinfo>
        <sch:pattern name="Check either codeSpace or uom not both">
          <sch:rule context="gml:ValueArray">
            <sch:report test="@codeSpace and @uom">ValueArray may not carry both a reference to a
              codeSpace and a uom
            </sch:report>
          </sch:rule>
        </sch:pattern>
        <sch:pattern name="Check components are homogeneous">
          <sch:rule context="gml:ValueArray">
            <sch:assert
              test="count(gml:valueComponent/*) = count(gml:valueComponent/*[name() = name(../../gml:valueComponent[1]/*[1])])">
              All components of
              <sch:name/>
              shall be of the same type
            </sch:assert>
            <sch:assert
              test="count(gml:valueComponents/*) = count(gml:valueComponents/*[name() = name(../*[1])])">
              All components of
              <sch:name/>
              shall be of the same type
            </sch:assert>
          </sch:rule>
        </sch:pattern>
      </appinfo>
      <documentation>A Value Array is used for homogeneous arrays of primitive and aggregate values.
        _ScalarValueList is preferred for arrays of Scalar Values since this is more efficient.
        Since "choice" is not available for attribute groups, an external constraint (e.g.
        Schematron) would be required to enforce the selection of only one of these through schema
        validation
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="ValueArrayType">
    <annotation>
      <documentation>A Value Array is used for homogeneous arrays of primitive and aggregate values.
        The member values may be scalars, composites, arrays or lists. ValueArray has the same
        content model as CompositeValue, but the member values shall be homogeneous. The element
        declaration contains a Schematron constraint which expresses this restriction precisely.
        Since the members are homogeneous, the referenceSystem (uom, codeSpace) may be specified on
        the ValueArray itself and implicitly inherited by all the members if desired. Note that
        a_ScalarValueList is preferred for arrays of Scalar Values since this is a more efficient
        encoding.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:CompositeValueType">
        <attributeGroup ref="gml:referenceSystem"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="CompositeValueType">
    <annotation>
      <documentation>Aggregate value built from other Values using the Composite pattern. It
        contains zero or an arbitrary number of valueComponent elements, and zero or one
        valueComponents elements. It may be used for strongly coupled aggregates (vectors, tensors)
        or for arbitrary collections of values.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <element ref="gml:valueComponent" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:valueComponents" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="valueComponent" type="gml:ValuePropertyType">
    <annotation>
      <documentation>Element which refers to, or contains, a Value. This version is used in
        CompositeValues.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="ValuePropertyType">
    <annotation>
      <documentation>GML property which refers to, or contains, a Value</documentation>
    </annotation>
    <sequence minOccurs="0">
      <group ref="gml:Value"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <group name="Value">
    <annotation>
      <documentation>Utility choice group which unifies generic Values defined in this schema
        document with
        and Temporal objects and the Measures described above,
        that any of these may be used within aggregate Values.
      </documentation>
    </annotation>
    <choice>
      <!-- <element ref="gml:_Value"/> -->
      <group ref="gml:ValueObject"/>
      <element ref="gml:_Object"/>
      <!--			<element ref="gml:_Geometry"/>
			<element ref="gml:_TimeObject"/> -->
      <element ref="gml:Null"/>
    </choice>
  </group>
  <!-- ================================================= -->
  <group name="ValueObject">
    <choice>
      <group ref="gml:ScalarValue"/>
      <group ref="gml:ScalarValueList"/>
      <group ref="gml:ValueExtent"/>
      <element ref="gml:CompositeValue"/>
    </choice>
  </group>
  <!-- ================================================= -->
  <group name="ScalarValue">
    <choice>
      <element ref="gml:Boolean"/>
      <element ref="gml:Category"/>
      <element ref="gml:Quantity"/>
      <element ref="gml:Count"/>
    </choice>
  </group>
  <!-- ================================================= -->
  <element name="Boolean" type="boolean">
    <annotation>
      <documentation>A value from two-valued logic, using the XML Schema boolean type. An instance
        may take the values {true, false, 1, 0}.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="Category" type="gml:CodeType">
    <annotation>
      <documentation>A term representing a classification. It has an optional XML attribute
        codeSpace, whose value is a URI which identifies a dictionary, codelist or authority for the
        term.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="Quantity" type="gml:MeasureType">
    <annotation>
      <documentation>A numeric value with a scale. The content of the element is an amount using the
        XML Schema type double which permits decimal or scientific notation. An XML attribute uom
        (unit of measure) is required, whose value is a URI which identifies the definition of the
        scale or units by which the numeric value shall be multiplied.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="MeasureType">
    <annotation>
      <documentation>Number with a scale.
        The value of uom (Units Of Measure) attribute is a reference to a Reference System for the
        amount, either a ratio or position scale.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="double">
        <attribute name="uom" type="anyURI" use="required"/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <element name="Count" type="integer">
    <annotation>
      <documentation>An integer representing a frequency of occurrence.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <group name="ScalarValueList">
    <choice>
      <element ref="gml:BooleanList"/>
      <element ref="gml:CategoryList"/>
      <element ref="gml:QuantityList"/>
      <element ref="gml:CountList"/>
    </choice>
  </group>
  <!-- ================================================= -->
  <element name="BooleanList" type="gml:booleanOrNullList">
    <annotation>
      <documentation>XML List based on XML Schema boolean type. An element of this type contains a
        space-separated list of boolean values {0,1,true,false}
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <simpleType name="booleanOrNullList">
    <annotation>
      <documentation>XML List based on the union type defined above. An element declared with this
        type contains a space-separated list of boolean values {0,1,true,false} with null values
        interspersed as needed
      </documentation>
    </annotation>
    <list itemType="gml:booleanOrNull"/>
  </simpleType>
  <!-- ================================================= -->
  <simpleType name="booleanOrNull">
    <annotation>
      <documentation>Union of the XML Schema boolean type and the GML Nulltype. An element which
        uses this type may have content which is either a boolean {0,1,true,false} or a value from
        Nulltype
      </documentation>
    </annotation>
    <union memberTypes="gml:NullEnumeration boolean anyURI"/>
  </simpleType>
  <!-- ================================================= -->
  <!-- ================================================= -->
  <element name="CategoryList" type="gml:CodeOrNullListType">
    <annotation>
      <documentation>A space-separated list of terms or nulls. A single XML attribute codeSpace may
        be provided, which authorises all the terms in the list.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="CodeOrNullListType">
    <annotation>
      <documentation>List of values on a uniform nominal scale. List of text tokens.
        In a list context a token should not include any spaces, so xsd:Name is used instead of
        xsd:string.
        A member of the list may be a typed null.
        If a codeSpace attribute is present, then its value is a reference to
        a Reference System for the value, a dictionary or code list.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="gml:NameOrNullList">
        <attribute name="codeSpace" type="anyURI" use="optional"/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <simpleType name="NameOrNullList">
    <annotation>
      <documentation>XML List based on the union type defined above. An element declared with this
        type contains a space-separated list of Name values with null values interspersed as needed
      </documentation>
    </annotation>
    <list itemType="gml:NameOrNull"/>
  </simpleType>
  <!-- ================================================= -->
  <simpleType name="NameOrNull">
    <annotation>
      <documentation>Union of the XML Schema Name type and the GML Nulltype. An element which uses
        this type may have content which is either a Name or a value from Nulltype. Note that a
        "Name" may not contain whitespace.
      </documentation>
    </annotation>
    <union memberTypes="gml:NullEnumeration Name anyURI"/>
  </simpleType>
  <!-- ================================================= -->
  <element name="QuantityList" type="gml:MeasureOrNullListType">
    <annotation>
      <documentation>A space separated list of amounts or nulls. The amounts use the XML Schema type
        double. A single XML attribute uom (unit of measure) is required, whose value is a URI which
        identifies the definition of the scale or units by which all the amounts in the list shall
        be multiplied.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="MeasureOrNullListType">
    <annotation>
      <documentation>List of numbers with a uniform scale.
        A member of the list may be a typed null.
        The value of uom (Units Of Measure) attribute is a reference to
        a Reference System for the amount, either a ratio or position scale.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="gml:doubleOrNullList">
        <attribute name="uom" type="anyURI" use="required"/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <simpleType name="doubleOrNullList">
    <annotation>
      <documentation>XML List based on the union type defined above. An element declared with this
        type contains a space-separated list of double values with null values interspersed as
        needed
      </documentation>
    </annotation>
    <list itemType="gml:doubleOrNull"/>
  </simpleType>
  <!-- ================================================= -->
  <simpleType name="doubleOrNull">
    <annotation>
      <documentation>Union of the XML Schema double type and the GML Nulltype. An element which uses
        this type may have content which is either a double or a value from Nulltype
      </documentation>
    </annotation>
    <union memberTypes="gml:NullEnumeration double anyURI"/>
  </simpleType>
  <!-- ================================================= -->
  <element name="CountList" type="gml:integerOrNullList">
    <annotation>
      <documentation>A space-separated list of integers or nulls.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <simpleType name="integerOrNullList">
    <annotation>
      <documentation>XML List based on the union type defined above. An element declared with this
        type contains a space-separated list of integer values with null values interspersed as
        needed
      </documentation>
    </annotation>
    <list itemType="gml:integerOrNull"/>
  </simpleType>
  <!-- ================================================= -->
  <simpleType name="integerOrNull">
    <annotation>
      <documentation>Union of the XML Schema integer type and the GML Nulltype. An element which
        uses this type may have content which is either an integer or a value from Nulltype
      </documentation>
    </annotation>
    <union memberTypes="gml:NullEnumeration integer anyURI"/>
  </simpleType>
  <!-- ================================================= -->
  <!-- ================================================= -->
  <group name="ValueExtent">
    <choice>
      <element ref="gml:CategoryExtent"/>
      <element ref="gml:QuantityExtent"/>
      <element ref="gml:CountExtent"/>
    </choice>
  </group>
  <!-- ================================================= -->
  <element name="CategoryExtent" type="gml:CategoryExtentType">
    <annotation>
      <documentation>Utility element to store a 2-point range of ordinal values. If one member is a
        null, then this is a single ended interval.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="CategoryExtentType">
    <annotation>
      <documentation>Restriction of list type to store a 2-point range of ordinal values. If one
        member is a null, then this is a single ended interval.
      </documentation>
    </annotation>
    <simpleContent>
      <restriction base="gml:CodeOrNullListType">
        <length value="2"/>
      </restriction>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <element name="QuantityExtent" type="gml:QuantityExtentType">
    <annotation>
      <documentation>Utility element to store a 2-point range of numeric values. If one member is a
        null, then this is a single ended interval.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="QuantityExtentType">
    <annotation>
      <documentation>Restriction of list type to store a 2-point range of numeric values. If one
        member is a null, then this is a single ended interval.
      </documentation>
    </annotation>
    <simpleContent>
      <restriction base="gml:MeasureOrNullListType">
        <length value="2"/>
      </restriction>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <element name="CountExtent" type="gml:CountExtentType">
    <annotation>
      <documentation>Utility element to store a 2-point range of frequency values. If one member is
        a null, then this is a single ended interval.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <simpleType name="CountExtentType">
    <annotation>
      <documentation>Restriction of list type to store a 2-point range of frequency values. If one
        member is a null, then this is a single ended interval.
      </documentation>
    </annotation>
    <restriction base="gml:integerOrNullList">
      <length value="2"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <element name="CompositeValue" type="gml:CompositeValueType">
    <annotation>
      <documentation>Aggregate value built using the Composite pattern.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="valueComponents" type="gml:ValueArrayPropertyType">
    <annotation>
      <documentation>Element which refers to, or contains, a set of homogeneously typed Values.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="ValueArrayPropertyType">
    <annotation>
      <documentation>GML property which refers to, or contains, a set of homogeneously typed
        Values.
      </documentation>
    </annotation>
    <sequence>
      <group ref="gml:Value" maxOccurs="unbounded"/>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <attributeGroup name="referenceSystem">
    <attribute name="codeSpace" type="anyURI" use="optional"/>
    <attribute name="uom" type="anyURI" use="optional"/>
  </attributeGroup>
  <!-- ================================================= -->
  <element name="DataBlock" type="gml:DataBlockType"/>
  <!-- ================================================= -->
  <complexType name="DataBlockType">
    <sequence>
      <element ref="gml:rangeParameters"/>
      <choice>
        <element ref="gml:tupleList"/>
        <element ref="gml:doubleOrNullTupleList"/>
      </choice>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <element name="rangeParameters" type="gml:RangeParametersType"/>
  <!-- ================================================= -->
  <complexType name="RangeParametersType">
    <annotation>
      <documentation>Metadata about the rangeSet. Definition of record structure.
        This is required if the rangeSet is encoded in a DataBlock.
        We use a gml:_Value with empty values as a map of the composite value structure.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <group ref="gml:ValueObject"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="tupleList" type="gml:CoordinatesType"/>
  <!-- ================================================= -->
  <element name="doubleOrNullTupleList" type="gml:doubleOrNullList"/>
  <!-- ================================================= -->
  <element name="File" type="gml:FileType"/>
  <!-- ================================================= -->
  <complexType name="FileType">
    <sequence>
      <element ref="gml:rangeParameters"/>
      <element name="fileName" type="anyURI"/>
      <element name="fileStructure" type="gml:FileValueModelType"/>
      <element name="mimeType" type="anyURI" minOccurs="0"/>
      <element name="compression" type="anyURI" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <simpleType name="FileValueModelType">
    <annotation>
      <documentation>List of codes that identifies the file structure model for records stored in
        files.
      </documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="Record Interleaved"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <element name="RectifiedGridCoverage" type="gml:RectifiedGridCoverageType"
           substitutionGroup="gml:_DiscreteCoverage"/>
  <!-- ================================================= -->
  <complexType name="RectifiedGridCoverageType">
    <complexContent>
      <restriction base="gml:AbstractDiscreteCoverageType">
        <sequence>
          <group ref="gml:StandardObjectProperties"/>
          <element ref="gml:boundedBy" minOccurs="0"/>
          <element ref="gml:rectifiedGridDomain"/>
          <element ref="gml:rangeSet"/>
          <element ref="gml:coverageFunction" minOccurs="0"/>
        </sequence>
      </restriction>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractDiscreteCoverageType" abstract="true">
    <annotation>
      <documentation>A discrete coverage consists of a domain set, range set and optionally a
        coverage function. The domain set consists of either geometry or temporal objects, finite in
        number. The range set is comprised of a finite number of attribute values each of which is
        associated to every direct position within any single spatiotemporal object in the domain.
        In other words, the range values are constant on each spatiotemporal object in the domain.
        This coverage function maps each element from the coverage domain to an element in its
        range. This definition conforms to ISO 19123.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractCoverageType">
        <sequence>
          <element ref="gml:coverageFunction" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="coverageFunction" type="gml:CoverageFunctionType"/>
  <!-- ================================================= -->
  <complexType name="CoverageFunctionType">
    <annotation>
      <documentation>The function or rule which defines the map from members of the domainSet to the
        range.
        More functions will be added to this list
      </documentation>
    </annotation>
    <choice>
      <element ref="gml:MappingRule"/>
      <element ref="gml:GridFunction"/>
    </choice>
  </complexType>
  <!-- ================================================= -->
  <element name="MappingRule" type="gml:StringOrRefType">
    <annotation>
      <documentation>Description of a rule for associating members from the domainSet with members
        of the rangeSet.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="GridFunction" type="gml:GridFunctionType"/>
  <!-- ================================================= -->
  <complexType name="GridFunctionType">
    <annotation>
      <documentation>Defines how values in the domain are mapped to the range set. The start point
        and the sequencing rule are specified here.
      </documentation>
    </annotation>
    <sequence>
      <element name="sequenceRule" type="gml:SequenceRuleType" minOccurs="0">
        <annotation>
          <documentation>If absent, the implied value is "Linear".</documentation>
        </annotation>
      </element>
      <element name="startPoint" type="gml:integerList" minOccurs="0">
        <annotation>
          <documentation>Index position of the first grid post, which shall lie somwhere in the
            GridEnvelope. If absent, the startPoint is equal to the value of gridEnvelope::low from
            the grid definition.
          </documentation>
        </annotation>
      </element>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <complexType name="SequenceRuleType">
    <simpleContent>
      <extension base="gml:SequenceRuleNames">
        <attribute name="order" type="gml:IncrementOrder" use="optional"/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <simpleType name="SequenceRuleNames">
    <annotation>
      <documentation>List of codes (adopted from ISO 19123 Annex C) that identifies the rule for
        traversing a grid to correspond with the sequence of members of the rangeSet.
      </documentation>
    </annotation>
    <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="IncrementOrder">
    <annotation>
      <documentation>The enumeration value here indicates the incrementation order to be used on the
        first 2 axes, i.e. "+x-y" means that the points on the first axis are to be traversed from
        lowest to highest and the points on the second axis are to be traversed from highest to
        lowest. The points on all other axes (if any) beyond the first 2 are assumed to increment
        from lowest to highest.
      </documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="+x+y"/>
      <enumeration value="+y+x"/>
      <enumeration value="+x-y"/>
      <enumeration value="-x-y"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <simpleType name="integerList">
    <annotation>
      <documentation>XML List based on XML Schema integer type. An element of this type contains a
        space-separated list of integer values
      </documentation>
    </annotation>
    <list itemType="integer"/>
  </simpleType>
  <!-- ================================================= -->
  <element name="rectifiedGridDomain" type="gml:RectifiedGridDomainType"
           substitutionGroup="gml:domainSet"/>
  <!-- ================================================= -->
  <complexType name="RectifiedGridDomainType">
    <complexContent>
      <restriction base="gml:DomainSetType">
        <sequence minOccurs="0">
          <element ref="gml:RectifiedGrid"/>
        </sequence>
        <attributeGroup ref="gml:AssociationAttributeGroup"/>
      </restriction>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="RectifiedGrid" type="gml:RectifiedGridType"
           substitutionGroup="gml:_ImplicitGeometry">
    <annotation>
      <documentation>Should be substitutionGroup="gml:Grid" but changed in order to accomplish
        Xerces-J schema validation
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="RectifiedGridType" final="#all">
    <annotation>
      <documentation>A rectified grid has an origin and vectors that define its post locations.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:GridType">
        <sequence>
          <element name="origin" type="gml:PointPropertyType"/>
          <element name="offsetVector" type="gml:VectorType" maxOccurs="unbounded"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="GridType">
    <annotation>
      <documentation>An unrectified grid, which is a network composed of two or more sets of equally
        spaced parallel lines in which the members of each set intersect the members of the other
        sets at right angles.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGeometryType">
        <sequence>
          <element name="limits" type="gml:GridLimitsType"/>
          <element name="axisName" type="string" maxOccurs="unbounded"/>
        </sequence>
        <attribute name="dimension" type="positiveInteger" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="GridLimitsType">
    <sequence>
      <element name="GridEnvelope" type="gml:GridEnvelopeType"/>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <complexType name="GridEnvelopeType">
    <annotation>
      <documentation>Provides grid coordinate values for the diametrically opposed corners of an
        envelope that bounds a section of grid. The value of a single coordinate is the number of
        offsets from the origin of the grid in the direction of a specific axis.
      </documentation>
    </annotation>
    <sequence>
      <element name="low" type="gml:integerList"/>
      <element name="high" type="gml:integerList"/>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <complexType name="PointPropertyType">
    <annotation>
      <documentation>A property that has a point as its value domain can either be an appropriate
        geometry element encapsulated in an
        of this type or an XLink reference to a remote geometry element (where remote includes
        geometry elements located
        in the same document). Either the reference or the contained element shall be given, but
        neither both nor none.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:Point"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup">
      <annotation>
        <documentation>This attribute group includes the XLink attributes (see xlinks.xsd). XLink is
          used in GML to reference remote
          (including those elsewhere in the same document). A simple link element can be constructed
          by including a specific
          of XLink attributes. The XML Linking Language (XLink) is currently a Proposed
          Recommendation of the World Wide Web Consortium.
          allows elements to be inserted into XML documents so as to create sophisticated links
          between resources; such links can be
          to reference remote properties. A simple link element can be used to implement pointer
          functionality, and this functionality has
          built into various GML 3 elements by including the gml:AssociationAttributeGroup.
        </documentation>
      </annotation>
    </attributeGroup>
  </complexType>
  <!-- ================================================= -->
  <element name="Point" type="gml:PointType" substitutionGroup="gml:_GeometricPrimitive"/>
  <!-- ================================================= -->
  <complexType name="PointType">
    <annotation>
      <documentation>A Point is defined by a single coordinate tuple.</documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGeometricPrimitiveType">
        <sequence>
          <choice>
            <annotation>
              <documentation>GML supports two different ways to specify the direct poisiton of a
                point. 1. The "pos" element is of type
                .
              </documentation>
            </annotation>
            <element ref="gml:pos"/>
            <element ref="gml:coordinates">
              <annotation>
                <documentation>Deprecated with GML version 3.1.0 for coordinates with ordinate
                  values that are numbers. Use "pos"
                  . The "coordinates" element shall only be used for coordinates with ordinates that
                  require a string
                  , e.g. DMS representations.
                </documentation>
              </annotation>
            </element>
            <element ref="gml:coord">
              <annotation>
                <documentation>Deprecated with GML version 3.0. Use "pos" instead. The "coord"
                  element is included for
                  compatibility with GML 2.
                </documentation>
              </annotation>
            </element>
          </choice>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractGeometricPrimitiveType" abstract="true">
    <annotation>
      <documentation>This is the abstract root type of the geometric primitives. A geometric
        primitive is a geometric object that is not
        further into other primitives in the system. All primitives are oriented in the direction
        implied by the sequence of their
        tuples.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGeometryType"/>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="_GeometricPrimitive" type="gml:AbstractGeometricPrimitiveType" abstract="true"
           substitutionGroup="gml:_Geometry">
    <annotation>
      <documentation>The "_GeometricPrimitive" element is the abstract head of the substituition
        group for all (pre- and user-defined)
        primitives.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="VectorType">
    <simpleContent>
      <restriction base="gml:DirectPositionType"/>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <element name="_ImplicitGeometry" type="gml:AbstractGeometryType" abstract="true"
           substitutionGroup="gml:_Geometry"/>
  <!-- ================================================= -->
  <element name="_DiscreteCoverage" type="gml:AbstractDiscreteCoverageType" abstract="true"
           substitutionGroup="gml:_Coverage"/>
  <!-- ================================================= -->
  <element name="LineString" type="gml:LineStringType" substitutionGroup="gml:_Curve"/>
  <!-- ================================================= -->
  <complexType name="LineStringType">
    <annotation>
      <documentation>A LineString is a special curve that consists of a single segment with linear
        interpolation. It is defined by two or more coordinate
        , with linear interpolation between them. It is backwards compatible with the LineString of
        GML 2, GM_LineString of ISO 19107 is
        by LineStringSegment.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractCurveType">
        <sequence>
          <choice>
            <annotation>
              <documentation>GML supports two different ways to specify the control points of a line
                string. 1. A sequence of "pos"
                (DirectPositionType) or "pointProperty" (PointPropertyType) elements. "pos" elements
                are control points that are only part
                this curve, "pointProperty" elements contain a point that may be referenced from
                other geometry elements or reference
                point defined outside of this curve (reuse of existing points). 2. The "posList"
                element allows for a compact way to
                the coordinates of the control points, if all control points are in the same
                coordinate reference systems and belong
                this curve only. The number of direct positions in the list shall be at least two.
              </documentation>
            </annotation>
            <choice minOccurs="2" maxOccurs="unbounded">
              <element ref="gml:pos"/>
              <element ref="gml:pointProperty"/>
              <element ref="gml:pointRep">
                <annotation>
                  <documentation>Deprecated with GML version 3.1.0. Use "pointProperty" instead.
                    Included for backwards compatibility
                    GML 3.0.0.
                  </documentation>
                </annotation>
              </element>
              <element ref="gml:coord">
                <annotation>
                  <documentation>Deprecated with GML version 3.0. Use "pos" instead. The "coord"
                    element is included for backwards
                    with GML 2.
                  </documentation>
                </annotation>
              </element>
            </choice>
            <element ref="gml:posList"/>
            <element ref="gml:coordinates">
              <annotation>
                <documentation>Deprecated with GML version 3.1.0. Use "posList" instead.
                </documentation>
              </annotation>
            </element>
          </choice>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractCurveType" abstract="true">
    <annotation>
      <documentation>An abstraction of a curve to support the different levels of complexity. The
        curve can always be viewed as a geometric
        , i.e. is continuous.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGeometricPrimitiveType"/>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="pointProperty" type="gml:PointPropertyType">
    <annotation>
      <appinfo>
        <sch:pattern>
          <sch:rule context="gml:pointProperty">
            <sch:extends rule="hrefOrContent"/>
          </sch:rule>
        </sch:pattern>
      </appinfo>
      <documentation>This property element either references a point via the XLink-attributes or
        contains the point element. pointProperty
        the predefined property which can be used by GML Application Schemas whenever a GML Feature
        has a property with a value that
        substitutable for Point.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="pointRep" type="gml:PointPropertyType">
    <annotation>
      <documentation>Deprecated with GML version 3.1.0. Use "pointProperty" instead. Included for
        backwards compatibility with GML 3.0.0.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="posList" type="gml:DirectPositionListType">
    <annotation>
      <appinfo>
        <sch:pattern>
          <sch:rule context="gml:posList">
            <sch:extends rule="CRSLabels"/>
          </sch:rule>
        </sch:pattern>
      </appinfo>
      <appinfo>
        <sch:pattern>
          <sch:rule context="gml:posList">
            <sch:extends rule="Count"/>
          </sch:rule>
        </sch:pattern>
      </appinfo>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="DirectPositionListType">
    <annotation>
      <documentation>DirectPositionList instances hold the coordinates for a sequence of direct
        positions within the same coordinate
        system (CRS).
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="gml:doubleList">
        <attributeGroup ref="gml:SRSReferenceGroup"/>
        <attribute name="count" type="positiveInteger" use="optional">
          <annotation>
            <documentation>"count" allows to specify the number of direct positions in the list. If
              the attribute count is present then
              attribute srsDimension shall be present, too.
            </documentation>
          </annotation>
        </attribute>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <element name="_Curve" type="gml:AbstractCurveType" abstract="true"
           substitutionGroup="gml:_GeometricPrimitive">
    <annotation>
      <documentation>The "_Curve" element is the abstract head of the substituition group for all
        (continuous) curve elements.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="Polygon" type="gml:PolygonType" substitutionGroup="gml:_Surface"/>
  <!-- ================================================= -->
  <complexType name="PolygonType">
    <annotation>
      <documentation>A Polygon is a special surface that is defined by a single surface patch. The
        boundary of this patch is coplanar and the polygon uses planar interpolation in its
        interior. It is backwards compatible with the Polygon of GML 2, GM_Polygon of ISO 19107 is
        implemented by PolygonPatch.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractSurfaceType">
        <sequence>
          <element ref="gml:exterior" minOccurs="0"/>
          <element ref="gml:interior" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractSurfaceType">
    <annotation>
      <documentation>
        abstraction of a surface to support the different levels of complexity. A surface is always
        a continuous region of a plane.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGeometricPrimitiveType"/>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="exterior" type="gml:AbstractRingPropertyType">
    <annotation>
      <documentation>A boundary of a surface consists of a number of rings. In the normal 2D case,
        one of these rings is distinguished as being the exterior boundary. In a general manifold
        this is not always possible, in which case all boundaries shall be listed as interior
        boundaries, and the exterior will be empty.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="AbstractRingPropertyType">
    <annotation>
      <documentation>
        Encapsulates a ring to represent the surface boundary property of a surface.
      </documentation>
    </annotation>
    <sequence>
      <element ref="gml:_Ring"/>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <element name="_Ring" type="gml:AbstractRingType" abstract="true"
           substitutionGroup="gml:_Geometry">
    <annotation>
      <documentation>The "_Ring" element is the abstract head of the substituition group for all
        closed boundaries of a surface patch.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="AbstractRingType" abstract="true">
    <annotation>
      <documentation>
        abstraction of a ring to support surface boundaries of different complexity.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGeometryType"/>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="interior" type="gml:AbstractRingPropertyType">
    <annotation>
      <documentation>A boundary of a surface consists of a number of rings. The "interior" rings
        seperate the surface / surface patch from the area enclosed by the rings.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="_Surface" type="gml:AbstractSurfaceType" abstract="true"
           substitutionGroup="gml:_GeometricPrimitive">
    <annotation>
      <documentation>The "_Surface" element is the abstract head of the substituition group for all
        (continuous) surface elements.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="LinearRing" type="gml:LinearRingType" substitutionGroup="gml:_Ring"/>
  <!-- ================================================= -->
  <complexType name="LinearRingType">
    <annotation>
      <documentation>A LinearRing is defined by four or more coordinate tuples, with linear
        interpolation between them; the first and last coordinates shall be coincident.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractRingType">
        <sequence>
          <choice>
            <annotation>
              <documentation>GML supports two different ways to specify the control points of a
                linear ring.
                . A sequence of "pos" (DirectPositionType) or "pointProperty" (PointPropertyType)
                elements. "pos" elements are control points that are only part of this ring,
                "pointProperty" elements contain a point that may be referenced from other geometry
                elements or reference another point defined outside of this ring (reuse of existing
                points).
                . The "posList" element allows for a compact way to specifiy the coordinates of the
                control points, if all control points are in the same coordinate reference systems
                and belong to this ring only. The number of direct positions in the list shall be at
                least four.
              </documentation>
            </annotation>
            <choice minOccurs="4" maxOccurs="unbounded">
              <element ref="gml:pos"/>
              <element ref="gml:pointProperty"/>
              <element ref="gml:pointRep">
                <annotation>
                  <documentation>Deprecated with GML version 3.1.0. Use "pointProperty" instead.
                    Included for backwards compatibility with GML 3.0.0.
                  </documentation>
                </annotation>
              </element>
            </choice>
            <element ref="gml:posList"/>
            <element ref="gml:coordinates">
              <annotation>
                <documentation>Deprecated with GML version 3.1.0. Use "posList" instead.
                </documentation>
              </annotation>
            </element>
            <element ref="gml:coord" minOccurs="4" maxOccurs="unbounded">
              <annotation>
                <documentation>Deprecated with GML version 3.0 and included for backwards
                  compatibility with GML 2. Use "pos" elements instead.
                </documentation>
              </annotation>
            </element>
          </choice>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="Dictionary" type="gml:DictionaryType" substitutionGroup="gml:Definition"/>
  <!-- ================================================= -->
  <complexType name="DictionaryType">
    <annotation>
      <documentation>A non-abstract bag that is specialized for use as a dictionary which contains a
        set of definitions. These definitions are referenced from other places, in the same and
        different XML documents. In this restricted type, the inherited optional "description"
        element can be used for a description of this dictionary. The inherited optional "name"
        element can be used for the name(s) of this dictionary. The inherited "metaDataProperty"
        elements can be used to reference or contain more information about this dictionary. The
        inherited required gml:id attribute allows the dictionary to be referenced using this
        handle.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:DefinitionType">
        <sequence minOccurs="0" maxOccurs="unbounded">
          <choice>
            <element ref="gml:dictionaryEntry">
              <annotation>
                <documentation>An entry in this dictionary. The content of an entry can itself be a
                  lower level dictionary or definition collection. This element follows the standard
                  GML property model, so the value may be provided directly or by reference. Note
                  that if the value is provided by reference, this definition does not carry a
                  handle (gml:id) in this context, so does not allow external references to this
                  specific entry in this context. When used in this way the referenced definition
                  will usually be in a dictionary in the same XML document.
                </documentation>
              </annotation>
            </element>
            <element ref="gml:indirectEntry">
              <annotation>
                <documentation>An identified reference to a remote entry in this dictionary, to be
                  used when this entry should be identified to allow external references to this
                  specific entry.
                </documentation>
              </annotation>
            </element>
          </choice>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="DefinitionType">
    <annotation>
      <documentation>A definition, which can be included in or referenced by a dictionary. In this
        extended type, the inherited "description" optional element can hold the definition whenever
        only text is needed. The inherited "name" elements can provide one or more brief terms for
        which this is the definition. The inherited "metaDataProperty" elements can be used to
        reference or include more information about this definition. gml:id attribute is required -
        it shall be possible to reference this definition using this handle.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="gml:AbstractGMLType">
        <sequence>
          <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:description" minOccurs="0"/>
          <element ref="gml:name" maxOccurs="unbounded"/>
        </sequence>
        <attribute ref="gml:id" use="required"/>
      </restriction>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="dictionaryEntry" type="gml:DictionaryEntryType"/>
  <!-- ================================================= -->
  <complexType name="DictionaryEntryType">
    <annotation>
      <documentation>An entry in a dictionary of definitions. An instance of this type contains or
        refers to a definition object.
        number of definitions contained in this dictionaryEntry is restricted to one, but a
        DefinitionCollection or Dictionary that contains multiple definitions can be substituted if
        needed. Specialized descendents of this dictionaryEntry might be restricted in an
        application schema to allow only including specified types of definitions as valid entries
        in a dictionary.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:Definition">
        <annotation>
          <documentation>This element in a dictionary entry contains the actual definition.
          </documentation>
        </annotation>
      </element>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup">
      <annotation>
        <documentation>A non-identified reference to a remote entry in this dictionary, to be used
          when this entry need not be identified to allow external references to this specific
          entry. The remote entry referenced will usually be in a dictionary in the same XML
          document. This element will usually be used in dictionaries that are inside of another
          dictionary.
        </documentation>
      </annotation>
    </attributeGroup>
  </complexType>
  <!-- ================================================= -->
  <element name="Definition" type="gml:DefinitionType" substitutionGroup="gml:_GML"/>
  <!-- ================================================= -->
  <element name="indirectEntry" type="gml:IndirectEntryType"/>
  <!-- ================================================= -->
  <complexType name="IndirectEntryType">
    <annotation>
      <documentation>An entry in a dictionary of definitions that contains a GML object which
        references a remote definition object. This entry is expected to be convenient in allowing
        multiple elements in one XML document to contain short (abbreviated XPointer) references,
        which are resolved to an external definition provided in a Dictionary element in the same
        XML document. Specialized descendents of this dictionaryEntry might be restricted in an
        application schema to allow only including specified types of definitions as valid entries
        in a dictionary.
      </documentation>
    </annotation>
    <sequence>
      <element ref="gml:DefinitionProxy"/>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <element name="DefinitionProxy" type="gml:DefinitionProxyType"
           substitutionGroup="gml:Definition"/>
  <!-- ================================================= -->
  <complexType name="DefinitionProxyType">
    <annotation>
      <documentation>A proxy entry in a dictionary of definitions. An element of this type contains
        a reference to a remote definition object. This entry is expected to be convenient in
        allowing multiple elements in one XML document to contain short (abbreviated XPointer)
        references, which are resolved to an external definition provided in a Dictionary element in
        the same XML document.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:DefinitionType">
        <sequence>
          <element ref="gml:definitionRef">
            <annotation>
              <documentation>A reference to a remote entry in this dictionary, used when this
                dictionary entry is identified to allow external references to this specific entry.
                The remote entry referenced can be in a dictionary in the same or different XML
                document.
              </documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="definitionRef" type="gml:ReferenceType"/>
  <!-- ================================================= -->
  <complexType name="ReferenceType">
    <annotation>
      <documentation>A pattern or base for derived types used to specify complex types corresponding
        to a UML aggregation association. An instance of this type serves as a pointer to a remote
        Object.
      </documentation>
    </annotation>
    <sequence/>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <!-- ================================================= -->
  <element name="BaseUnit" type="gml:BaseUnitType" substitutionGroup="gml:UnitDefinition"/>
  <!-- ================================================= -->
  <complexType name="BaseUnitType">
    <annotation>
      <documentation>Definition of a unit of measure which is a base unit from the system of units.
        A base unit cannot be derived by combination of other base units within this system.
        Sometimes known as "fundamental unit".
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:UnitDefinitionType">
        <sequence>
          <element name="unitsSystem" type="gml:ReferenceType"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="UnitDefinitionType">
    <annotation>
      <documentation>Definition of a unit of measure (or uom). The definition includes a
        quantityType property, which indicates the phenomenon to which the units apply, and a
        catalogSymbol, which gives the short symbol used for this unit. This element is used when
        the relationship of this unit to other units or units systems is unknown.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:DefinitionType">
        <sequence>
          <element ref="gml:quantityType"/>
          <element ref="gml:catalogSymbol" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="quantityType" type="gml:StringOrRefType">
    <annotation>
      <documentation>Informal description of the phenomenon or type of quantity that is measured or
        observed. For example, "length", "angle", "time", "pressure", or "temperature". When the
        quantity is the result of an observation or measurement, this term is known as Observable
        Type or Measurand.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="catalogSymbol" type="gml:CodeType">
    <annotation>
      <documentation>For global understanding of a unit of measure, it is often possible to
        reference an item in a catalog of units, using a symbol in that catalog. The "codeSpace"
        attribute in "CodeType" identifies a namespace for the catalog symbol value, and might
        reference the catalog. The "string" value in "CodeType" contains the value of a symbol that
        is unique within this catalog namespace. This symbol often appears explicitly in the
        catalog, but it could be a combination of symbols using a specified algebra of units. For
        example, the symbol "cm" might indicate that it is the "m" symbol combined with the "c"
        prefix.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="UnitDefinition" type="gml:UnitDefinitionType" substitutionGroup="gml:Definition"/>
  <!-- ================================================= -->
  <element name="ConventionalUnit" type="gml:ConventionalUnitType"
           substitutionGroup="gml:UnitDefinition"/>
  <!-- ================================================= -->
  <complexType name="ConventionalUnitType">
    <annotation>
      <documentation>Definition of a unit of measure which is related to a preferred unit for this
        quantity type through a conversion formula. A method for deriving this unit by algebraic
        combination of more primitive units, may also be provided.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:UnitDefinitionType">
        <sequence>
          <choice>
            <element ref="gml:conversionToPreferredUnit"/>
            <element ref="gml:roughConversionToPreferredUnit"/>
          </choice>
          <element ref="gml:derivationUnitTerm" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="conversionToPreferredUnit" type="gml:ConversionToPreferredUnitType">
    <annotation>
      <documentation>This element is included when this unit has an accurate conversion to the
        preferred unit for this quantity type.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="ConversionToPreferredUnitType">
    <annotation>
      <documentation>Relation of a unit to the preferred unit for this quantity type, specified by
        an arithmetic conversion (scaling and/or offset). A preferred unit is either a base unit or
        a derived unit selected for all units of one quantity type. The mandatory attribute "uom"
        shall reference the preferred unit that this conversion applies to. The conversion is
        specified by one of two alternative elements: "factor" or "formula".
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:UnitOfMeasureType">
        <choice>
          <element name="factor" type="double">
            <annotation>
              <documentation>Specification of the scale factor by which a value using this unit of
                measure can be multiplied to obtain the corresponding value using the preferred unit
                of measure.
              </documentation>
            </annotation>
          </element>
          <element name="formula" type="gml:FormulaType">
            <annotation>
              <documentation>Specification of the formula by which a value using this unit of
                measure can be converted to obtain the corresponding value using the preferred unit
                of measure.
              </documentation>
            </annotation>
          </element>
        </choice>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="UnitOfMeasureType">
    <annotation>
      <documentation>Reference to a unit of measure definition that applies to all the numerical
        values described by the element containing this element. Notice that a complexType which
        needs to include the uom attribute can do so by extending this complexType. Alternately,
        this complexType can be used as a pattern for a new complexType.
      </documentation>
    </annotation>
    <sequence/>
    <attribute name="uom" type="anyURI" use="required">
      <annotation>
        <documentation>Reference to a unit of measure definition, usually within the same XML
          document but possibly outside the XML document which contains this reference. For a
          reference within the same XML document, the "#" symbol should be used, followed by a text
          abbreviation of the unit name. However, the "#" symbol may be optional, and still may be
          interpreted as a reference.
        </documentation>
      </annotation>
    </attribute>
  </complexType>
  <!-- ================================================= -->
  <complexType name="FormulaType">
    <annotation>
      <documentation>Paremeters of a simple formula by which a value using this unit of measure can
        be converted to the corresponding value using the preferred unit of measure. The formula
        element contains elements a, b, c and d, whose values use the XML Schema type "double".
        These values are used in the formula y = (a + bx) / (c + dx), where x is a value using this
        unit, and y is the corresponding value using the preferred unit. The elements a and d are
        optional, and if values are not provided, those parameters are considered to be zero. If
        values are not provided for both a and d, the formula is equivalent to a fraction with
        numerator and denominator parameters.
      </documentation>
    </annotation>
    <sequence>
      <element name="a" type="double" minOccurs="0"/>
      <element name="b" type="double"/>
      <element name="c" type="double"/>
      <element name="d" type="double" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <element name="roughConversionToPreferredUnit" type="gml:ConversionToPreferredUnitType">
    <annotation>
      <documentation>This element is included when the correct definition of this unit is unknown,
        but this unit has a rough or inaccurate conversion to the preferred unit for this quantity
        type.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="derivationUnitTerm" type="gml:DerivationUnitTermType"/>
  <!-- ================================================= -->
  <complexType name="DerivationUnitTermType">
    <annotation>
      <documentation>Definition of one unit term for a derived unit of measure. This unit term
        references another unit of measure (uom) and provides an integer exponent applied to that
        unit in defining the compound unit. The exponent can be positive or negative, but not zero.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:UnitOfMeasureType">
        <attribute name="exponent" type="integer"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="DerivedUnit" type="gml:DerivedUnitType" substitutionGroup="gml:UnitDefinition"/>
  <!-- ================================================= -->
  <complexType name="DerivedUnitType">
    <annotation>
      <documentation>Definition of a unit of measure which is defined through algebraic combination
        of more primitive units, which are usually base units from a particular system of units.
        Derived units based directly on base units are usually preferred for quantities other than
        the base units or fundamental quantities within a system. If a derived unit is not the
        preferred unit, the ConventionalUnit element should be used instead.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:UnitDefinitionType">
        <sequence>
          <element ref="gml:derivationUnitTerm" maxOccurs="unbounded"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="ProjectedCRS" type="gml:ProjectedCRSType"
           substitutionGroup="gml:_GeneralDerivedCRS"/>
  <!-- ================================================= -->
  <complexType name="ProjectedCRSType">
    <annotation>
      <documentation>A 2D coordinate reference system used to approximate the shape of the earth on
        a planar surface, but in such a way that the distortion that is inherent to the
        approximation is carefully controlled and known. Distortion correction is commonly applied
        to calculated bearings and distances to produce values that are a close match to actual
        field values.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGeneralDerivedCRSType">
        <sequence>
          <element ref="gml:usesCartesianCS"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractGeneralDerivedCRSType" abstract="true">
    <annotation>
      <documentation>A coordinate reference system that is defined by its coordinate conversion from
        another coordinate reference system (not by a datum). 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:AbstractReferenceSystemType">
        <sequence>
          <element ref="gml:baseCRS"/>
          <element ref="gml:definedByConversion"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractReferenceSystemType" abstract="true">
    <annotation>
      <documentation>Description of a spatial and/or temporal reference system used by a dataset.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractReferenceSystemBaseType">
        <sequence>
          <element ref="gml:srsID" minOccurs="0" maxOccurs="unbounded">
            <annotation>
              <documentation>Set of alterative identifications of this reference system. The first
                srsID, 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 reference system, including
                source information.
              </documentation>
            </annotation>
          </element>
          <element ref="gml:validArea" minOccurs="0"/>
          <element ref="gml:scope" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractReferenceSystemBaseType" abstract="true">
    <annotation>
      <documentation>Basic encoding for reference system objects, simplifying and restricting the
        DefinitionType as needed.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="gml:DefinitionType">
        <sequence>
          <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:srsName"/>
        </sequence>
        <attribute ref="gml:id" use="required"/>
      </restriction>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="srsName" type="gml:CodeType" substitutionGroup="gml:name">
    <annotation>
      <documentation>The name by which this reference system is identified.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="srsID" type="gml:IdentifierType">
    <annotation>
      <documentation>An identification of a reference system.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="IdentifierType">
    <annotation>
      <documentation>An identification of a CRS object. The first use of the IdentifierType for an
        object, if any, is normally the primary identification code, and any others are aliases.
      </documentation>
    </annotation>
    <sequence>
      <element ref="gml:name">
        <annotation>
          <documentation>The code or name for this Identifier, often from a controlled list or
            pattern defined by a code space. The optional codeSpace attribute is normally included
            to identify or reference a code space within which one or more codes are defined. This
            code space is often defined by some authority organization, where one organization may
            define multiple code spaces. The range and format of each Code Space identifier is
            defined by that code space authority. Information about that code space authority can be
            included as metaDataProperty elements which are optionally allowed in all CRS objects.
          </documentation>
        </annotation>
      </element>
      <element ref="gml:version" minOccurs="0"/>
      <element ref="gml:remarks" minOccurs="0">
        <annotation>
          <documentation>Remarks about this code or alias.</documentation>
        </annotation>
      </element>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <element name="version" type="string">
    <annotation>
      <documentation>Identifier of the version of the associated codeSpace or code, as specified by
        the codeSpace or code authority. This version is included only when the "code" or
        "codeSpace" uses versions. When appropriate, the version is identified by the effective
        date, coded using ISO 8601 date format.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="remarks" type="gml:StringOrRefType">
    <annotation>
      <documentation>Information about this object or code. Contains text or refers to external
        text.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="validArea" type="gml:ExtentType">
    <annotation>
      <documentation>Area or region in which this CRS object is valid.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="ExtentType">
    <annotation>
      <documentation>Information about the spatial, vertical, and/or temporal extent of a reference
        system object. Constraints: At least one of the elements "description", "boundingBox",
        "boundingPolygon", "verticalExtent", and temporalExtent" shall be included, but more that
        one can be included when appropriate. Furthermore, more than one "boundingBox",
        "boundingPolygon", "verticalExtent", and/or temporalExtent" element can be included, with
        more than one meaning the union of the individual domains.
      </documentation>
    </annotation>
    <sequence>
      <element ref="gml:description" minOccurs="0">
        <annotation>
          <documentation>Description of spatial and/or temporal extent of this object.
          </documentation>
        </annotation>
      </element>
      <choice>
        <annotation>
          <documentation>Geographic domain of this reference system object.</documentation>
        </annotation>
        <element ref="gml:boundingBox" minOccurs="0" maxOccurs="unbounded">
          <annotation>
            <documentation>Unordered list of bounding boxes (or envelopes) whose union describes the
              spatial domain of this object.
            </documentation>
          </annotation>
        </element>
        <element ref="gml:boundingPolygon" minOccurs="0" maxOccurs="unbounded">
          <annotation>
            <documentation>Unordered list of bounding polygons whose union describes the spatial
              domain of this object.
            </documentation>
          </annotation>
        </element>
      </choice>
      <element ref="gml:verticalExtent" minOccurs="0" maxOccurs="unbounded">
        <annotation>
          <documentation>Unordered list of vertical intervals whose union describes the spatial
            domain of this object.
          </documentation>
        </annotation>
      </element>
      <element ref="gml:temporalExtent" minOccurs="0" maxOccurs="unbounded">
        <annotation>
          <documentation>Unordered list of time periods whose union describes the spatial domain of
            this object.
          </documentation>
        </annotation>
      </element>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <element name="boundingBox" type="gml:EnvelopeType">
    <annotation>
      <documentation>A bounding box (or envelope) defining the spatial domain of this object.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="boundingPolygon" type="gml:PolygonType">
    <annotation>
      <documentation>A bounding polygon defining the horizontal spatial domain of this object.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="verticalExtent" type="gml:EnvelopeType">
    <annotation>
      <documentation>An interval defining the vertical spatial domain of this object.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="temporalExtent" type="gml:TimePeriodType">
    <annotation>
      <documentation>A time period defining the temporal domain of this object.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="TimePeriodType">
    <complexContent>
      <extension base="gml:AbstractTimeGeometricPrimitiveType">
        <sequence>
          <choice>
            <element name="beginPosition" type="gml:TimePositionType"/>
            <element name="begin" type="gml:TimeInstantPropertyType"/>
          </choice>
          <choice>
            <element name="endPosition" type="gml:TimePositionType"/>
            <element name="end" type="gml:TimeInstantPropertyType"/>
          </choice>
          <group ref="gml:timeLength" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractTimeGeometricPrimitiveType" abstract="true">
    <annotation>
      <documentation xml:lang="en">
        The abstract supertype for temporal geometric primitives.
        A temporal geometry shall be associated with a temporal reference system via URI.
        The Gregorian calendar with UTC is the default reference system, following ISO
        8601. Other reference systems in common use include the GPS calendar and the
        Julian calendar.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractTimePrimitiveType">
        <attribute name="frame" type="anyURI" use="optional" default="#ISO-8601"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractTimePrimitiveType" abstract="true">
    <annotation>
      <documentation xml:lang="en">
        The abstract supertype for temporal primitives.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractTimeObjectType">
        <sequence>
          <element name="relatedTime" type="gml:RelatedTimeType" minOccurs="0"
                   maxOccurs="unbounded"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="RelatedTimeType">
    <complexContent>
      <extension base="gml:TimePrimitivePropertyType">
        <attribute name="relativePosition">
          <simpleType>
            <restriction base="string">
              <enumeration value="Before"/>
              <enumeration value="After"/>
              <enumeration value="Begins"/>
              <enumeration value="Ends"/>
              <enumeration value="During"/>
              <enumeration value="Equals"/>
              <enumeration value="Contains"/>
              <enumeration value="Overlaps"/>
              <enumeration value="Meets"/>
              <enumeration value="OverlappedBy"/>
              <enumeration value="MetBy"/>
              <enumeration value="BegunBy"/>
              <enumeration value="EndedBy"/>
            </restriction>
          </simpleType>
        </attribute>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="TimePrimitivePropertyType">
    <sequence minOccurs="0">
      <element ref="gml:_TimePrimitive"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="_TimePrimitive" type="gml:AbstractTimePrimitiveType" abstract="true"
           substitutionGroup="gml:_TimeObject">
    <annotation>
      <documentation xml:lang="en">
        This abstract element acts as the head of the substitution group for temporal primitives.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="TimePositionType" final="#all">
    <annotation>
      <documentation xml:lang="en">Direct representation of a temporal position.
        Indeterminate time values are also allowed, as described in ISO 19108. The
        indeterminatePosition
        attribute can be used alone or it can qualify a specific value for temporal position (e.g.
        before
        2002-12, after 1019624400).
        For time values that identify position within a calendar, the calendarEraName attribute
        provides
        the name of the calendar era to which the date is referenced (e.g. the Meiji era of the
        Japanese calendar).
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="gml:TimePositionUnion">
        <attribute name="frame" type="anyURI" use="optional" default="#ISO-8601"/>
        <attribute name="calendarEraName" type="string" use="optional"/>
        <attribute name="indeterminatePosition" type="gml:TimeIndeterminateValueType"
                   use="optional"/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <simpleType name="TimePositionUnion">
    <annotation>
      <documentation xml:lang="en">
        The ISO 19108:2002 hierarchy of subtypes for temporal position are collapsed
        by defining a union of XML Schema simple types for indicating temporal position relative
        to a specific reference system.

        Dates and dateTime may be indicated with varying degrees of precision.
        dateTime by itself does not allow right-truncation, except for fractions of seconds.
        When used with non-Gregorian calendars based on years, months, days,
        the same lexical representation should still be used, with leading zeros added if the
        year value would otherwise have fewer than four digits.

        An ordinal position may be referenced via URI identifying the definition of an ordinal era.

        A time coordinate value is indicated as a decimal (e.g. UNIX time, GPS calendar).
      </documentation>
    </annotation>
    <union memberTypes="gml:CalDate time dateTime anyURI decimal"/>
  </simpleType>
  <!-- ================================================= -->
  <simpleType name="CalDate">
    <annotation>
      <documentation xml:lang="en">
        Calendar dates may be indicated with varying degrees of precision,
        using year, year-month, date.
        When used with non-Gregorian calendars based on years, months, days,
        the same lexical representation should still be used, with leading zeros added if the
        year value would otherwise have fewer than four digits.
        time is used for a position that recurs daily (see clause 5.4.4.2 of ISO 19108:2002).
      </documentation>
    </annotation>
    <union memberTypes="date gYearMonth gYear"/>
  </simpleType>
  <!-- ================================================= -->
  <!-- ================================================= -->
  <!-- ================================================= -->
  <!-- ================================================= -->
  <!-- ================================================= -->
  <!-- ================================================= -->
  <!-- ================================================= -->
  <simpleType name="TimeIndeterminateValueType">
    <annotation>
      <documentation xml:lang="en">
        This enumerated data type specifies values for indeterminate positions.
      </documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="after"/>
      <enumeration value="before"/>
      <enumeration value="now"/>
      <enumeration value="unknown"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <complexType name="TimeInstantPropertyType">
    <sequence minOccurs="0">
      <element ref="gml:TimeInstant"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="TimeInstant" type="gml:TimeInstantType"
           substitutionGroup="gml:_TimeGeometricPrimitive"/>
  <!-- ================================================= -->
  <complexType name="TimeInstantType">
    <annotation>
      <documentation>Omit back-pointers begunBy, endedBy.</documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractTimeGeometricPrimitiveType">
        <sequence>
          <element ref="gml:timePosition"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="timePosition" type="gml:TimePositionType">
    <annotation>
      <documentation>Direct representation of a temporal position</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="_TimeGeometricPrimitive" type="gml:AbstractTimeGeometricPrimitiveType"
           abstract="true" substitutionGroup="gml:_TimePrimitive">
    <annotation>
      <documentation xml:lang="en">
        This abstract element acts as the head of the substitution group for temporal geometric
        primitives.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <group name="timeLength">
    <annotation>
      <documentation>This model group is provided as an alternative to the abstract
        susbstitutionGroup head _timeLength.
        19136 comment 411
      </documentation>
    </annotation>
    <choice>
      <element ref="gml:duration"/>
      <element ref="gml:timeInterval"/>
    </choice>
  </group>
  <!-- ================================================= -->
  <element name="duration" type="duration">
    <annotation>
      <documentation xml:lang="en">
        This element is an instance of the primitive xsd:duration simple type to
        enable use of the ISO 8601 syntax for temporal length (e.g. P5DT4H30M).
        It is a valid subtype of TimeDurationType according to section 3.14.6,
        rule 2.2.4 in XML Schema, Part 1.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="timeInterval" type="gml:TimeIntervalLengthType">
    <annotation>
      <documentation>
        element is a valid subtype of TimeDurationType
        to section 3.14.6, rule 2.2.4 in XML Schema, Part 1.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="TimeIntervalLengthType" final="#all">
    <annotation>
      <documentation xml:lang="en">
        This type extends the built-in xsd:decimal simple type to allow floating-point
        values for temporal length. According to the ISO 11404 model you have to use
        positiveInteger together with appropriate values for radix and factor. The
        resolution of the time interval is to one radix ^(-factor) of the specified
        time unit (e.g. unit="second", radix="10", factor="3" specifies a resolution
        of milliseconds). It is a subtype of TimeDurationType.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="decimal">
        <attribute name="unit" type="gml:TimeUnitType" use="required"/>
        <attribute name="radix" type="positiveInteger" use="optional"/>
        <attribute name="factor" type="integer" use="optional"/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <simpleType name="TimeUnitType">
    <annotation>
      <documentation xml:lang="en">
        Standard units for measuring time intervals (see ISO 31-1).
      </documentation>
    </annotation>
    <union>
      <simpleType>
        <restriction base="string">
          <enumeration value="year"/>
          <enumeration value="day"/>
          <enumeration value="hour"/>
          <enumeration value="minute"/>
          <enumeration value="second"/>
        </restriction>
      </simpleType>
      <simpleType>
        <restriction base="string">
          <pattern value="other:\w{2,}"/>
        </restriction>
      </simpleType>
    </union>
  </simpleType>
  <!-- ================================================= -->
  <element name="scope" type="string">
    <annotation>
      <documentation>Description of domain of usage, or limitations of usage, for which this CRS
        object is valid.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="baseCRS" type="gml:CoordinateReferenceSystemRefType">
    <annotation>
      <documentation>Association to the coordinate reference system used by this derived CRS.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="CoordinateReferenceSystemRefType">
    <annotation>
      <documentation>Association to a coordinate reference system, either referencing or containing
        the definition of that reference system.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:_CoordinateReferenceSystem"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="_CoordinateReferenceSystem" type="gml:AbstractReferenceSystemType" abstract="true"
           substitutionGroup="gml:_CRS">
    <annotation>
      <documentation>A coordinate reference system consists of an ordered sequence of coordinate
        system axes that are related to the earth through a datum. A coordinate reference system is
        defined by one datum and by one coordinate system. Most coordinate reference system do not
        move relative to the earth, except for engineering coordinate reference systems defined on
        moving platforms such as cars, ships, aircraft, and spacecraft. For further information, see
        OGC Abstract Specification Topic 2.
        reference systems are commonly divided into sub-types. The common classification criterion
        for sub-typing of coordinate reference systems is the way in which they deal with earth
        curvature. This has a direct effect on the portion of the earth's surface that can be
        covered by that type of CRS with an acceptable degree of error. The exception to the rule is
        the subtype "Temporal" which has been added by analogy.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="_CRS" type="gml:AbstractReferenceSystemType" abstract="true"
           substitutionGroup="gml:_ReferenceSystem">
    <annotation>
      <documentation>Abstract coordinate reference system, usually defined by a coordinate system
        and a datum. 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>
  </element>
  <!-- ================================================= -->
  <element name="_ReferenceSystem" type="gml:AbstractReferenceSystemType" abstract="true"
           substitutionGroup="gml:Definition"/>
  <!-- ================================================= -->
  <element name="definedByConversion" type="gml:GeneralConversionRefType">
    <annotation>
      <documentation>Association to the coordinate conversion used to define this derived CRS.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="GeneralConversionRefType">
    <annotation>
      <documentation>Association to a general conversion, either referencing or containing the
        definition of that conversion.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:_GeneralConversion"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="_GeneralConversion" type="gml:AbstractGeneralConversionType" abstract="true"
           substitutionGroup="gml:_Operation"/>
  <!-- ================================================= -->
  <complexType name="AbstractGeneralConversionType" abstract="true">
    <annotation>
      <documentation>An abstract operation on coordinates that does not include any change of datum.
        The best-known example of a coordinate conversion is a map projection. The parameters
        describing coordinate conversions are defined rather than empirically derived. Note that
        some conversions have no parameters.
        abstract complexType is expected to be extended for well-known operation methods with many
        Conversion instances, in Application Schemas that define operation-method-specialized
        element names and contents. This conversion uses an operation method, usually with
        associated parameter values. However, operation methods and parameter values are directly
        associated with concrete subtypes, not with this abstract type. All concrete types derived
        from this type shall extend this type to include a "usesMethod" element that references the
        "OperationMethod" element. Similarly, all concrete types derived from this type shall extend
        this type to include zero or more elements each named "uses...Value" that each use the type
        of an element substitutable for the "_generalParameterValue" element.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="gml:AbstractCoordinateOperationType">
        <sequence>
          <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:coordinateOperationName"/>
          <element ref="gml:coordinateOperationID" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:remarks" minOccurs="0"/>
          <element ref="gml:validArea" minOccurs="0"/>
          <element ref="gml:scope" minOccurs="0"/>
          <element ref="gml:_positionalAccuracy" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
        <attribute ref="gml:id" use="required"/>
      </restriction>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractCoordinateOperationType" abstract="true">
    <annotation>
      <documentation>A mathematical operation on coordinates that transforms or converts coordinates
        to another coordinate reference system. Many but not all coordinate operations (from CRS A
        to CRS B) also uniquely define the inverse operation (from CRS B to CRS A). In some cases,
        the operation method algorithm for the inverse operation is the same as for the forward
        algorithm, but the signs of some operation parameter values shall be reversed. In other
        cases, different algorithms are required for the forward and inverse operations, but the
        same operation parameter values are used. If (some) entirely different parameter values are
        needed, a different coordinate operation shall be defined.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractCoordinateOperationBaseType">
        <sequence>
          <element ref="gml:coordinateOperationID" minOccurs="0" maxOccurs="unbounded">
            <annotation>
              <documentation>Set of alternative identifications of this coordinate operation. The
                first coordinateOperationID, 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 operation, including
                source information.
              </documentation>
            </annotation>
          </element>
          <element ref="gml:operationVersion" minOccurs="0"/>
          <element ref="gml:validArea" minOccurs="0"/>
          <element ref="gml:scope" minOccurs="0"/>
          <element ref="gml:_positionalAccuracy" minOccurs="0" maxOccurs="unbounded">
            <annotation>
              <documentation>Unordered set of estimates of the impact of this coordinate operation
                on point position accuracy. Gives position error estimates for target coordinates of
                this coordinate operation, assuming no errors in source coordinates.
              </documentation>
            </annotation>
          </element>
          <element ref="gml:sourceCRS" minOccurs="0"/>
          <element ref="gml:targetCRS" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractCoordinateOperationBaseType" abstract="true">
    <annotation>
      <documentation>Basic encoding for coordinate operation objects, simplifying and restricting
        the DefinitionType as needed.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="gml:DefinitionType">
        <sequence>
          <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:coordinateOperationName"/>
        </sequence>
        <attribute ref="gml:id" use="required"/>
      </restriction>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="coordinateOperationName" type="gml:CodeType" substitutionGroup="gml:name">
    <annotation>
      <documentation>The name by which this coordinate operation is identified.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="coordinateOperationID" type="gml:IdentifierType">
    <annotation>
      <documentation>An identification of a coordinate operation.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="operationVersion" type="string">
    <annotation>
      <documentation>Version of the coordinate transformation (i.e., instantiation due to the
        stochastic nature of the parameters). Mandatory when describing a transformation, and should
        not be supplied for a conversion.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="_positionalAccuracy" type="gml:AbstractPositionalAccuracyType" abstract="true"/>
  <!-- ================================================= -->
  <complexType name="AbstractPositionalAccuracyType" abstract="true">
    <annotation>
      <documentation>Position error estimate (or accuracy) data.</documentation>
    </annotation>
    <sequence>
      <element ref="gml:measureDescription" minOccurs="0"/>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <element name="measureDescription" type="gml:CodeType">
    <annotation>
      <documentation>A description of the position accuracy parameter(s) provided.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="sourceCRS" type="gml:CRSRefType">
    <annotation>
      <documentation>Association to the source CRS (coordinate reference system) of this coordinate
        operation.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="CRSRefType">
    <annotation>
      <documentation>Association to a CRS abstract coordinate reference system, either referencing
        or containing the definition of that CRS.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:_CRS"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="targetCRS" type="gml:CRSRefType">
    <annotation>
      <documentation>Association to the target CRS (coordinate reference system) of this coordinate
        operation. For constraints on multiplicity of "sourceCRS" and "targetCRS", see UML model of
        Coordinate Operation package in OGC Abstract Specification topic 2.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="_Operation" type="gml:AbstractCoordinateOperationType" abstract="true"
           substitutionGroup="gml:_SingleOperation">
    <annotation>
      <documentation>A parameterized mathematical operation on coordinates that transforms or
        converts coordinates to another coordinate reference system. This coordinate operation uses
        an operation method, usually with associated parameter values. However, operation methods
        and parameter values are directly associated with concrete subtypes, not with this abstract
        type.
        abstract complexType shall not be directly used, extended, or restricted in a compliant
        Application Schema.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="_SingleOperation" type="gml:AbstractCoordinateOperationType" abstract="true"
           substitutionGroup="gml:_CoordinateOperation">
    <annotation>
      <documentation>A single (not concatenated) coordinate operation.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="_CoordinateOperation" type="gml:AbstractCoordinateOperationType" abstract="true"
           substitutionGroup="gml:Definition"/>
  <!-- ================================================= -->
  <element name="usesCartesianCS" type="gml:CartesianCSRefType">
    <annotation>
      <documentation>Association to the Cartesian coordinate system used by this CRS.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <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="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="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>
  <!-- ================================================= -->
  <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:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
          <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>
  <!-- ================================================= -->
  <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="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="CoordinateSystemAxis" type="gml:CoordinateSystemAxisType"
           substitutionGroup="gml:Definition"/>
  <!-- ================================================= -->
  <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>
  <!-- ================================================= -->
  <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:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
          <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>
  <!-- ================================================= -->
  <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>
  <!-- ================================================= -->
  <element name="_CoordinateSystem" type="gml:AbstractCoordinateSystemType" abstract="true"
           substitutionGroup="gml:Definition"/>
  <!-- ================================================= -->
  <element name="_GeneralDerivedCRS" type="gml:AbstractGeneralDerivedCRSType" abstract="true"
           substitutionGroup="gml:_CoordinateReferenceSystem"/>
  <!-- ================================================= -->
  <element name="Conversion" type="gml:ConversionType" substitutionGroup="gml:_GeneralConversion"/>
  <!-- ================================================= -->
  <complexType name="ConversionType">
    <annotation>
      <documentation>A concrete operation on coordinates that does not include any change of Datum.
        The best-known example of a coordinate conversion is a map projection. The parameters
        describing coordinate conversions are defined rather than empirically derived. Note that
        some conversions have no parameters.
        concrete complexType can be used with all operation methods, without using an Application
        Schema that defines operation-method-specialized element names and contents, especially for
        methods with only one Conversion instance.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGeneralConversionType">
        <sequence>
          <element ref="gml:usesMethod"/>
          <element ref="gml:usesValue" minOccurs="0" maxOccurs="unbounded">
            <annotation>
              <documentation>Unordered list of composition associations to the set of parameter
                values used by this conversion operation.
              </documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="usesMethod" type="gml:OperationMethodRefType">
    <annotation>
      <documentation>Association to the operation method used by this coordinate operation.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="OperationMethodRefType">
    <annotation>
      <documentation>Association to a concrete general-purpose operation method, either referencing
        or containing the definition of that method.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:OperationMethod"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="OperationMethod" type="gml:OperationMethodType"
           substitutionGroup="gml:Definition"/>
  <!-- ================================================= -->
  <complexType name="OperationMethodType">
    <annotation>
      <documentation>Definition of an algorithm used to perform a coordinate operation. Most
        operation methods use a number of operation parameters, although some coordinate conversions
        use none. Each coordinate operation using the method assigns values to these parameters.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:OperationMethodBaseType">
        <sequence>
          <element ref="gml:methodID" minOccurs="0" maxOccurs="unbounded">
            <annotation>
              <documentation>Set of alternative identifications of this operation method. The first
                methodID, 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 operation method, including
                source information.
              </documentation>
            </annotation>
          </element>
          <element ref="gml:methodFormula"/>
          <element ref="gml:sourceDimensions"/>
          <element ref="gml:targetDimensions"/>
          <element ref="gml:usesParameter" minOccurs="0" maxOccurs="unbounded">
            <annotation>
              <documentation>Unordered list of associations to the set of operation parameters and
                parameter groups used by this operation method.
              </documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="OperationMethodBaseType" abstract="true">
    <annotation>
      <documentation>Basic encoding for operation method objects, simplifying and restricting the
        DefinitionType as needed.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="gml:DefinitionType">
        <sequence>
          <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:methodName"/>
        </sequence>
        <attribute ref="gml:id" use="required"/>
      </restriction>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="methodName" type="gml:CodeType" substitutionGroup="gml:name">
    <annotation>
      <documentation>The name by which this operation method is identified.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="methodID" type="gml:IdentifierType">
    <annotation>
      <documentation>An identification of an operation method.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="methodFormula" type="gml:CodeType">
    <annotation>
      <documentation>Formula(s) used by this operation method. The value may be a reference to a
        publication. Note that the operation method may not be analytic, in which case this element
        references or contains the procedure, not an analytic formula.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="sourceDimensions" type="positiveInteger">
    <annotation>
      <documentation>Number of dimensions in the source CRS of this operation method.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="targetDimensions" type="positiveInteger">
    <annotation>
      <documentation>Number of dimensions in the target CRS of this operation method.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="usesParameter" type="gml:AbstractGeneralOperationParameterRefType">
    <annotation>
      <documentation>Association to an operation parameter or parameter group used by this operation
        method.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="AbstractGeneralOperationParameterRefType">
    <annotation>
      <documentation>Association to an operation parameter or group, either referencing or
        containing the definition of that parameter or group.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:_GeneralOperationParameter"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="_GeneralOperationParameter" type="gml:AbstractGeneralOperationParameterType"
           abstract="true" substitutionGroup="gml:Definition"/>
  <!-- ================================================= -->
  <complexType name="AbstractGeneralOperationParameterType" abstract="true">
    <annotation>
      <documentation>Abstract definition of a parameter or group of parameters used by an operation
        method.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:DefinitionType">
        <sequence>
          <element ref="gml:minimumOccurs" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="minimumOccurs" type="nonNegativeInteger">
    <annotation>
      <documentation>The minimum number of times that values for this parameter group or parameter
        are required. If this attribute is omitted, the minimum number is one.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="usesValue" type="gml:ParameterValueType">
    <annotation>
      <documentation>Composition association to a parameter value used by this coordinate
        operation.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="ParameterValueType">
    <annotation>
      <documentation>A parameter value, ordered sequence of values, or reference to a file of
        parameter values. This concrete complexType can be used for operation methods without using
        an Application Schema that defines operation-method-specialized element names and contents,
        especially for methods with only one instance. This complexType can be used, extended, or
        restricted for well-known operation methods, especially for methods with many instances.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGeneralParameterValueType">
        <sequence>
          <choice>
            <element ref="gml:value"/>
            <element ref="gml:dmsAngleValue"/>
            <element ref="gml:stringValue"/>
            <element ref="gml:integerValue"/>
            <element ref="gml:booleanValue"/>
            <element ref="gml:valueList"/>
            <element ref="gml:integerValueList"/>
            <element ref="gml:valueFile"/>
          </choice>
          <element ref="gml:valueOfParameter"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractGeneralParameterValueType" abstract="true">
    <annotation>
      <documentation>Abstract parameter value or group of parameter values.
        abstract complexType is expected to be extended and restricted for well-known operation
        methods with many instances, in Application Schemas that define operation-method-specialized
        element names and contents. Specific parameter value elements are directly contained in
        concrete subtypes, not in this abstract type. All concrete types derived from this type
        shall extend this type to include one "...Value" element with an appropriate type, which
        should be one of the element types allowed in the ParameterValueType. In addition, all
        derived concrete types shall extend this type to include a "valueOfParameter" element that
        references one element substitutable for the "OperationParameter" element.
      </documentation>
    </annotation>
    <sequence/>
  </complexType>
  <!-- ================================================= -->
  <element name="value" type="gml:MeasureType">
    <annotation>
      <documentation>Numeric value of an operation parameter, with its associated unit of measure.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="dmsAngleValue" type="gml:DMSAngleType">
    <annotation>
      <documentation>Value of an angle operation parameter, in either degree-minute-second format or
        single value format.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="DMSAngleType">
    <annotation>
      <documentation>Angle value provided in degree-minute-second or degree-minute format.
      </documentation>
    </annotation>
    <sequence>
      <element ref="gml:degrees"/>
      <choice minOccurs="0">
        <element ref="gml:decimalMinutes"/>
        <sequence>
          <element ref="gml:minutes"/>
          <element ref="gml:seconds" minOccurs="0"/>
        </sequence>
      </choice>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <element name="degrees" type="gml:DegreesType"/>
  <!-- ================================================= -->
  <complexType name="DegreesType">
    <annotation>
      <documentation>Integer number of degrees, plus the angle direction. This element can be used
        for geographic Latitude and Longitude. For Latitude, the XML attribute direction can take
        the values "N" or "S", meaning North or South of the equator. For Longitude, direction can
        take the values "E" or "W", meaning East or West of the prime meridian. This element can
        also be used for other angles. In that case, the direction can take the values "+" or "-"
        (of SignType), in the specified rotational direction from a specified reference direction.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="gml:DegreeValueType">
        <attribute name="direction">
          <simpleType>
            <union>
              <simpleType>
                <restriction base="string">
                  <enumeration value="N"/>
                  <enumeration value="E"/>
                  <enumeration value="S"/>
                  <enumeration value="W"/>
                </restriction>
              </simpleType>
              <simpleType>
                <restriction base="gml:SignType"/>
              </simpleType>
            </union>
          </simpleType>
        </attribute>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <simpleType name="DegreeValueType">
    <annotation>
      <documentation>Integer number of degrees in a degree-minute-second or degree-minute angular
        value, without indication of direction.
      </documentation>
    </annotation>
    <restriction base="nonNegativeInteger">
      <maxInclusive value="359"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <simpleType name="SignType">
    <annotation>
      <documentation>Utility type used in various places
        - e.g. to indicate the direction of topological objects;
        "+" for forwards, or "-" for backwards.
      </documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="-"/>
      <enumeration value="+"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <element name="decimalMinutes" type="gml:DecimalMinutesType"/>
  <!-- ================================================= -->
  <simpleType name="DecimalMinutesType">
    <annotation>
      <documentation>Decimal number of arc-minutes in a degree-minute angular value.</documentation>
    </annotation>
    <restriction base="decimal">
      <minInclusive value="0.00"/>
      <maxExclusive value="60.00"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <element name="minutes" type="gml:ArcMinutesType"/>
  <!-- ================================================= -->
  <simpleType name="ArcMinutesType">
    <annotation>
      <documentation>Integer number of arc-minutes in a degree-minute-second angular value.
      </documentation>
    </annotation>
    <restriction base="nonNegativeInteger">
      <maxInclusive value="59"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <element name="seconds" type="gml:ArcSecondsType"/>
  <!-- ================================================= -->
  <simpleType name="ArcSecondsType">
    <annotation>
      <documentation>Number of arc-seconds in a degree-minute-second angular value.</documentation>
    </annotation>
    <restriction base="decimal">
      <minInclusive value="0.00"/>
      <maxExclusive value="60.00"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <element name="stringValue" type="string">
    <annotation>
      <documentation>String value of an operation parameter. A string value does not have an
        associated unit of measure.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="integerValue" type="positiveInteger">
    <annotation>
      <documentation>Positive integer value of an operation parameter, usually used for a count. An
        integer value does not have an associated unit of measure.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="booleanValue" type="boolean">
    <annotation>
      <documentation>Boolean value of an operation parameter. A Boolean value does not have an
        associated unit of measure.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="valueList" type="gml:MeasureListType">
    <annotation>
      <documentation>Ordered sequence of two or more numeric values of an operation parameter list,
        where each value has the same associated unit of measure. An element of this type contains a
        space-separated sequence of double values.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="MeasureListType">
    <annotation>
      <documentation>List of numbers with a uniform scale.
        The value of uom (Units Of Measure) attribute is a reference to
        a Reference System for the amount, either a ratio or position scale.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="gml:doubleList">
        <attribute name="uom" type="anyURI" use="required"/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <element name="integerValueList" type="gml:integerList">
    <annotation>
      <documentation>Ordered sequence of two or more integer values of an operation parameter list,
        usually used for counts. These integer values do not have an associated unit of measure. An
        element of this type contains a space-separated sequence of integer values.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="valueFile" type="anyURI">
    <annotation>
      <documentation>Reference to a file or a part of a file containing one or more parameter
        values, each numeric value with its associated unit of measure. When referencing a part of a
        file, that file shall contain multiple identified parts, such as an XML encoded document.
        Furthermore, the referenced file or part of a file can reference another part of the same or
        different files, as allowed in XML documents.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="valueOfParameter" type="gml:OperationParameterRefType">
    <annotation>
      <documentation>Association to the operation parameter that this is a value of.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="OperationParameterRefType">
    <annotation>
      <documentation>Association to an operation parameter, either referencing or containing the
        definition of that parameter.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:OperationParameter"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="OperationParameter" type="gml:OperationParameterType"
           substitutionGroup="gml:_GeneralOperationParameter"/>
  <!-- ================================================= -->
  <complexType name="OperationParameterType">
    <annotation>
      <documentation>The definition of a parameter used by an operation method. Most parameter
        values are numeric, but other types of parameter values are possible. This complexType is
        expected to be used or extended for all operation methods, without defining
        operation-method-specialized element names.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:OperationParameterBaseType">
        <sequence>
          <element ref="gml:parameterID" minOccurs="0" maxOccurs="unbounded">
            <annotation>
              <documentation>Set of alternative identifications of this operation parameter. The
                first parameterID, 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 operation parameter, including
                source information.
              </documentation>
            </annotation>
          </element>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="OperationParameterBaseType" abstract="true">
    <annotation>
      <documentation>Basic encoding for operation parameter objects, simplifying and restricting the
        DefinitionType as needed.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="gml:AbstractGeneralOperationParameterType">
        <sequence>
          <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:parameterName"/>
          <element ref="gml:minimumOccurs" minOccurs="0"/>
        </sequence>
        <attribute ref="gml:id" use="required"/>
      </restriction>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="parameterName" type="gml:CodeType" substitutionGroup="gml:name">
    <annotation>
      <documentation>The name by which this operation parameter is identified.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="parameterID" type="gml:IdentifierType">
    <annotation>
      <documentation>An identification of an operation parameter.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="GeographicCRS" type="gml:GeographicCRSType"
           substitutionGroup="gml:_CoordinateReferenceSystem"/>
  <!-- ================================================= -->
  <complexType name="GeographicCRSType">
    <annotation>
      <documentation>A coordinate reference system based on an ellipsoidal approximation of the
        geoid; this provides an accurate representation of the geometry of geographic features for a
        large portion of the earth's surface.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractReferenceSystemType">
        <sequence>
          <element ref="gml:usesEllipsoidalCS"/>
          <element ref="gml:usesGeodeticDatum"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="usesEllipsoidalCS" type="gml:EllipsoidalCSRefType">
    <annotation>
      <documentation>Association to the ellipsoidal coordinate system used by this CRS.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <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="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>
  <!-- ================================================= -->
  <element name="usesGeodeticDatum" type="gml:GeodeticDatumRefType">
    <annotation>
      <documentation>Association to the geodetic datum used by this CRS.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="GeodeticDatumRefType">
    <annotation>
      <documentation>Association to a geodetic datum, either referencing or containing the
        definition of that datum.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:GeodeticDatum"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="GeodeticDatum" type="gml:GeodeticDatumType" substitutionGroup="gml:_Datum"/>
  <!-- ================================================= -->
  <complexType name="GeodeticDatumType">
    <annotation>
      <documentation>A geodetic datum defines the precise location and orientation in 3-dimensional
        space of a defined ellipsoid (or sphere) that approximates the shape of the earth, or of a
        Cartesian coordinate system centered in this ellipsoid (or sphere).
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractDatumType">
        <sequence>
          <element ref="gml:usesPrimeMeridian"/>
          <element ref="gml:usesEllipsoid"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractDatumType" abstract="true">
    <annotation>
      <documentation>A datum specifies the relationship of a coordinate system to the earth, thus
        creating a coordinate reference system. A datum uses a parameter or set of parameters that
        determine the location of the origin of the coordinate reference system. Each datum subtype
        can be associated with only specific types of coordinate systems. 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:AbstractDatumBaseType">
        <sequence>
          <element ref="gml:datumID" minOccurs="0" maxOccurs="unbounded">
            <annotation>
              <documentation>Set of alternative identifications of this datum. The first datumID, 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 this reference system, including source information.
              </documentation>
            </annotation>
          </element>
          <element ref="gml:anchorPoint" minOccurs="0"/>
          <element ref="gml:realizationEpoch" minOccurs="0"/>
          <element ref="gml:validArea" minOccurs="0"/>
          <element ref="gml:scope" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractDatumBaseType" abstract="true">
    <annotation>
      <documentation>Basic encoding for datum objects, simplifying and restricting the
        DefinitionType as needed.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="gml:DefinitionType">
        <sequence>
          <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:datumName"/>
        </sequence>
        <attribute ref="gml:id" use="required"/>
      </restriction>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="datumName" type="gml:CodeType" substitutionGroup="gml:name">
    <annotation>
      <documentation>The name by which this datum is identified.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="datumID" type="gml:IdentifierType">
    <annotation>
      <documentation>An identification of a datum.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="anchorPoint" type="gml:CodeType">
    <annotation>
      <documentation>Description, possibly including coordinates, of the point or points used to
        anchor the datum to the Earth. Also known as the "origin", especially for engineering and
        image datums. The codeSpace attribute can be used to reference a source of more detailed on
        this point or surface, or on a set of such descriptions.
        For a geodetic datum, this point is also known as the fundamental point, which is
        traditionally the point where the relationship between geoid and ellipsoid is defined. In
        some cases, the "fundamental point" may consist of a number of points. In those cases, the
        parameters defining the geoid/ellipsoid relationship have been averaged for these points,
        and the averages adopted as the datum definition.
        For an engineering datum, the anchor point may be a physical point, or it may be a point
        with defined coordinates in another CRS. When appropriate, the coordinates of this anchor
        point can be referenced in another document, such as referencing a GML feature that
        references or includes a point position.
        For an image datum, the anchor point is usually either the centre of the image or the corner
        of the image.
        For a temporal datum, this attribute is not defined. Instead of the anchor point, a temporal
        datum carries a separate time origin of type DateTime.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="realizationEpoch" type="date">
    <annotation>
      <documentation>The time after which this datum definition is valid. This time may be precise
        (e.g. 1997.0 for IRTF97) or merely a year (e.g. 1983 for NAD83). In the latter case, the
        epoch usually refers to the year in which a major recalculation of the geodetic control
        network, underlying the datum, was executed or initiated. An old datum can remain valid
        after a new datum is defined. Alternatively, a datum may be superseded by a later datum, in
        which case the realization epoch for the new datum defines the upper limit for the validity
        of the superseded datum.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="usesPrimeMeridian" type="gml:PrimeMeridianRefType">
    <annotation>
      <documentation>Association to the prime meridian used by this geodetic datum.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="PrimeMeridianRefType">
    <annotation>
      <documentation>Association to a prime meridian, either referencing or containing the
        definition of that meridian.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:PrimeMeridian"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="PrimeMeridian" type="gml:PrimeMeridianType" substitutionGroup="gml:Definition"/>
  <!-- ================================================= -->
  <complexType name="PrimeMeridianType">
    <annotation>
      <documentation>A prime meridian defines the origin from which longitude values are
        determined.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:PrimeMeridianBaseType">
        <sequence>
          <element ref="gml:meridianID" minOccurs="0" maxOccurs="unbounded">
            <annotation>
              <documentation>Set of alternative identifications of this prime meridian. The first
                meridianID, 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 prime meridian, including source
                information.
              </documentation>
            </annotation>
          </element>
          <element ref="gml:greenwichLongitude"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="PrimeMeridianBaseType" abstract="true">
    <annotation>
      <documentation>Basic encoding for prime meridian objects, simplifying and restricting the
        DefinitionType as needed.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="gml:DefinitionType">
        <sequence>
          <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:meridianName"/>
        </sequence>
        <attribute ref="gml:id" use="required"/>
      </restriction>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="meridianName" type="gml:CodeType" substitutionGroup="gml:name">
    <annotation>
      <documentation>The name by which this prime meridian is identified. The meridianName most
        common value is Greenwich, and that value shall be used when the greenwichLongitude value is
        zero.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="meridianID" type="gml:IdentifierType">
    <annotation>
      <documentation>An identification of a prime meridian.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="greenwichLongitude" type="gml:AngleChoiceType">
    <annotation>
      <documentation>Longitude of the prime meridian measured from the Greenwich meridian, positive
        eastward. The greenwichLongitude most common value is zero, and that value shall be used
        when the meridianName value is Greenwich.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="AngleChoiceType">
    <annotation>
      <documentation>Value of an angle quantity provided in either degree-minute-second format or
        single value format.
      </documentation>
    </annotation>
    <choice>
      <element ref="gml:angle"/>
      <element ref="gml:dmsAngle"/>
    </choice>
  </complexType>
  <!-- ================================================= -->
  <element name="angle" type="gml:AngleType"/>
  <!-- ================================================= -->
  <complexType name="AngleType">
    <annotation>
      <documentation>Value of an angle quantity recorded as a single number, with its units. Uses
        the MeasureType with the restriction that the unit of measure referenced by uom shall be
        suitable for an angle, such as degrees or radians.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="gml:MeasureType"/>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <element name="dmsAngle" type="gml:DMSAngleType"/>
  <!-- ================================================= -->
  <element name="usesEllipsoid" type="gml:EllipsoidRefType">
    <annotation>
      <documentation>Association to the ellipsoid used by this geodetic datum.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="EllipsoidRefType">
    <annotation>
      <documentation>Association to an ellipsoid, either referencing or containing the definition of
        that ellipsoid.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:Ellipsoid"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="Ellipsoid" type="gml:EllipsoidType" substitutionGroup="gml:Definition"/>
  <!-- ================================================= -->
  <complexType name="EllipsoidType">
    <annotation>
      <documentation>An ellipsoid is a geometric figure that can be used to describe the approximate
        shape of the earth. In mathematical terms, it is a surface formed by the rotation of an
        ellipse about its minor axis.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:EllipsoidBaseType">
        <sequence>
          <element ref="gml:ellipsoidID" minOccurs="0" maxOccurs="unbounded">
            <annotation>
              <documentation>Set of alternative identifications of this ellipsoid. The first
                ellipsoidID, 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 ellipsoid, including source
                information.
              </documentation>
            </annotation>
          </element>
          <element ref="gml:semiMajorAxis"/>
          <element ref="gml:secondDefiningParameter"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="EllipsoidBaseType" abstract="true">
    <annotation>
      <documentation>Basic encoding for ellipsoid objects, simplifying and restricting the
        DefinitionType as needed.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="gml:DefinitionType">
        <sequence>
          <element ref="gml:metaDataProperty" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:ellipsoidName"/>
        </sequence>
        <attribute ref="gml:id" use="required"/>
      </restriction>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="ellipsoidName" type="gml:CodeType" substitutionGroup="gml:name">
    <annotation>
      <documentation>The name by which this ellipsoid is identified.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="ellipsoidID" type="gml:IdentifierType">
    <annotation>
      <documentation>An identification of an ellipsoid.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="semiMajorAxis" type="gml:LengthType">
    <annotation>
      <documentation>Length of the semi-major axis of the ellipsoid.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="LengthType">
    <annotation>
      <documentation>Value of a length (or distance) quantity, with its units. Uses the MeasureType
        with the restriction that the unit of measure referenced by uom shall be suitable for a
        length, such as metres or feet.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="gml:MeasureType"/>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <element name="secondDefiningParameter" type="gml:SecondDefiningParameterType"/>
  <!-- ================================================= -->
  <complexType name="SecondDefiningParameterType">
    <annotation>
      <documentation>Definition of the second parameter that defines the shape of an ellipsoid. An
        ellipsoid requires two defining parameters: semi-major axis and inverse flattening or
        semi-major axis and semi-minor axis. When the reference body is a sphere rather than an
        ellipsoid, only a single defining parameter is required, namely the radius of the sphere; in
        that case, the semi-major axis "degenerates" into the radius of the sphere.
      </documentation>
    </annotation>
    <choice>
      <element ref="gml:inverseFlattening"/>
      <element ref="gml:semiMinorAxis"/>
      <element ref="gml:isSphere"/>
    </choice>
  </complexType>
  <!-- ================================================= -->
  <element name="inverseFlattening" type="gml:ScaleType">
    <annotation>
      <documentation>Inverse flattening value of the ellipsoid.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="ScaleType">
    <annotation>
      <documentation>Value of a scale factor (or ratio) that has no physical unit. Uses the
        MeasureType with the restriction that the unit of measure referenced by uom shall be
        suitable for a scale factor, such as percent, permil, or parts-per-million.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="gml:MeasureType"/>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <element name="semiMinorAxis" type="gml:LengthType">
    <annotation>
      <documentation>Length of the semi-minor axis of the ellipsoid.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="isSphere">
    <annotation>
      <documentation>The ellipsoid is degenerate and is actually a sphere. The sphere is completely
        defined by the semi-major axis, which is the radius of the sphere.
      </documentation>
    </annotation>
    <simpleType>
      <restriction base="string">
        <enumeration value="sphere"/>
      </restriction>
    </simpleType>
  </element>
  <!-- ================================================= -->
  <element name="_Datum" type="gml:AbstractDatumType" abstract="true"
           substitutionGroup="gml:Definition"/>
  <!-- ================================================= -->
  <element name="centerLineOf" type="gml:CurvePropertyType"/>
  <!-- ================================================= -->
  <complexType name="CurvePropertyType">
    <annotation>
      <documentation>A property that has a curve as its value domain can either be an appropriate
        geometry element encapsulated in an
        of this type or an XLink reference to a remote geometry element (where remote includes
        geometry elements located elsewhere
        the same document). Either the reference or the contained element shall be given, but
        neither both nor none.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:_Curve"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup">
      <annotation>
        <documentation>This attribute group includes the XLink attributes (see xlinks.xsd). XLink is
          used in GML to reference remote
          (including those elsewhere in the same document). A simple link element can be constructed
          by including a specific
          of XLink attributes. The XML Linking Language (XLink) is currently a Proposed
          Recommendation of the World Wide Web Consortium.
          allows elements to be inserted into XML documents so as to create sophisticated links
          between resources; such links can be used
          reference remote properties. A simple link element can be used to implement pointer
          functionality, and this functionality has been built
          various GML 3 elements by including the gml:AssociationAttributeGroup.
        </documentation>
      </annotation>
    </attributeGroup>
  </complexType>
  <!-- ================================================= -->
  <element name="extentOf" type="gml:SurfacePropertyType"/>
  <!-- ================================================= -->
  <complexType name="SurfacePropertyType">
    <annotation>
      <documentation>A property that has a surface as its value domain can either be an appropriate
        geometry element encapsulated in an element of this type or an XLink reference to a remote
        geometry element (where remote includes geometry elements located elsewhere in the same
        document). Either the reference or the contained element shall be given, but neither both
        nor none.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:_Surface"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup">
      <annotation>
        <documentation>This attribute group includes the XLink attributes (see xlinks.xsd). XLink is
          used in GML to reference remote resources (including those elsewhere in the same
          document). A simple link element can be constructed by including a specific set of XLink
          attributes. The XML Linking Language (XLink) is currently a Proposed Recommendation of the
          World Wide Web Consortium. XLink allows elements to be inserted into XML documents so as
          to create sophisticated links between resources; such links can be used to reference
          remote properties.simple link element can be used to implement pointer functionality, and
          this functionality has been built into various GML 3 elements by including the
          gml:AssociationAttributeGroup.
        </documentation>
      </annotation>
    </attributeGroup>
  </complexType>
  <!-- ================================================= -->
  <complexType name="GeometryPropertyType">
    <annotation>
      <documentation>A geometric property can either be any geometry element encapsulated in an
        element of this type or an XLink reference
        a remote geometry element (where remote includes geometry elements located elsewhere in the
        same document). Note that either
        reference or the contained element shall be given, but not both or none.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:_Geometry"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup">
      <annotation>
        <documentation>This attribute group includes the XLink attributes (see xlinks.xsd). XLink is
          used in GML to reference
          resources (including those elsewhere in the same document). A simple link element can be
          constructed by
          a specific set of XLink attributes. The XML Linking Language (XLink) is currently a
          Proposed Recommendation
          the World Wide Web Consortium. XLink allows elements to be inserted into XML documents so
          as to create
          links between resources; such links can be used to reference remote properties. A simple
          link element
          be used to implement pointer functionality, and this functionality has been built into
          various GML 3 elements by
          the gml:AssociationAttributeGroup.
        </documentation>
      </annotation>
    </attributeGroup>
  </complexType>
  <!-- ================================================= -->
  <complexType name="PolygonPropertyType">
    <annotation>
      <documentation>This type is deprecated with GML 3 and shall not be used. It is included for
        backwards compatibility with GML 2. Use SurfacePropertyType instead.property that has a
        polygon as its value domain can either be an appropriate geometry element encapsulated in an
        element of this type or an XLink reference to a remote geometry element (where remote
        includes geometry elements located elsewhere in the same document). Either the reference or
        the contained element shall be given, but neither both nor none.
      </documentation>
    </annotation>
    <sequence minOccurs="0">
      <element ref="gml:Polygon"/>
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup">
      <annotation>
        <documentation>This attribute group includes the XLink attributes (see xlinks.xsd). XLink is
          used in GML to reference remote resources (including those elsewhere in the same
          document). A simple link element can be constructed by including a specific set of XLink
          attributes. The XML Linking Language (XLink) is currently a Proposed Recommendation of the
          World Wide Web Consortium. XLink allows elements to be inserted into XML documents so as
          to create sophisticated links between resources; such links can be used to reference
          remote properties.simple link element can be used to implement pointer functionality, and
          this functionality has been built into various GML 3 elements by including the
          gml:AssociationAttributeGroup.
        </documentation>
      </annotation>
    </attributeGroup>
  </complexType>
  <!-- ================================================= -->
  <element name="defaultStyle" type="gml:DefaultStylePropertyType">
    <annotation>
      <documentation>Top-level property. Used in application schemas to "attach" the styling
        information to GML data. The link between the data and the style should be established
        through this property only.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="DefaultStylePropertyType">
    <annotation>
      <documentation>[complexType of] Top-level property. Used in application schemas to "attach"
        the styling information to GML data. The link between the data and the style should be
        established through this property only.
      </documentation>
    </annotation>
    <sequence>
      <element ref="gml:_Style" minOccurs="0"/>
    </sequence>
    <attribute name="about" type="anyURI" use="optional"/>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="_Style" type="gml:AbstractStyleType" abstract="true" substitutionGroup="gml:_GML">
    <annotation>
      <documentation>The value of the top-level property. It is an abstract element. Used as the
        head element of the substitution group for extensibility purposes.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="AbstractStyleType" abstract="true">
    <annotation>
      <documentation>[complexType of] The value of the top-level property. It is an abstract
        element. Used as the head element of the substitution group for extensibility purposes.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGMLType"/>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="MultiSurface" type="gml:MultiSurfaceType"
           substitutionGroup="gml:_GeometricAggregate"/>
  <!-- ================================================= -->
  <complexType name="MultiSurfaceType">
    <annotation>
      <documentation>
        MultiSurface is defined by one or more Surfaces, referenced through surfaceMember elements.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGeometricAggregateType">
        <sequence>
          <annotation>
            <documentation>The members of the geometric aggregate can be specified either using the
              "standard" property or the array property style. It is also valid to use both the
              "standard" and the array property style in the same collection.: Array properties
              cannot reference remote geometry elements.
            </documentation>
          </annotation>
          <element ref="gml:surfaceMember" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:surfaceMembers" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="AbstractGeometricAggregateType" abstract="true">
    <annotation>
      <documentation>This is the abstract root type of the geometric aggregates.</documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGeometryType"/>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="surfaceMember" type="gml:SurfacePropertyType">
    <annotation>
      <documentation>This property element either references a surface via the XLink-attributes or
        contains the surface element. A surface element is any element which is substitutable for
        "_Surface".
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="surfaceMembers" type="gml:SurfaceArrayPropertyType">
    <annotation>
      <documentation>This property element contains a list of surfaces. The order of the elements is
        significant and shall be preserved when processing the array.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="SurfaceArrayPropertyType">
    <annotation>
      <documentation>A container for an array of surfaces. The elements are always contained in the
        array property, referencing geometry elements or arrays of geometry elements is not
        supported.
      </documentation>
    </annotation>
    <sequence>
      <element ref="gml:_Surface" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
  </complexType>
  <!-- ================================================= -->
  <element name="_GeometricAggregate" type="gml:AbstractGeometricAggregateType" abstract="true"
           substitutionGroup="gml:_Geometry">
    <annotation>
      <documentation>The "_GeometricAggregate" element is the abstract head of the substituition
        group for all geometric aggremates.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <element name="Style" type="gml:StyleType" substitutionGroup="gml:_Style">
    <annotation>
      <documentation>Predefined concrete value of the top-level property. Encapsulates all other
        styling information.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="StyleType">
    <annotation>
      <documentation>[complexType of] Predefined concrete value of the top-level property.
        Encapsulates all other styling information.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractStyleType">
        <sequence>
          <element ref="gml:featureStyle" maxOccurs="unbounded"/>
          <element ref="gml:graphStyle" minOccurs="0"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="featureStyle" type="gml:FeatureStylePropertyType">
    <annotation>
      <documentation/>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="FeatureStylePropertyType">
    <annotation>
      <documentation/>
    </annotation>
    <sequence>
      <element ref="gml:FeatureStyle" minOccurs="0"/>
    </sequence>
    <attribute name="about" type="anyURI" use="optional"/>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="FeatureStyle" type="gml:FeatureStyleType" substitutionGroup="gml:_GML">
    <annotation>
      <documentation>The style descriptor for features.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="FeatureStyleType">
    <annotation>
      <documentation>[complexType of] The style descriptor for features.</documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <element name="featureConstraint" type="string" minOccurs="0"/>
          <element ref="gml:geometryStyle" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:topologyStyle" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="gml:labelStyle" minOccurs="0"/>
        </sequence>
        <attribute name="featureType" type="string" use="optional"/>
        <attribute name="baseType" type="string" use="optional"/>
        <attribute name="queryGrammar" type="gml:QueryGrammarEnumeration"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <element name="geometryStyle" type="gml:GeometryStylePropertyType">
    <annotation>
      <documentation/>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="GeometryStylePropertyType">
    <annotation>
      <documentation/>
    </annotation>
    <sequence>
      <element ref="gml:GeometryStyle" minOccurs="0"/>
    </sequence>
    <attribute name="about" type="anyURI" use="optional"/>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="GeometryStyle" type="gml:GeometryStyleType" substitutionGroup="gml:_GML">
    <annotation>
      <documentation>The style descriptor for geometries of a feature.</documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="GeometryStyleType">
    <annotation>
      <documentation>[complexType of] The style descriptor for geometries of a feature.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:BaseStyleDescriptorType">
        <sequence>
          <choice>
            <element ref="gml:symbol"/>
            <element name="style" type="string">
              <annotation>
                <appinfo>deprecated</appinfo>
                <documentation>Deprecated in GML version 3.1.0. Use symbol with inline content
                  instead.
                </documentation>
              </annotation>
            </element>
          </choice>
          <element ref="gml:labelStyle" minOccurs="0"/>
        </sequence>
        <attribute name="geometryProperty" type="string"/>
        <attribute name="geometryType" type="string"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="BaseStyleDescriptorType">
    <annotation>
      <documentation>Base complex type for geometry, topology, label and graph styles.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <element name="spatialResolution" type="gml:ScaleType" minOccurs="0"/>
          <element name="styleVariation" type="gml:StyleVariationType" minOccurs="0"
                   maxOccurs="unbounded"/>
          <element ref="smil20:animate" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="smil20:animateMotion" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="smil20:animateColor" minOccurs="0" maxOccurs="unbounded"/>
          <element ref="smil20:set" minOccurs="0" maxOccurs="unbounded"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="StyleVariationType">
    <annotation>
      <documentation>Used to vary individual graphic parameters and attributes of the style, symbol
        or text.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="string">
        <attribute name="styleProperty" type="string" use="required"/>
        <attribute name="featurePropertyRange" type="string" use="optional"/>
      </extension>
    </simpleContent>
  </complexType>
  <!-- ================================================= -->
  <!-- ================================================= -->
  <element name="symbol" type="gml:SymbolType">
    <annotation>
      <documentation>The symbol property. Extends the gml:AssociationType to allow for remote
        referencing of symbols.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="SymbolType">
    <annotation>
      <documentation>[complexType of] The symbol property. Allows for remote referencing of
        symbols.
      </documentation>
    </annotation>
    <sequence>
      <any processContents="skip" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
    <attribute name="symbolType" type="gml:SymbolTypeEnumeration" use="required"/>
    <attribute ref="gml:transform" use="optional"/>
    <attribute name="about" type="anyURI" use="optional"/>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <simpleType name="SymbolTypeEnumeration">
    <annotation>
      <documentation>Used to specify the type of the symbol used.</documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="svg"/>
      <enumeration value="xpath"/>
      <enumeration value="other"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <attribute name="transform" type="string">
    <annotation>
      <documentation>Defines the geometric transformation of entities. There is no particular
        grammar defined for this value.
      </documentation>
    </annotation>
  </attribute>
  <!-- ================================================= -->
  <element name="labelStyle" type="gml:LabelStylePropertyType">
    <annotation>
      <documentation/>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="LabelStylePropertyType">
    <annotation>
      <documentation/>
    </annotation>
    <sequence>
      <element ref="gml:LabelStyle" minOccurs="0"/>
    </sequence>
    <attribute name="about" type="anyURI" use="optional"/>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="LabelStyle" type="gml:LabelStyleType" substitutionGroup="gml:_GML">
    <annotation>
      <documentation>The style descriptor for labels of a feature, geometry or topology.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="LabelStyleType">
    <annotation>
      <documentation>[complexType of] The style descriptor for labels of a feature, geometry or
        topology.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:BaseStyleDescriptorType">
        <sequence>
          <element name="style" type="string"/>
          <element name="label" type="gml:LabelType"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <complexType name="LabelType" mixed="true">
    <annotation>
      <documentation>Label is mixed -- composed of text and XPath expressions used to extract the
        useful information from the feature.
      </documentation>
    </annotation>
    <sequence>
      <element name="LabelExpression" type="string" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
    <attribute ref="gml:transform" use="optional"/>
  </complexType>
  <!-- ================================================= -->
  <element name="topologyStyle" type="gml:TopologyStylePropertyType">
    <annotation>
      <documentation/>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="TopologyStylePropertyType">
    <annotation>
      <documentation/>
    </annotation>
    <sequence>
      <element ref="gml:TopologyStyle" minOccurs="0"/>
    </sequence>
    <attribute name="about" type="anyURI" use="optional"/>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="TopologyStyle" type="gml:TopologyStyleType" substitutionGroup="gml:_GML">
    <annotation>
      <documentation>The style descriptor for topologies of a feature. Describes individual topology
        elements styles.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="TopologyStyleType">
    <annotation>
      <documentation>[complexType of] The style descriptor for topologies of a feature. Describes
        individual topology elements styles.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:BaseStyleDescriptorType">
        <sequence>
          <choice>
            <element ref="gml:symbol"/>
            <element name="style" type="string">
              <annotation>
                <appinfo>deprecated</appinfo>
                <documentation>Deprecated in GML version 3.1.0. Use symbol with inline content
                  instead.
                </documentation>
              </annotation>
            </element>
          </choice>
          <element ref="gml:labelStyle" minOccurs="0"/>
        </sequence>
        <attribute name="topologyProperty" type="string"/>
        <attribute name="topologyType" type="string"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <simpleType name="QueryGrammarEnumeration">
    <annotation>
      <documentation>Used to specify the grammar of the feature query mechanism.</documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="xpath"/>
      <enumeration value="xquery"/>
      <enumeration value="other"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <element name="graphStyle" type="gml:GraphStylePropertyType">
    <annotation>
      <documentation/>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="GraphStylePropertyType">
    <annotation>
      <documentation/>
    </annotation>
    <sequence>
      <element ref="gml:GraphStyle" minOccurs="0"/>
    </sequence>
    <attribute name="about" type="anyURI" use="optional"/>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <!-- ================================================= -->
  <element name="GraphStyle" type="gml:GraphStyleType" substitutionGroup="gml:_GML">
    <annotation>
      <documentation>The style descriptor for a graph consisting of a number of features. Describes
        graph-specific style attributes.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="GraphStyleType">
    <annotation>
      <documentation>[complexType of] The style descriptor for a graph consisting of a number of
        features. Describes graph-specific style attributes.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="gml:BaseStyleDescriptorType">
        <sequence>
          <element name="planar" type="boolean" minOccurs="0"/>
          <element name="directed" type="boolean" minOccurs="0"/>
          <element name="grid" type="boolean" minOccurs="0"/>
          <element name="minDistance" type="double" minOccurs="0"/>
          <element name="minAngle" type="double" minOccurs="0"/>
          <element name="graphType" type="gml:GraphTypeType" minOccurs="0"/>
          <element name="drawingType" type="gml:DrawingTypeType" minOccurs="0"/>
          <element name="lineType" type="gml:LineTypeType" minOccurs="0"/>
          <element name="aestheticCriteria" type="gml:AesheticCriteriaType" minOccurs="0"
                   maxOccurs="unbounded"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <!-- ================================================= -->
  <simpleType name="GraphTypeType">
    <annotation>
      <documentation>Graph-specific styling property.</documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="TREE"/>
      <enumeration value="BICONNECTED"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <simpleType name="DrawingTypeType">
    <annotation>
      <documentation>Graph-specific styling property.</documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="POLYLINE"/>
      <enumeration value="ORTHOGONAL"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <simpleType name="LineTypeType">
    <annotation>
      <documentation>Graph-specific styling property.</documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="STRAIGHT"/>
      <enumeration value="BENT"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <simpleType name="AesheticCriteriaType">
    <annotation>
      <documentation>Graph-specific styling property.</documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="MIN_CROSSINGS"/>
      <enumeration value="MIN_AREA"/>
      <enumeration value="MIN_BENDS"/>
      <enumeration value="MAX_BENDS"/>
      <enumeration value="UNIFORM_BENDS"/>
      <enumeration value="MIN_SLOPES"/>
      <enumeration value="MIN_EDGE_LENGTH"/>
      <enumeration value="MAX_EDGE_LENGTH"/>
      <enumeration value="UNIFORM_EDGE_LENGTH"/>
      <enumeration value="MAX_ANGULAR_RESOLUTION"/>
      <enumeration value="MIN_ASPECT_RATIO"/>
      <enumeration value="MAX_SYMMETRIES"/>
    </restriction>
  </simpleType>
  <!-- ================================================= -->
  <element name="_MetaData" type="gml:AbstractMetaDataType" abstract="true"
           substitutionGroup="gml:_Object">
    <annotation>
      <documentation>Abstract element which acts as the head of a substitution group for packages of
        MetaData properties.
      </documentation>
    </annotation>
  </element>
  <!-- ================================================= -->
  <complexType name="AbstractMetaDataType" abstract="true" mixed="true">
    <annotation>
      <documentation>An abstract base type for complex metadata types.</documentation>
    </annotation>
    <attribute ref="gml:id" use="optional"/>
  </complexType>
</schema>
