<?xml version="1.0" encoding="ISO-8859-1"?>
<schema
   targetNamespace="http://www.opengis.net/gml"
   xmlns:gml="http://www.opengis.net/gml"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns="http://www.w3.org/2001/XMLSchema"
   elementFormDefault="qualified"
   version="1.0.0.2">
  <!-- This version of gmlsfProfile/1.0.0 profile of gml/3.1.1 was previously versioned as '1.0.1' . -->
   <annotation>
      <appinfo source="urn:opengis:specification:gml:schema-xsd:gmlsf:1.0.0">gmlsf2.xsd</appinfo>
      <documentation>
         GML 3.1.1 Simplified Features profile Level 2.
         
         Copyright (c) 2006,2010 Open Geospatial Consortium.
         To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ .
      </documentation>
   </annotation>
   <!-- =========================================================== -->
   <!-- === includes and imports                                === -->
   <!-- =========================================================== -->
   <import namespace="http://www.w3.org/1999/xlink" schemaLocation="http://www.w3.org/1999/xlink.xsd"/>
   <!-- =========================================================== -->
   <!-- === Subset of geometryAggregates.xsd for this profile ===== -->
   <!-- =========================================================== -->
   <!-- aggregate geometry objects -->
   <!-- =========================================================== -->
   <element name="_GeometricAggregate"
            type="gml:AbstractGeometricAggregateType"
            substitutionGroup="gml:_Geometry"
            abstract="true">
      <annotation>
         <documentation>
            The "_GeometricAggregate" element is the abstract head of
            the substitution group for all geometric aggregates.
         </documentation>
      </annotation>
   </element>
   <!-- =========================================================== -->
   <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>
   <!-- =========================================================== -->
   <complexType name="MultiGeometryPropertyType">
      <annotation>
         <documentation>
            A property that has a geometric aggregate 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 must be given, but neither both nor none.
         </documentation>
      </annotation>
      <sequence minOccurs="0">
         <element ref="gml:_GeometricAggregate"/>
      </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.
               A 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="MultiPoint"
            type="gml:MultiPointType"
            substitutionGroup="gml:_GeometricAggregate"/>
   <!-- =========================================================== -->
   <complexType name="MultiPointType">
      <annotation>
         <documentation>
            A MultiPoint is defined by one or more Points, referenced
            through pointMember elements.
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractGeometricAggregateType">
            <sequence>
               <element ref="gml:pointMember"
                        minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
         </extension>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <complexType name="MultiPointPropertyType">
      <annotation>
         <documentation>
            A property that has a collection of points 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 must be given, but neither both nor none.
         </documentation>
      </annotation>
      <sequence minOccurs="0">
         <element ref="gml:MultiPoint"/>
      </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.
               A 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="MultiCurve"
            type="gml:MultiCurveType"
            substitutionGroup="gml:_GeometricAggregate"/>
   <!-- =========================================================== -->
   <complexType name="MultiCurveType">
      <annotation>
         <documentation>
            A MultiCurve is defined by one or more Curves, referenced
            through curveMember elements.
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractGeometricAggregateType">
            <sequence>
               <element ref="gml:curveMember"
                        minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
         </extension>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <complexType name="MultiCurvePropertyType">
      <annotation>
         <documentation>
            A property that has a collection of curves 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 must be given, but neither both nor
            none.
         </documentation>
      </annotation>
      <sequence minOccurs="0">
         <element ref="gml:MultiCurve"/>
      </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.
               A 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="MultiSurface"
            type="gml:MultiSurfaceType"
            substitutionGroup="gml:_GeometricAggregate"/>
   <!-- =========================================================== -->
   <complexType name="MultiSurfaceType">
      <annotation>
         <documentation>
            A MultiSurface is defined by one or more Surfaces,
            referenced through surfaceMember elements.
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractGeometricAggregateType">
            <sequence>
               <element ref="gml:surfaceMember"
                        minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
         </extension>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <complexType name="MultiSurfacePropertyType">
      <annotation>
         <documentation>
            A property that has a collection of surfaces 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 must be given, but neither both nor none.
         </documentation>
      </annotation>
      <sequence minOccurs="0">
         <element ref="gml:MultiSurface"/>
      </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.
	       A 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="pointMember" type="gml:PointPropertyType">
      <annotation>
         <documentation>
            This property element either references a Point via the
            XLink-attributes or contains the Point element.
         </documentation>
      </annotation>
   </element>
   <!-- =========================================================== -->
   <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>
   <!-- =========================================================== -->
   <!-- == Subset of geometryPrimitives.xsd for this profile ====== -->
   <!-- =========================================================== -->
   <element name="Curve" type="gml:CurveType" substitutionGroup="gml:_Curve"/>
   <!-- =========================================================== -->
   <complexType name="CurveType">
      <annotation>
         <documentation>
            Curve is a 1-dimensional primitive. Curves are continuous,
            connected, and have a measurable length in terms of the
            coordinate system. 
            A curve is composed of one or more curve segments.
            The curve segments are connected to one another, with the
            end point of each segment except the last being the start
            point of the next segment in the segment list.
            The orientation of the curve is positive.
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractCurveType">
            <sequence>
               <element ref="gml:segments">
                  <annotation>
                     <documentation>
                        This element encapsulates the segments of the
                        curve.
                     </documentation>
                  </annotation>
               </element>
            </sequence>
         </extension>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <!-- curve segments (1-dimensional) -->
   <!-- =========================================================== -->
   <element name="_CurveSegment"
            type="gml:AbstractCurveSegmentType"
            abstract="true">
      <annotation>
         <documentation>
            The "_CurveSegment" element is the abstract head of the
            substituition group for all curve segment elements,
            i.e. continuous segments of the same interpolation
            mechanism.
         </documentation>
      </annotation>
   </element>
   <!-- =========================================================== -->
   <complexType name="AbstractCurveSegmentType" abstract="true">
      <annotation>
         <documentation>
            Curve segment defines a homogeneous segment of a curve.
         </documentation>
      </annotation>
      <sequence/>
   </complexType>
   <!-- =========================================================== -->
   <element name="segments" type="gml:CurveSegmentArrayPropertyType">
      <annotation>
         <documentation>
            This property element contains a list of curve segments.
            The order of the elements is significant and shall be
            preserved when processing the array.
         </documentation>
      </annotation>
   </element>
   <!-- =========================================================== -->
   <complexType name="CurveSegmentArrayPropertyType">
      <annotation>
         <documentation>
            A container for an array of curve segments.
         </documentation>
      </annotation>
      <sequence>
         <element ref="gml:_CurveSegment" minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
   </complexType>
   <!-- =========================================================== -->
   <element name="curveMember" type="gml:CurvePropertyType">
      <annotation>
         <documentation>
            This property element either references a curve via the
            XLink-attributes or contains the curve element. A curve
            element is any element which is substitutable for "_Curve".
         </documentation>
      </annotation>
   </element>
   <!-- ============================================================ -->
   <!-- === global element in "_CurveSegment" substitution group === -->
   <!-- ============================================================ -->
   <element name="LineStringSegment"
            type="gml:LineStringSegmentType"
            substitutionGroup="gml:_CurveSegment"/>
   <!-- ============================================================ -->
   <complexType name="LineStringSegmentType">
      <annotation>
         <documentation>
            A LineStringSegment is a curve segment that is defined by
            two or more coordinate tuples, with linear interpolation
            between them.
            Note: LineStringSegment implements GM_LineString of ISO 19107.
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractCurveSegmentType">
            <sequence>
               <element ref="gml:posList"/>
            </sequence>
            <attribute name="interpolation"
                       type="gml:CurveInterpolationType"
                       fixed="linear">
               <annotation>
                  <documentation>
                     The attribute "interpolation" specifies
                     the curve interpolation mechanism used
                     for this segment. This mechanism uses
                     the control points and control parameters
                     to determine the position of this curve
                     segment. For a LineStringSegment the
                     interpolation is fixed as "linear".
                  </documentation>
               </annotation>
            </attribute>
         </extension>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <!-- surface patches (2-dimensional) -->
   <!-- =========================================================== -->
   <element name="_SurfacePatch"
            type="gml:AbstractSurfacePatchType"
            abstract="true">
      <annotation>
         <documentation>
            The "_SurfacePatch" element is the abstract head of the
            substituition group for all surface pach elements describing
            a continuous portion of a surface.
         </documentation>
      </annotation>
   </element>
   <!-- =========================================================== -->
   <complexType name="AbstractSurfacePatchType" abstract="true">
      <annotation>
         <documentation>
            A surface patch defines a homogenuous portion of a surface.
         </documentation>
      </annotation>
      <sequence/>
   </complexType>
   <!-- =========================================================== -->
   <element name="patches" type="gml:SurfacePatchArrayPropertyType">
      <annotation>
         <documentation>
             This property element contains a list of surface patches.
             The order of the elements is significant and shall be
             preserved when processing the array.
         </documentation>
      </annotation>
   </element>
   <!-- =========================================================== -->
   <complexType name="SurfacePatchArrayPropertyType">
      <annotation>
         <documentation>
            A container for an array of surface patches.
         </documentation>
      </annotation>
      <sequence>
         <element ref="gml:_SurfacePatch"
                  minOccurs="0" maxOccurs="unbounded"/>
      </sequence>
   </complexType>
   <!-- =========================================================== -->
   <element name="PolygonPatch"
            type="gml:PolygonPatchType"
            substitutionGroup="gml:_SurfacePatch"/>
   <!-- =========================================================== -->
   <complexType name="PolygonPatchType">
      <annotation>
         <documentation>
            A PolygonPatch is a surface patch that is defined by
            a set of boundary curves and an underlying surface to
            which these curves adhere. The curves are coplanar and
            the polygon uses planar interpolation in its interior.
            Implements GM_Polygon of ISO 19107. 
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractSurfacePatchType">
            <sequence>
               <element ref="gml:exterior" minOccurs="0"/>
               <element ref="gml:interior"
                        minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
            <attribute name="interpolation"
                       type="gml:SurfaceInterpolationType"
                       fixed="planar">
               <annotation>
                  <documentation>
                     The attribute "interpolation" specifies the
                     interpolation mechanism used for this surface
                     patch. Currently only planar surface patches
                     are defined in GML 3, the attribute is fixed
                     to "planar", i.e. the interpolation method
                     shall return points on a single plane. The
                     boundary of the patch shall be contained within
                     that plane.
                  </documentation>
               </annotation>
            </attribute>
         </extension>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <element name="Surface"
                 type="gml:SurfaceType"
                 substitutionGroup="gml:_Surface"/>
   <!-- =========================================================== -->
   <complexType name="SurfaceType">
      <annotation>
         <documentation>
            A Surface is a 2-dimensional primitive and is composed
            of one or more surface patches. The surface patches are
            connected to one another.
            The orientation of the surface is positive ("up"). The
            orientation of a surface chooses an "up" direction
            through the choice of the upward normal, which, if the
            surface is not a cycle, is the side of the surface from
            which the exterior boundary appears counterclockwise.
            Reversal of the surface orientation reverses the curve
            orientation of each boundary component, and interchanges
            the conceptual "up" and "down" direction of the surface.
            If the surface is the boundary of a solid, the "up"
            direction is usually outward. For closed surfaces, which
            have no boundary, the up direction is that of the surface
            patches, which must be consistent with one another. Its
            included surface patches describe the interior structure
            of the Surface.
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractSurfaceType">
            <sequence>
               <element ref="gml:patches">
                  <annotation>
                     <documentation>
                        This element encapsulates the patches of the
                        surface.
                     </documentation>
                  </annotation>
               </element>
            </sequence>
         </extension>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <simpleType name="CurveInterpolationType">
      <annotation>
         <documentation>
            CurveInterpolationType is a list of codes that may be
            used to identify the interpolation mechanisms specified
            by an schema.
         </documentation>
      </annotation>
      <restriction base="string">
         <enumeration value="linear"/>
      </restriction>
   </simpleType>
   <simpleType name="SurfaceInterpolationType">
      <annotation>
         <documentation>
            SurfaceInterpolationType is a list of codes that may be
            used to identify the interpolation mechanisms specified
            by an application schema.
         </documentation>
      </annotation>
      <restriction base="string">
         <enumeration value="planar"/>
      </restriction>
   </simpleType>
   <!-- =========================================================== -->
   <!-- == Subset of geometryBasic2d.xsd for this profile ========= -->
   <!-- =========================================================== -->
   <!-- == primitive geometry objects (2-dimensional) ============= -->
   <!-- =========================================================== -->
   <element name="_Surface"
            type="gml:AbstractSurfaceType"
            substitutionGroup="gml:_GeometricPrimitive"
            abstract="true">
      <annotation>
         <documentation>
            The "_Surface" element is the abstract head of the
            substituition group for all (continuous) surface elements.
         </documentation>
      </annotation>
   </element>
   <!-- =========================================================== -->
   <complexType name="AbstractSurfaceType">
      <annotation>
         <documentation>
            An 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>
   <!-- =========================================================== -->
   <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 must 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. A 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="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.
         </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>
   <!-- =========================================================== -->
   <!-- rings (closed curves for surface boundaries) -->
   <!-- =========================================================== -->
   <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>
   <!-- =========================================================== -->
   <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>
   <!-- =========================================================== -->
   <complexType name="AbstractRingPropertyType">
      <annotation>
         <documentation>
            Encapsulates a ring to represent the surface boundary property
            of a surface.
         </documentation>
      </annotation>
      <sequence>
         <element ref="gml:LinearRing"/>
      </sequence>
   </complexType>
   <!-- =========================================================== -->
   <element name="LinearRing" type="gml:LinearRingType"
      substitutionGroup="gml:_Geometry"/>
   <!-- =========================================================== -->
   <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 must be coincident.
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractGeometryType">
            <sequence>
               <element ref="gml:posList">
                  <annotation>
                     <documentation>
                        The "posList" element provides 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 must
                        be at least four.
                     </documentation>
                  </annotation>
               </element>
            </sequence>
         </extension>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <!-- == Subset of geometryBasic0d1d.xsd for this profile ======= -->
   <!-- =========================================================== -->
   <!-- =========================================================== -->
   <!-- == abstract supertype for geometry objects ================ -->
   <!-- =========================================================== -->
   <element name="_Geometry" type="gml:AbstractGeometryType"
      substitutionGroup="gml:_GML" abstract="true">
      <annotation>
         <documentation>
            The "_Geometry" element is the abstract head of the
            substituition group for all geometry elements of GML 3.
            This includes pre-defined and user-defined geometry elements.
            Any geometry element must be a direct or indirect
            extension/restriction  of AbstractGeometryType
            and must be directly or indirectly in the substitution
            group of "_Geometry".
         </documentation>
      </annotation>
   </element>
   <!-- =========================================================== -->
   <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 to a remote geometry element (where remote
            includes geometry elements located elsewhere in the same
            document). Note that either the reference or the contained
            element must 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 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. A 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="AbstractGeometryType" abstract="true">
      <annotation>
         <documentation>
            All geometry elements are derived directly or indirectly
            from this abstract supertype. A geometry element may
            have an identifying attribute ("gml:id"), a name (attribute
            "name") and a description (attribute "description"). It may
            be associated with a spatial reference system (attribute
            "srsName"). The following rules shall be adhered: - Every
            geometry type shall derive from this abstract type. - Every
            geometry element (i.e. an element of a geometry type) shall
            be directly or indirectly in the substitution group of _Geometry.
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractGMLType">
            <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 location the URI points to. If no srsName
                     attribute is given, the CRS must be specified as part of
                     the larger context this geometry element is part of, e.g.
                     a geometric element like point, curve, etc. It is expected
                     that this attribute will be specified at the direct
                     position level only in rare cases.
                  </documentation>
               </annotation>
            </attribute>
         </extension>
      </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)
            geometric primitives.
         </documentation>
      </annotation>
   </element>
   <!-- =========================================================== -->
   <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
            decomposed further into other primitives in the system.
            All primitives are oriented in the direction implied by
            the sequence of their coordinate tuples.
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractGeometryType"/>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <!-- primitive geometry objects (0-dimensional) -->
   <!-- =========================================================== -->
   <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>
               <element ref="gml:pos"/>
            </sequence>
         </extension>
      </complexContent>
   </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 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 must 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
               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. A 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>
    <!-- =========================================================== -->
   <!-- primitive geometry objects (1-dimensional) -->
   <!-- =========================================================== -->
   <element name="_Curve" type="gml:AbstractCurveType"
      substitutionGroup="gml:_GeometricPrimitive" abstract="true">
      <annotation>
         <documentation>
            The "_Curve" element is the abstract head of the
            substituition group for all (continuous) curve elements.
         </documentation>
      </annotation>
   </element>
   <!-- =========================================================== -->
   <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
            primitive, i.e. is continuous.
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractGeometricPrimitiveType"/>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <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
            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 must 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
               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. A 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="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 tuples, with linear interpolation
            between them. It is backwards compatible with the LineString
            of GML 2.
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractCurveType">
            <sequence>
               <element ref="gml:posList"/>
            </sequence>
         </extension>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <!-- positions -->
   <!-- =========================================================== -->
   <element name="pos" type="gml:DirectPositionType"/>
   <!-- =========================================================== -->
   <complexType name="DirectPositionType">
      <annotation>
         <documentation>
            DirectPosition instances hold the coordinates for one position
            in the coordinate reference system (CRS) referenced in a 
            larger element. In this case, the CRS shall be assumed to be
            the value referenced in the containing object's CRS.
         </documentation>
      </annotation>
      <simpleContent>
         <extension base="gml:doubleList"/>
      </simpleContent>
   </complexType>
   <!-- =========================================================== -->
   <element name="posList" type="gml:DirectPositionListType"/>
   <!-- =========================================================== -->
   <complexType name="DirectPositionListType">
      <annotation>
         <documentation>
            DirectPositionList instances hold the coordinates for a
            sequence of direct positions within the same coordinate
            reference system (CRS).
         </documentation>
      </annotation>
      <simpleContent>
         <extension base="gml:doubleList"/>
      </simpleContent>
   </complexType>
   <!-- =========================================================== -->
   <!-- Envelope -->
   <!-- =========================================================== -->
   <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 position is the "lower corner" (a coordinate
            position consisting of all the minimal ordinates for each
            dimension for all points within the envelope), the second
            one the "upper corner" (a coordinate position consisting
            of all the maximal ordinates for each dimension for all
            points within the envelope).
         </documentation>
      </annotation>
      <sequence>
         <element name="lowerCorner" type="gml:DirectPositionType"/>
         <element name="upperCorner" type="gml:DirectPositionType"/>
      </sequence>
      <attribute name="srsName" type="anyURI" use="required">
         <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 location the URI points to.
            </documentation>
         </annotation>
      </attribute>
   </complexType>
   <!-- =========================================================== -->
   <!-- == Subset of feature.xsd for this profile ================= -->
   <!-- =========================================================== -->
   <!-- =========================================================== -->
   <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, name and description inherited from
            AbstractGMLType, plus boundedBy.  A concrete feature type
            must derive from this type and specify additional properties
            in an application schema.
         </documentation>
      </annotation>
      <complexContent>
         <extension base="gml:AbstractFeatureBaseType">
            <sequence>
               <element ref="gml:boundedBy" minOccurs="0"/>
               <!-- additional properties must be specified in an
                    application schema -->
            </sequence>
         </extension>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <complexType name="AbstractFeatureBaseType">
      <annotation>
         <documentation>
            A abstract feature base type, that shall include an
            identifying attribute ('id').
         </documentation>
      </annotation>
      <complexContent>
         <restriction base="gml:AbstractGMLType">
            <sequence>
               <group ref="gml:StandardObjectProperties"/>
            </sequence>
            <attribute ref="gml:id" use="required"/>
         </restriction>
      </complexContent>
   </complexType>
   <!-- =========================================================== -->
   <!-- =========================================================== -->
   <element name="boundedBy" type="gml:BoundingShapeType"/>
   <!-- =========================================================== -->
   <complexType name="BoundingShapeType">
      <annotation>
         <documentation>Bounding shape.</documentation>
      </annotation>
      <sequence>
         <element ref="gml:Envelope"/>
      </sequence>
   </complexType>
   <!-- =========================================================== -->
   <!-- == Subset of gmlBase.xsd for this profile ================= -->
   <!-- =========================================================== -->
   <!-- ==================== Objects ============================== -->
   <!-- =========================================================== -->
   <!-- =============== Abstract "Object" is "anyType" ============ -->
   <!-- == Global element at the head of the "Object" substitution= -->
   <!-- == group                                                  = -->
   <!-- =========================================================== -->
   <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>
   <!-- ============================================================ -->
   <!-- == Abstract "GMLobject" supertype ========================== -->
   <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>
   <!-- =========================================================== -->
   <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: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>
   <!-- =========================================================== -->
   <complexType name="AbstractGMLType" abstract="true">
      <annotation>
         <documentation>
            All complexContent GML elements are directly or indirectly
            derived from this abstract supertype to establish a hierarchy
            of GML types that may be distinguished from other XML types
            by their ancestry.  Elements in this hierarchy must have an
            ID and are thus referenceable.
         </documentation>
      </annotation>
      <sequence>
         <group ref="gml:StandardObjectProperties"/>
      </sequence>
      <attribute ref="gml:id" use="optional"/>
   </complexType>
   <!-- =========================================================== -->
   <!-- == Base Property Types ==================================== -->
   <!-- =========================================================== -->
   <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>
      <attributeGroup ref="gml:AssociationAttributeGroup"/>
   </complexType>
   <!-- =========================================================== -->
   <!-- ==========================================================
	global attribute, attribute group and element declarations 
	=============================================================  -->
   <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>
   <!-- =========================================================== -->
   <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.
            These attributes can be attached to any element, thus
            allowing it to act as a pointer.
         </documentation>
      </annotation>
      <attributeGroup ref="xlink:simpleAttrs"/>
   </attributeGroup>
   <!-- =========================================================== -->
   <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>
   <!-- =========================================================== -->
   <element name="description" type="string">
      <annotation>
         <documentation>
            Contains a simple text description of the object.
         </documentation>
         <documentation>
            Restricted to only allow a text string, as done in GML 3.2.
         </documentation>
      </annotation>
   </element>
   <!-- =========================================================== -->
   <!-- == Subset of basicTypes.xsd for this profile ============== -->
   <!-- =========================================================== -->
   <!-- =========================================================== -->
   <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>
   <!-- =========================================================== -->
   <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>
   <!-- =========================================================== -->
   <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>
   <!-- =========================================================== -->
   <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>
   <!-- =========================================================== -->
</schema>