<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:sch="http://www.ascc.net/xml/schematron" version="3.1.1" elementFormDefault="qualified" targetNamespace="http://www.opengis.net/gml">
<annotation>
<documentation>GML Subset schema for gml:_Feature,gml:_FeatureCollection,gml:FeaturePropertyType,gml:AbstractFeatureType,gml:AssociationAttributeGroup,gml:featureMember,gml:AbstractFeatureCollectionType,gml:metaDataProperty,gml:description,gml:name,gml:boundedBy,gml:_MetaData,gml:AbstractMetaDataType,gml:PointPropertyType,gml:Point,gml:pos,gml:pointRep,gml:coordinates,gml:DirectedNodePropertyType,gml:Node,gml:pointProperty,gml:container,gml:directedEdge,gml:CurvePropertyType,gml:Curve,gml:segments,gml:LineString,gml:LineStringSegment,gml:Arc,gml:CubicSpline,gml:DirectedEdgePropertyType,gml:Edge,gml:directedNode,gml:directedFace,gml:curveProperty,gml:SurfacePropertyType,gml:Polygon,gml:Ring,gml:LinearRing,gml:exterior,gml:interior,gml:curveMember,gml:DirectedFacePropertyType,gml:Face,gml:surfaceProperty,gml:isolated,gml:SolidPropertyType,gml:Solid,gml:DirectedTopoSolidPropertyType,gml:TopoSolid,  written by gmlSubset.xslt. </documentation>
</annotation>
<import schemaLocation="../xlink/xlinks.xsd" namespace="http://www.w3.org/1999/xlink"/>

       <!-- ================================================= -->
   <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 must derive from this type and specify additional  properties in an application schema. A feature must 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 must be specified in an application schema -->
				</sequence>
			</extension>
		</complexContent>
	</complexType>

       <!-- ================================================= -->
   <complexType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 may have an ID and are thus referenceable.</documentation>
		</annotation>
		<sequence>
			<group ref="gml:StandardObjectProperties"/>
		</sequence>
		<attribute ref="gml:id" use="optional"/>
	</complexType>

       <!-- ================================================= -->
   <group xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="metaDataProperty" type="gml:MetaDataPropertyType">
		<annotation>
			<documentation>Contains or refers to a metadata package that contains metadata properties.</documentation>
		</annotation>
	</element>

       <!-- ================================================= -->
   <complexType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="StringOrRefType">
		<annotation>
			<documentation>This 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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 
			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>
		<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 
			DirectPositions, 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 
			CRS. 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 
			a 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 
				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>
		<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 
				specified 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 
			CRS is not needed. This information shall be the same as included in the more complete definition of the CRS, referenced by the 
			srsName attribute. When the srsName attribute is included, either both or neither of the axisLabels and uomLabels attributes 
			shall 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 
				labels, after spaces and forbiddden characters are removed. When the srsName attribute is included, this attribute is optional. 
				When 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 
				gml:catalogSymbol should be used for this uom labels, after spaces and forbiddden characters are removed. When the 
				axisLabels attribute is included, this attribute shall also be included. When the axisLabels attribute is omitted, this attribute 
				shall 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 
			DirectPositionType.</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 name="Check SRS tags">
					<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 
			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>
			<appinfo>
				<sch:pattern name="Check SRS tags">
					<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 
			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="gid" type="string" use="optional">
					<annotation>
						<documentation>This attribute is included for backward compatibility with GML 2 and is deprecated with GML 3. 
						This identifer is superceded by "gml:id" inherited from AbstractGMLType. The attribute "gid" should not be used 
						anymore and may be deleted in future versions of GML without further notice.</documentation>
					</annotation>
				</attribute>
				<attributeGroup ref="gml:SRSReferenceGroup"/>
			</extension>
		</complexContent>
	</complexType>

       <!-- ================================================= -->
   <element xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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>

       <!-- ================================================= -->
   <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>

       <!-- ================================================= -->
   <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 
							DirectPositionType.</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" 
								instead. The "coordinates" element shall only be used for coordinates with ordinates that require a string 
								representation, 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 
								backwards 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 
			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>

       <!-- ================================================= -->
   <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>

       <!-- ================================================= -->
   <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>

       <!-- ================================================= -->
   <complexType name="DirectedNodePropertyType">
		<sequence minOccurs="0">
			<element ref="gml:Node"/>
		</sequence>
		<attribute name="orientation" type="gml:SignType" default="+"/>
		<attributeGroup ref="gml:AssociationAttributeGroup"/>
	</complexType>

       <!-- ================================================= -->
   <element name="Node" type="gml:NodeType" substitutionGroup="gml:_TopoPrimitive"/>

       <!-- ================================================= -->
   <complexType name="NodeType">
		<annotation>
			<documentation>Its optional co-boundary is a set of connected directedEdges.  The orientation of one of these dirEdges is "+" if the Node is the "to" node of the Edge, and "-" if it is the "from" node.</documentation>
		</annotation>
		<complexContent>
			<extension base="gml:AbstractTopoPrimitiveType">
				<sequence>
					<element ref="gml:directedEdge" minOccurs="0" maxOccurs="unbounded"/>
					<element ref="gml:pointProperty" minOccurs="0"/>
					<!-- <element name="geometry" type="gml:PointPropertyType" minOccurs="0"/> -->
				</sequence>
			</extension>
		</complexContent>
	</complexType>

       <!-- ================================================= -->
   <complexType name="AbstractTopoPrimitiveType" abstract="true">
		<complexContent>
			<extension base="gml:AbstractTopologyType">
				<sequence>
					<element ref="gml:isolated" minOccurs="0" maxOccurs="unbounded"/>
					<element ref="gml:container" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>

       <!-- ================================================= -->
   <complexType name="AbstractTopologyType" abstract="true">
		<complexContent>
			<extension base="gml:AbstractGMLType"/>
		</complexContent>
	</complexType>

       <!-- ================================================= -->
   <element name="isolated" type="gml:IsolatedPropertyType">
		<annotation>
			<appinfo>
				<sch:pattern name="refAndContent co-occurence prohibited">
					<sch:rule context="gml:isolated">
						<sch:extends rule="hrefOrContent"/>
					</sch:rule>
				</sch:pattern>
			</appinfo>
		</annotation>
	</element>

       <!-- ================================================= -->
   <complexType name="IsolatedPropertyType">
		<choice minOccurs="0">
			<element ref="gml:Node"/>
			<element ref="gml:Edge"/>
		</choice>
		<attributeGroup ref="gml:AssociationAttributeGroup"/>
	</complexType>

       <!-- ================================================= -->
   <element name="Edge" type="gml:EdgeType" substitutionGroup="gml:_TopoPrimitive"/>

       <!-- ================================================= -->
   <complexType name="EdgeType">
		<annotation>
			<documentation>There is precisely one positively directed and one negatively directed node in the boundary of every edge. The negatively and positively directed nodes correspond to the start and end nodes respectively. The optional coboundary of an edge is a circular sequence of directed faces which are incident on this edge in document order. Faces which use a particular boundary edge in its positive orientation appear with positive orientation on the coboundary of the same edge. In the 2D case, the orientation of the face on the left of the edge is "+"; the orientation of the face on the right on its right is "-". An edge may optionally be realised by a 1-dimensional (curve) geometric primitive.</documentation>
		</annotation>
		<complexContent>
			<extension base="gml:AbstractTopoPrimitiveType">
				<sequence>
					<element ref="gml:directedNode" minOccurs="2" maxOccurs="2"/>
					<element ref="gml:directedFace" minOccurs="0" maxOccurs="unbounded"/>
					<element ref="gml:curveProperty" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>

       <!-- ================================================= -->
   <element name="directedNode" type="gml:DirectedNodePropertyType">
		<annotation>
			<appinfo>
				<sch:pattern name="refAndContent co-occurence prohibited">
					<sch:rule context="gml:directedNode">
						<sch:extends rule="hrefOrContent"/>
					</sch:rule>
				</sch:pattern>
			</appinfo>
		</annotation>
	</element>

       <!-- ================================================= -->
   <element name="directedFace" type="gml:DirectedFacePropertyType">
		<annotation>
			<appinfo>
				<sch:pattern name="refAndContent co-occurence prohibited">
					<sch:rule context="gml:directedFace">
						<sch:extends rule="hrefOrContent"/>
					</sch:rule>
				</sch:pattern>
			</appinfo>
		</annotation>
	</element>

       <!-- ================================================= -->
   <complexType name="DirectedFacePropertyType">
		<sequence minOccurs="0">
			<element ref="gml:Face"/>
		</sequence>
		<attribute name="orientation" type="gml:SignType" default="+"/>
		<attributeGroup ref="gml:AssociationAttributeGroup"/>
	</complexType>

       <!-- ================================================= -->
   <element name="Face" type="gml:FaceType" substitutionGroup="gml:_TopoPrimitive"/>

       <!-- ================================================= -->
   <complexType name="FaceType">
		<annotation>
			<documentation>. The topological boundary of a face consists of a set of directed edges. Note that all edges associated with a Face, including dangling and interior edges, appear in the boundary.  Dangling and interior edges are each referenced by pairs of directedEdges with opposing orientations.  The optional coboundary of a face is a pair of directed solids which are bounded by this face. If present, there is precisely one positively directed and one negatively directed solid in the coboundary of every face. The positively directed solid corresponds to the solid which lies in the direction of the positively directed normal to the face in any geometric realisation.  A face may optionally be realised by a 2-dimensional (surface) geometric primitive.</documentation>
		</annotation>
		<complexContent>
			<extension base="gml:AbstractTopoPrimitiveType">
				<sequence>
					<element ref="gml:directedEdge" maxOccurs="unbounded"/>
					<element ref="gml:directedTopoSolid" minOccurs="0" maxOccurs="2"/>
					<element ref="gml:surfaceProperty" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>

       <!-- ================================================= -->
   <element name="directedEdge" type="gml:DirectedEdgePropertyType">
		<annotation>
			<appinfo>
				<sch:pattern name="refAndContent co-occurence prohibited">
					<sch:rule context="gml:directedEdge">
						<sch:extends rule="hrefOrContent"/>
					</sch:rule>
				</sch:pattern>
			</appinfo>
		</annotation>
	</element>

       <!-- ================================================= -->
   <complexType name="DirectedEdgePropertyType">
		<sequence minOccurs="0">
			<element ref="gml:Edge"/>
		</sequence>
		<attribute name="orientation" type="gml:SignType" default="+"/>
		<attributeGroup ref="gml:AssociationAttributeGroup"/>
	</complexType>

       <!-- ================================================= -->
   <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="directedTopoSolid" type="gml:DirectedTopoSolidPropertyType">
		<annotation>
			<appinfo>
				<sch:pattern name="refAndContent co-occurence prohibited">
					<sch:rule context="gml:directedTopoSolid">
						<sch:extends rule="hrefOrContent"/>
					</sch:rule>
				</sch:pattern>
			</appinfo>
		</annotation>
	</element>

       <!-- ================================================= -->
   <complexType name="DirectedTopoSolidPropertyType">
		<sequence minOccurs="0">
			<element ref="gml:TopoSolid"/>
		</sequence>
		<attribute name="orientation" type="gml:SignType" default="+"/>
		<attributeGroup ref="gml:AssociationAttributeGroup"/>
	</complexType>

       <!-- ================================================= -->
   <element name="TopoSolid" type="gml:TopoSolidType" substitutionGroup="gml:_TopoPrimitive"/>

       <!-- ================================================= -->
   <complexType name="TopoSolidType">
		<annotation>
			<documentation>The topological boundary of a TopoSolid consists of a set of directed faces. Note that all faces associated with the TopoSolid, including dangling faces, appear in the boundary. The coboundary of a TopoSolid is empty and hence requires no representation.</documentation>
		</annotation>
		<complexContent>
			<extension base="gml:AbstractTopoPrimitiveType">
				<sequence>
					<element ref="gml:directedFace" maxOccurs="unbounded"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>

       <!-- ================================================= -->
   <element name="_TopoPrimitive" type="gml:AbstractTopoPrimitiveType" abstract="true" substitutionGroup="gml:_Topology">
		<annotation>
			<documentation>Substitution group branch for Topo Primitives, used by TopoPrimitiveArrayAssociationType</documentation>
		</annotation>
	</element>

       <!-- ================================================= -->
   <element name="_Topology" type="gml:AbstractTopologyType" abstract="true" substitutionGroup="gml:_GML"/>

       <!-- ================================================= -->
   <element name="surfaceProperty" type="gml:SurfacePropertyType">
		<annotation>
			<appinfo>
				<sch:pattern name="Check either href or content not both">
					<sch:rule context="gml:surfaceProperty">
						<sch:extends rule="hrefOrContent"/>
					</sch:rule>
				</sch:pattern>
			</appinfo>
			<documentation>This property element either references a surface via the XLink-attributes or contains the surface element. surfaceProperty is the predefined property which can be used by GML Application Schemas whenever a GML Feature has a property with a value that is substitutable for _Surface.</documentation>
		</annotation>
	</element>

       <!-- ================================================= -->
   <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="_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>

       <!-- ================================================= -->
   <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>

       <!-- ================================================= -->
   <element name="curveProperty" type="gml:CurvePropertyType">
		<annotation>
			<appinfo>
				<sch:pattern name="Check either href or content not both">
					<sch:rule context="gml:curveProperty">
						<sch:extends rule="hrefOrContent"/>
					</sch:rule>
				</sch:pattern>
			</appinfo>
			<documentation>This property element either references a curve via the XLink-attributes or contains the curve element. curveProperty is the 
			predefined property which can be used by GML Application Schemas whenever a GML Feature has a property with a value that is 
			substitutable for _Curve.</documentation>
		</annotation>
	</element>

       <!-- ================================================= -->
   <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="_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>

       <!-- ================================================= -->
   <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>

       <!-- ================================================= -->
   <element name="container" type="gml:ContainerPropertyType">
		<annotation>
			<appinfo>
				<sch:pattern name="refAndContent co-occurence prohibited">
					<sch:rule context="gml:containerProperty">
						<sch:extends rule="hrefOrContent"/>
					</sch:rule>
				</sch:pattern>
			</appinfo>
		</annotation>
	</element>

       <!-- ================================================= -->
   <complexType name="ContainerPropertyType">
		<sequence minOccurs="0">
			<choice>
				<element ref="gml:Face"/>
				<element ref="gml:TopoSolid"/>
			</choice>
		</sequence>
		<attributeGroup ref="gml:AssociationAttributeGroup"/>
	</complexType>

       <!-- ================================================= -->
   <element name="pointProperty" type="gml:PointPropertyType">
		<annotation>
			<appinfo>
				<sch:pattern name="Check either href or content not both">
					<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 
			is the predefined property which can be used by GML Application Schemas whenever a GML Feature has a property with a value that 
			is substitutable for Point.</documentation>
		</annotation>
	</element>

       <!-- ================================================= -->
   <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. Each curve segment within a curve may be defined using a different interpolation method. 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>

       <!-- ================================================= -->
   <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="_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/>
		<attribute name="numDerivativesAtStart" type="integer" use="optional" default="0">
			<annotation>
				<documentation>The attribute "numDerivativesAtStart" specifies the type of continuity between this curve segment and its predecessor. If this is the first curve segment in the curve, one of these values, as appropriate, is ignored. The default value of "0" means simple continuity, which is a mandatory minimum level of continuity. This level is referred to as "C 0 " in mathematical texts. A value of 1 means that the function and its first derivative are continuous at the appropriate end point: "C 1 " continuity. A value of "n" for any integer means the function and its first n derivatives are continuous: "C n " continuity.
