<schema targetNamespace="http://www.opengis.net/gml/3.3/lr" xmlns:gmllr="http://www.opengis.net/gml/3.3/lr" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xml="http://www.w3.org/XML/1998/namespace" elementFormDefault="qualified" version="3.3.1">
  <annotation>
    <documentation>linearRef.xsd, part of GML 3.3. Copyright (c) [2011,2018] Open Geospatial Consortium, Inc. To obtain additional rights of use, visit http://www.opengeospatial.org/legal/.</documentation>
  </annotation>
  <import namespace="http://www.opengis.net/gml/3.2" schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd" />
  <complexType name="PositionExpressionType">
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <element name="linearElement" type="gmllr:LinearElementPropertyType" />
          <element name="lrm" type="gmllr:LinearReferencingMethodPropertyType" />
          <element name="distanceExpression" type="gmllr:DistanceExpressionPropertyType" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <element name="PositionExpression" type="gmllr:PositionExpressionType" substitutionGroup="gml:AbstractGML" />
  <complexType name="PositionExpressionPropertyType">
    <sequence minOccurs="0">
      <element ref="gmllr:PositionExpression" />
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup" />
  </complexType>
  <complexType name="LinearElementType">
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <choice>
            <element name="feature" type="gml:FeaturePropertyType" />
            <element name="curve" type="gml:CurvePropertyType" />
            <element name="edge" type="gml:DirectedEdgePropertyType" />
          </choice>
          <element name="defaultLRM" type="gmllr:LinearReferencingMethodPropertyType" />
          <element name="measure" type="gml:MeasureType" />
          <element name="startValue" type="gmllr:StartValueType" minOccurs="0" maxOccurs="unbounded" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <element name="LinearElement" type="gmllr:LinearElementType" substitutionGroup="gml:AbstractGML" />
  <complexType name="LinearElementPropertyType">
    <sequence minOccurs="0">
      <element ref="gmllr:LinearElement" />
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup" />
  </complexType>
  <complexType name="StartValueType">
    <simpleContent>
      <extension base="double">
        <attribute name="uom" type="gml:UomIdentifier" />
        <attribute name="lrm" type="anyURI" use="required">
          <annotation>
            <appinfo>
              <gml:targetElement>gmllr:LinearReferencingMethod</gml:targetElement>
            </appinfo>
          </annotation>
        </attribute>
      </extension>
    </simpleContent>
  </complexType>
  <complexType name="LinearReferencingMethodType">
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <element name="name" type="gmllr:LRMNameType" />
          <element name="type" type="gmllr:LRMTypeType" />
          <element name="units" type="gml:UomIdentifier" />
          <element name="constraint" type="string" minOccurs="0" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <element name="LinearReferencingMethod" type="gmllr:LinearReferencingMethodType" substitutionGroup="gml:AbstractGML" />
  <complexType name="LinearReferencingMethodPropertyType">
    <sequence minOccurs="0">
      <element ref="gmllr:LinearReferencingMethod" />
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup" />
  </complexType>
  <complexType name="DistanceExpressionType">
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <element name="distanceAlong" type="gmllr:MeasureType" />
          <element name="referent" type="gmllr:AlongReferentPropertyType" minOccurs="0" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <element name="DistanceExpression" type="gmllr:DistanceExpressionType" substitutionGroup="gml:AbstractGML" />
  <complexType name="DistanceExpressionPropertyType">
    <sequence minOccurs="0">
      <element ref="gmllr:DistanceExpression" />
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup" />
  </complexType>
  <complexType name="AlongReferentType">
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <element name="fromReferent" type="gmllr:ReferentPropertyType" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <element name="AlongReferent" type="gmllr:AlongReferentType" substitutionGroup="gml:AbstractGML" />
  <complexType name="AlongReferentPropertyType">
    <sequence minOccurs="0">
      <element ref="gmllr:AlongReferent" />
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup" />
  </complexType>
  <complexType name="ReferentType">
    <complexContent>
      <extension base="gml:AbstractGMLType">
        <sequence>
          <element name="name" type="gml:CodeType" />
          <element name="type" type="gmllr:ReferentTypeType" />
          <element name="position" type="gml:PointPropertyType" minOccurs="0" />
          <element name="location" type="gmllr:PositionExpressionPropertyType" minOccurs="0" />
          <element name="ownedBy" type="gml:FeaturePropertyType" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <element name="Referent" type="gmllr:ReferentType" substitutionGroup="gml:AbstractGML" />
  <complexType name="ReferentPropertyType">
    <sequence minOccurs="0">
      <element ref="gmllr:Referent" />
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup" />
  </complexType>
  <complexType name="MeasureType">
    <simpleContent>
      <extension base="double">
        <attribute name="uom" type="gml:UomIdentifier" />
      </extension>
    </simpleContent>
  </complexType>
  <complexType name="LRMNameType">
    <annotation>
      <documentation>Informative values from ISO 19148 Annex C</documentation>
      <appinfo>
        <restriction base="string">
          <enumeration value="milepoint" />
          <enumeration value="trueMileage" />
          <enumeration value="kilometre-point" />
          <enumeration value="kilopoint" />
          <enumeration value="chainage" />
          <enumeration value="hectometre-point" />
          <enumeration value="reverseMilepoint" />
          <enumeration value="reverseKilometre-point" />
          <enumeration value="milepointWithLateralOffsetsInFeet" />
          <enumeration value="milepost" />
          <enumeration value="kilopost" />
          <enumeration value="kilometre-post" />
          <enumeration value="referencePost" />
          <enumeration value="countyMilepoint" />
          <enumeration value="crossStreet" />
          <enumeration value="controlSection" />
          <enumeration value="percentage" />
          <enumeration value="normalized" />
          <enumeration value="stationing" />
          <enumeration value="address" />
          <enumeration value="mileMeasure" />
          <enumeration value="kilometreMeasure" />
        </restriction>
      </appinfo>
    </annotation>
    <simpleContent>
      <extension base="gml:CodeType" />
    </simpleContent>
  </complexType>
  <complexType name="LRMTypeType">
    <annotation>
      <documentation>Normative values from ISO 19148</documentation>
      <appinfo>
        <restriction base="string">
          <enumeration value="absolute" />
          <enumeration value="relative" />
          <enumeration value="interpolative" />
          <enumeration value="localInterpolative" />
        </restriction>
      </appinfo>
    </annotation>
    <simpleContent>
      <extension base="gml:CodeType" />
    </simpleContent>
  </complexType>
  <simpleType name="ReferentTypeType">
    <restriction base="string">
      <enumeration value="referenceMarker" />
      <enumeration value="intersection" />
      <enumeration value="boundary" />
      <enumeration value="landmark" />
    </restriction>
  </simpleType>
  <complexType name="LinearSRSType">
    <complexContent>
      <extension base="gml:IdentifiedObjectType">
        <sequence>
          <element name="linearElement" type="gmllr:LinearElementPropertyType" />
          <element name="lrm" type="gmllr:LinearReferencingMethodPropertyType" />
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <element name="LinearSRS" type="gmllr:LinearSRSType" substitutionGroup="gml:Definition" />
  <complexType name="LinearSRSPropertyType">
    <sequence minOccurs="0">
      <element ref="gmllr:LinearSRS" />
    </sequence>
    <attributeGroup ref="gml:AssociationAttributeGroup" />
  </complexType>
</schema>
