<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns:gml="http://www.opengis.net/gml"
        targetNamespace="http://www.opengis.net/gml" xmlns="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified" attributeFormDefault="unqualified" version="3.2.0">
  <annotation>
    <appinfo source="urn:ogc:specification:gml:schema-xsd:direction:3.2.0">direction.xsd</appinfo>
    <documentation>See ISO/DIS 19136 Clause 18.
      The direction schema components provide the GML Application Schema developer with a standard
      property element to describe direction, and associated objects that may be used to express
      orientation, direction, heading, bearing or other directional aspects of geographic features.
    </documentation>
  </annotation>
  <include schemaLocation="geometryBasic0d1d.xsd"/>
  <element name="direction" type="gml:DirectionPropertyType">
    <annotation>
      <documentation>The property gml:direction is intended as a pre-defined property expressing a
        direction to be assigned to features defined in a GML application schema.
      </documentation>
    </annotation>
  </element>
  <complexType name="DirectionPropertyType">
    <sequence minOccurs="0">
      <choice>
        <element name="DirectionVector" type="gml:DirectionVectorType"/>
        <element name="DirectionDescription" type="gml:DirectionDescriptionType"/>
        <element name="CompassPoint" type="gml:CompassPointEnumeration"/>
        <element name="DirectionKeyword" type="gml:CodeType"/>
        <element name="DirectionString" type="gml:StringOrRefType"/>
      </choice>
    </sequence>
    <attributeGroup ref="gml:OwnershipAttributeGroup"/>
    <attributeGroup ref="gml:AssociationAttributeGroup"/>
  </complexType>
  <complexType name="DirectionVectorType">
    <annotation>
      <documentation>Direction vectors are specified by providing components of a vector.
      </documentation>
    </annotation>
    <choice>
      <element ref="gml:vector"/>
      <sequence>
        <annotation>
          <appinfo>deprecated</appinfo>
        </annotation>
        <element name="horizontalAngle" type="gml:AngleType"/>
        <element name="verticalAngle" type="gml:AngleType"/>
      </sequence>
    </choice>
  </complexType>
  <complexType name="DirectionDescriptionType">
    <annotation>
      <documentation>direction descriptions are specified by a compass point code, a keyword, a
        textual description or a reference to a description.
        A gml:compassPoint is specified by a simple enumeration.
        In addition, thre elements to contain text-based descriptions of direction are provided.
        If the direction is specified using a term from a list, gml:keyword should be used, and the
        list indicated using the value of the codeSpace attribute.
        if the direction is decribed in prose, gml:direction or gml:reference should be used,
        allowing the value to be included inline or by reference.
      </documentation>
    </annotation>
    <choice>
      <element name="compassPoint" type="gml:CompassPointEnumeration"/>
      <element name="keyword" type="gml:CodeType"/>
      <element name="description" type="string"/>
      <element name="reference" type="gml:ReferenceType"/>
    </choice>
  </complexType>
  <simpleType name="CompassPointEnumeration">
    <annotation>
      <documentation>These directions are necessarily approximate, giving direction with a precision
        of 22.5°. It is thus generally unnecessary to specify the reference frame, though this may
        be detailed in the definition of a GML application language.
      </documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="N"/>
      <enumeration value="NNE"/>
      <enumeration value="NE"/>
      <enumeration value="ENE"/>
      <enumeration value="E"/>
      <enumeration value="ESE"/>
      <enumeration value="SE"/>
      <enumeration value="SSE"/>
      <enumeration value="S"/>
      <enumeration value="SSW"/>
      <enumeration value="SW"/>
      <enumeration value="WSW"/>
      <enumeration value="W"/>
      <enumeration value="WNW"/>
      <enumeration value="NW"/>
      <enumeration value="NNW"/>
    </restriction>
  </simpleType>
</schema>