NOTE: Use of these values is only appropriate when the basic curve definition is an underdetermined system. For example, line string segments cannot support continuity above C 0 , since there is no spare control parameter to adjust the incoming angle at the end points of the segment. Spline functions on the other hand often have extra degrees of freedom on end segments that allow them to adjust the values of the derivatives to support C 1 or higher continuity.</documentation>
			</annotation>
		</attribute>
		<attribute name="numDerivativesAtEnd" type="integer" use="optional" default="0">
			<annotation>
				<documentation>The attribute "numDerivativesAtEnd" specifies the type of continuity between this curve segment and its successor. If this is the last curve segment in the curve, one of these values, as appropriate, is ignored. The default value of "0" means simple continuity, which is a mandatory minimum level of continuity. This level is referred to as "C 0 " in mathematical texts. A value of 1 means that the function and its first derivative are continuous at the appropriate end point: "C 1 " continuity. A value of "n" for any integer means the function and its first n derivatives are continuous: "C n " continuity.
NOTE: Use of these values is only appropriate when the basic curve definition is an underdetermined system. For example, line string segments cannot support continuity above C 0 , since there is no spare control parameter to adjust the incoming angle at the end points of the segment. Spline functions on the other hand often have extra degrees of freedom on end segments that allow them to adjust the values of the derivatives to support C 1 or higher continuity.</documentation>
			</annotation>
		</attribute>
		<attribute name="numDerivativeInterior" type="integer" use="optional" default="0">
			<annotation>
				<documentation>The attribute "numDerivativesInterior" specifies the type of continuity that is guaranteed interior to the curve. The default value of "0" means simple continuity, which is a mandatory minimum level of continuity. This level is referred to as "C 0 " in mathematical texts. A value of 1 means that the function and its first derivative are continuous at the appropriate end point: "C 1 " continuity. A value of "n" for any integer means the function and its first n derivatives are continuous: "C n " continuity.
NOTE: Use of these values is only appropriate when the basic curve definition is an underdetermined system. For example, line string segments cannot support continuity above C 0 , since there is no spare control parameter to adjust the incoming angle at the end points of the segment. Spline functions on the other hand often have extra degrees of freedom on end segments that allow them to adjust the values of the derivatives to support C 1 or higher continuity.</documentation>
			</annotation>
		</attribute>
	</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, GM_LineString of ISO 19107 is 
			implemented 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 
							of this curve, "pointProperty" elements contain a point that may be referenced from other geometry elements or reference 
							another point defined outside of this curve (reuse of existing points). 2. 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 curve only. The number of direct positions in the list must 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 
									with 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 
									compatibility 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>

       <!-- ================================================= -->
   <element name="posList" type="gml:DirectPositionListType">
		<annotation>
			<appinfo>
				<sch:pattern name="Check SRS tags">
					<sch:rule context="gml:posList">
						<sch:extends rule="CRSLabels"/>
					</sch:rule>
				</sch:pattern>
			</appinfo>
			<appinfo>
				<sch:pattern name="Check Dimension">
					<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 
			reference 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 
						the attribute srsDimension shall be present, too.</documentation>
					</annotation>
				</attribute>
			</extension>
		</simpleContent>
	</complexType>

       <!-- ================================================= -->
   <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>
					<choice>
						<annotation>
							<documentation>GML supports two different ways to specify the control points of a curve segment.
1. A sequence of "pos" (DirectPositionType) or "pointProperty" (PointPropertyType) elements. "pos" elements are control points that are only part of this curve segment, "pointProperty" elements contain a point that may be referenced from other geometry elements or reference another point defined outside of this curve segment (reuse of existing points).
2. 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 curve segment only. The number of direct positions in the list must 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 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>
					</choice>
				</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>

       <!-- ================================================= -->
   <simpleType name="CurveInterpolationType">
		<annotation>
			<documentation>CurveInterpolationType 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="linear"/>
			<enumeration value="geodesic"/>
			<enumeration value="circularArc3Points"/>
			<enumeration value="circularArc2PointWithBulge"/>
			<enumeration value="circularArcCenterPointWithRadius"/>
			<enumeration value="elliptical"/>
			<enumeration value="clothoid"/>
			<enumeration value="conic"/>
			<enumeration value="polynomialSpline"/>
			<enumeration value="cubicSpline"/>
			<enumeration value="rationalSpline"/>
		</restriction>
	</simpleType>

       <!-- ================================================= -->
   <element name="Arc" type="gml:ArcType" substitutionGroup="gml:ArcString"/>

       <!-- ================================================= -->
   <complexType name="ArcType">
		<annotation>
			<documentation>An Arc is an arc string with only one arc unit, i.e. three control points.</documentation>
		</annotation>
		<complexContent>
			<restriction base="gml:ArcStringType">
				<sequence>
					<choice>
						<annotation>
							<documentation>GML supports two different ways to specify the control points of a curve segment.
1. A sequence of "pos" (DirectPositionType) or "pointProperty" (PointPropertyType) elements. "pos" elements are control points that are only part of this curve segment, "pointProperty" elements contain a point that may be referenced from other geometry elements or reference another point defined outside of this curve segment (reuse of existing points).
2. 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 curve segment only. The number of direct positions in the list must be three.</documentation>
						</annotation>
						<choice minOccurs="3" maxOccurs="3">
							<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>
					</choice>
				</sequence>
				<attribute name="numArc" type="integer" use="optional" fixed="1">
					<annotation>
						<documentation>An arc is an arc string consiting of a single arc, the attribute is fixed to "1".</documentation>
					</annotation>
				</attribute>
			</restriction>
		</complexContent>
	</complexType>

       <!-- ================================================= -->
   <complexType name="ArcStringType">
		<annotation>
			<documentation>An ArcString is a curve segment that uses three-point circular arc interpolation.</documentation>
		</annotation>
		<complexContent>
			<extension base="gml:AbstractCurveSegmentType">
				<sequence>
					<choice>
						<annotation>
							<documentation>GML supports two different ways to specify the control points of a curve segment.
1. A sequence of "pos" (DirectPositionType) or "pointProperty" (PointPropertyType) elements. "pos" elements are control points that are only part of this curve segment, "pointProperty" elements contain a point that may be referenced from other geometry elements or reference another point defined outside of this curve segment (reuse of existing points).
2. 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 curve segment only. The number of direct positions in the list must be at least three.</documentation>
						</annotation>
						<choice minOccurs="3" 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>
					</choice>
				</sequence>
				<attribute name="interpolation" type="gml:CurveInterpolationType" fixed="circularArc3Points">
					<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 an ArcString the interpolation is fixed as "circularArc3Points".</documentation>
					</annotation>
				</attribute>
				<attribute name="numArc" type="integer" use="optional">
					<annotation>
						<documentation>The number of arcs in the arc string can be explicitly stated in this attribute. The number of control points in the arc string must be 2 * numArc + 1.</documentation>
					</annotation>
				</attribute>
			</extension>
		</complexContent>
	</complexType>

       <!-- ================================================= -->
   <element name="ArcString" type="gml:ArcStringType" substitutionGroup="gml:_CurveSegment"/>

       <!-- ================================================= -->
   <element name="CubicSpline" type="gml:CubicSplineType" substitutionGroup="gml:_CurveSegment"/>

       <!-- ================================================= -->
   <complexType name="CubicSplineType">
		<annotation>
			<documentation>Cubic splines are similar to line strings in that they are a sequence of segments each with its own defining function. A cubic spline uses the control points and a set of derivative parameters to define a piecewise 3rd degree polynomial interpolation. Unlike line-strings, the parameterization by arc length is not necessarily still a polynomial. 
				The function describing the curve must be C2, that is, have a continuous 1st and 2nd derivative at all points, and pass through the controlPoints in the order given. Between the control points, the curve segment is defined by a cubic polynomial. At each control point, the polynomial changes in such a manner that the 1st and 2nd derivative vectors are the same from either side. The control parameters record must contain vectorAtStart, and vectorAtEnd which are the unit tangent vectors at controlPoint[1] and controlPoint[n] where n = controlPoint.count. 
				Note: only the direction of the vectors is relevant, not their length.</documentation>
		</annotation>
		<complexContent>
			<extension base="gml:AbstractCurveSegmentType">
				<sequence>
					<choice>
						<annotation>
							<documentation>GML supports two different ways to specify the control points of a curve segment.
1. A sequence of "pos" (DirectPositionType) or "pointProperty" (PointPropertyType) elements. "pos" elements are control points that are only part of this curve segment, "pointProperty" elements contain a point that may be referenced from other geometry elements or reference another point defined outside of this curve segment (reuse of existing points).
2. 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 curve segment only. The number of direct positions in the list must be at least three.</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 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>
					</choice>
					<element name="vectorAtStart" type="gml:VectorType">
						<annotation>
							<documentation>"vectorAtStart" is the unit tangent vector at the start point of the spline.</documentation>
						</annotation>
					</element>
					<element name="vectorAtEnd" type="gml:VectorType">
						<annotation>
							<documentation>"vectorAtEnd" is the unit tangent vector at the end point of the spline.</documentation>
						</annotation>
					</element>
				</sequence>
				<attribute name="interpolation" type="gml:CurveInterpolationType" fixed="cubicSpline">
					<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 CubicSpline the interpolation is fixed as "cubicSpline".</documentation>
					</annotation>
				</attribute>
				<attribute name="degree" type="integer" fixed="3">
					<annotation>
						<documentation>The degree for a cubic spline is "3".</documentation>
					</annotation>
				</attribute>
			</extension>
		</complexContent>
	</complexType>

       <!-- ================================================= -->
   <complexType name="VectorType">
		<annotation>
			<documentation>Vector instances hold the compoents for a (usually spatial) vector within some coordinate reference system (CRS). 
			Since Vectors will often be included in larger objects that have references to CRS, the "srsName" attribute may be missing. 
			In this case, the CRS is implicitly assumed to take on the value of the containing object's CRS.

			Note that this content model is the same as DirectPositionType, but is defined separately to reflect the distinct semantics, and to avoid validation problems. SJDC 2004-12-02</documentation>
		</annotation>
		<simpleContent>
			<extension base="gml:doubleList">
				<attributeGroup ref="gml:SRSReferenceGroup"/>
			</extension>
		</simpleContent>
	</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, 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>

       <!-- ================================================= -->
   <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>An 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="Ring" type="gml:RingType" substitutionGroup="gml:_Ring"/>

       <!-- ================================================= -->
   <complexType name="RingType">
		<annotation>
			<documentation>A Ring is used to represent a single connected component of a surface boundary. It consists of a sequence of curves connected in a cycle (an object whose boundary is empty).
A Ring is structurally similar to a composite curve in that the endPoint of each curve in the sequence is the startPoint of the next curve in the Sequence. Since the sequence is circular, there is no exception to this rule. Each ring, like all boundaries, is a cycle and each ring is simple.
NOTE: Even though each Ring is simple, the boundary need not be simple. The easiest case of this is where one of the interior rings of a surface is tangent to its exterior ring.</documentation>
		</annotation>
		<complexContent>
			<extension base="gml:AbstractRingType">
				<sequence>
					<element ref="gml:curveMember" maxOccurs="unbounded">
						<annotation>
							<documentation>This element references or contains one curve in the composite curve. The curves are contiguous, the collection of curves is ordered.
NOTE: This definition allows for a nested structure, i.e. a CompositeCurve may use, for example, another CompositeCurve as a curve member.</documentation>
						</annotation>
					</element>
				</sequence>
			</extension>
		</complexContent>
	</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>

       <!-- ================================================= -->
   <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 must 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.
1. 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).
2. 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 must 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>

       <!-- ================================================= -->
   <complexType name="SolidPropertyType">
		<annotation>
			<documentation>A property that has a solid 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:_Solid"/>
		</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="_Solid" type="gml:AbstractSolidType" abstract="true" substitutionGroup="gml:_GeometricPrimitive">
		<annotation>
			<documentation>The "_Solid" element is the abstract head of the substituition group for all (continuous) solid elements.</documentation>
		</annotation>
	</element>

       <!-- ================================================= -->
   <complexType name="AbstractSolidType">
		<annotation>
			<documentation>An abstraction of a solid to support the different levels of complexity. A solid is always contiguous.</documentation>
		</annotation>
		<complexContent>
			<extension base="gml:AbstractGeometricPrimitiveType"/>
		</complexContent>
	</complexType>

       <!-- ================================================= -->
   <element name="Solid" type="gml:SolidType" substitutionGroup="gml:_Solid"/>

       <!-- ================================================= -->
   <complexType name="SolidType">
		<annotation>
			<documentation>A solid is the basis for 3-dimensional geometry. The extent of a solid is defined by the boundary surfaces (shells). A shell is represented by a composite surface, where every  shell is used to represent a single connected component of the boundary of a solid. It consists of a composite surface (a list of orientable surfaces) connected in a topological cycle (an object whose boundary is empty). Unlike a Ring, a Shell's elements have no natural sort order. Like Rings, Shells are simple.</documentation>
		</annotation>
		<complexContent>
			<extension base="gml:AbstractSolidType">
				<sequence>
					<element name="exterior" type="gml:SurfacePropertyType" minOccurs="0">
						<annotation>
							<appinfo>
								<sch:pattern name="Check either href or content not both">
									<sch:rule context="gml:exterior">
										<sch:extends rule="hrefOrContent"/>
									</sch:rule>
								</sch:pattern>
							</appinfo>
							<documentation>Boundaries of solids are similar to surface boundaries. In normal 3-dimensional Euclidean space, one (composite) surface is distinguished as the exterior. In the more general case, this is not always possible.</documentation>
						</annotation>
					</element>
					<element name="interior" type="gml:SurfacePropertyType" minOccurs="0" maxOccurs="unbounded">
						<annotation>
							<appinfo>
								<sch:pattern name="Check either href or content not both">
									<sch:rule context="gml:interior">
										<sch:extends rule="hrefOrContent"/>
									</sch:rule>
								</sch:pattern>
							</appinfo>
							<documentation>Boundaries of solids are similar to surface boundaries.</documentation>
						</annotation>
					</element>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
</schema>
