Schema definition

Location references in Datex II use the following schema. The schema is an extract of the complete Datex II schema showing only the OpenLR relevant parts.

<?xml version="1.0" encoding="utf-8" standalone="no"?>

<xs:schema elementFormDefault="qualified"
        attributeFormDefault="unqualified" xmlns:D2LogicalModel="http://datex2.eu/schema/2_0RC2/2_0"
        targetNamespace="http://datex2.eu/schema/2_0RC2/2_0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        
        <xs:complexType name="_ExtensionType">
                <xs:sequence>
                        <xs:any namespace="##any" processContents="lax" minOccurs="0"
                                maxOccurs="unbounded" />
                </xs:sequence>
        </xs:complexType>
        
        <xs:simpleType name="AngleInDegreesRestrictedRange">
                <xs:restriction base="D2LogicalModel:NonNegativeInteger">
                        <xs:minInclusive value="0" />
                        <xs:maxInclusive value="359" />
                </xs:restriction>
        </xs:simpleType>
        
        <xs:simpleType name="Float">
                <xs:restriction base="xs:float" />
        </xs:simpleType>
        
        <xs:simpleType name="MetresAsNonNegativeInteger">
                <xs:restriction base="D2LogicalModel:NonNegativeInteger" />
        </xs:simpleType>
        
        <xs:simpleType name="NonNegativeInteger">
                <xs:restriction base="xs:nonNegativeInteger" />
        </xs:simpleType>
        
        <xs:complexType name="OpenlrBaseLocationReferencePoint"
                abstract="true">
                <xs:sequence>
                        <xs:element name="openlrCoordinate" type="D2LogicalModel:PointCoordinates" />
                        <xs:element name="openlrLineAttributes" type="D2LogicalModel:OpenlrLineAttributes" />
                        <xs:element name="openlrBaseLocationReferencePointExtension"
                                type="D2LogicalModel:_ExtensionType" minOccurs="0" />
                </xs:sequence>
        </xs:complexType>
        
        <xs:complexType name="OpenlrBasePointLocation" abstract="true">
                <xs:sequence>
                        <xs:element name="openlrSideOfRoad" type="D2LogicalModel:OpenlrSideOfRoadEnum"
                                minOccurs="1" maxOccurs="1" />
                        <xs:element name="openlrOrientation" type="D2LogicalModel:OpenlrOrientationEnum"
                                minOccurs="1" maxOccurs="1" />
                        <xs:element name="openlrPositiveOffset"
                                type="D2LogicalModel:MetresAsNonNegativeInteger" minOccurs="0"
                                maxOccurs="1" />
                        <xs:element name="openlrLocationReferencePoint"
                                type="D2LogicalModel:OpenlrLocationReferencePoint" />
                        <xs:element name="openlrLastLocationReferencePoint"
                                type="D2LogicalModel:OpenlrLastLocationReferencePoint" />
                        <xs:element name="openlrBasePointLocationExtension" type="D2LogicalModel:_ExtensionType"
                                minOccurs="0" />
                </xs:sequence>
        </xs:complexType>
        
        <xs:complexType name="OpenlrExtendedLinear">
                <xs:sequence>
                        <xs:element name="openlrLineLocationReference"
                                type="D2LogicalModel:OpenlrLineLocationReference" />
                </xs:sequence>
        </xs:complexType>
        
        <xs:complexType name="OpenlrExtendedPoint">
                <xs:sequence>
                        <xs:element name="openlrPointLocationReference"
                                type="D2LogicalModel:OpenlrPointLocationReference" />
                </xs:sequence>
        </xs:complexType>
        
        <xs:simpleType name="OpenlrFormOfWayEnum">
                <xs:restriction base="xs:string">
                        <xs:enumeration value="undefined" />
                        <xs:enumeration value="motorway" />
                        <xs:enumeration value="multipleCarriageway" />
                        <xs:enumeration value="singleCarriageway" />
                        <xs:enumeration value="roundabout" />
                        <xs:enumeration value="slipRoad" />
                        <xs:enumeration value="trafficSquare" />
                        <xs:enumeration value="other" />
                </xs:restriction>
        </xs:simpleType>
        
        <xs:simpleType name="OpenlrFunctionalRoadClassEnum">
                <xs:restriction base="xs:string">
                        <xs:enumeration value="FRC0" />
                        <xs:enumeration value="FRC1" />
                        <xs:enumeration value="FRC2" />
                        <xs:enumeration value="FRC3" />
                        <xs:enumeration value="FRC4" />
                        <xs:enumeration value="FRC5" />
                        <xs:enumeration value="FRC6" />
                        <xs:enumeration value="FRC7" />
                </xs:restriction>
        </xs:simpleType>
        
        <xs:complexType name="OpenlrGeoCoordinate">
                <xs:sequence>
                        <xs:element name="openlrCoordinate" type="D2LogicalModel:PointCoordinates" />
                        <xs:element name="openlrGeoCoordinateExtension" type="D2LogicalModel:_ExtensionType"
                                minOccurs="0" />
                </xs:sequence>
        </xs:complexType>
        
        <xs:complexType name="OpenlrLastLocationReferencePoint">
                <xs:complexContent>
                        <xs:extension base="D2LogicalModel:OpenlrBaseLocationReferencePoint">
                                <xs:sequence>
                                        <xs:element name="openlrLastLocationReferencePointExtension"
                                                type="D2LogicalModel:_ExtensionType" minOccurs="0" />
                                </xs:sequence>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
        
        <xs:complexType name="OpenlrLineAttributes">
                <xs:sequence>
                        <xs:element name="openlrFunctionalRoadClass"
                                type="D2LogicalModel:OpenlrFunctionalRoadClassEnum" minOccurs="1"
                                maxOccurs="1" />
                        <xs:element name="openlrFormOfWay" type="D2LogicalModel:OpenlrFormOfWayEnum"
                                minOccurs="1" maxOccurs="1" />
                        <xs:element name="openlrBearing"
                                type="D2LogicalModel:AngleInDegreesRestrictedRange" minOccurs="1"
                                maxOccurs="1" />
                        <xs:element name="openlrLineAttributesExtension" type="D2LogicalModel:_ExtensionType"
                                minOccurs="0" />
                </xs:sequence>
        </xs:complexType>
        
        <xs:complexType name="OpenlrLineLocationReference">
                <xs:sequence>
                        <xs:element name="openlrLocationReferencePoint"
                                type="D2LogicalModel:OpenlrLocationReferencePoint" maxOccurs="unbounded" />
                        <xs:element name="openlrLastLocationReferencePoint"
                                type="D2LogicalModel:OpenlrLastLocationReferencePoint" />
                        <xs:element name="openlrOffsets" type="D2LogicalModel:OpenlrOffsets"
                                minOccurs="0" />
                        <xs:element name="openlrLineLocationReferenceExtension"
                                type="D2LogicalModel:_ExtensionType" minOccurs="0" />
                </xs:sequence>
        </xs:complexType>
        
        <xs:complexType name="OpenlrLocationReferencePoint">
                <xs:complexContent>
                        <xs:extension base="D2LogicalModel:OpenlrBaseLocationReferencePoint">
                                <xs:sequence>
                                        <xs:element name="openlrPathAttributes" type="D2LogicalModel:OpenlrPathAttributes" />
                                        <xs:element name="openlrLocationReferencePointExtension"
                                                type="D2LogicalModel:_ExtensionType" minOccurs="0" />
                                </xs:sequence>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
        
        <xs:complexType name="OpenlrOffsets">
                <xs:sequence>
                        <xs:element name="openlrPositiveOffset"
                                type="D2LogicalModel:MetresAsNonNegativeInteger" minOccurs="0"
                                maxOccurs="1" />
                        <xs:element name="openlrNegativeOffset"
                                type="D2LogicalModel:MetresAsNonNegativeInteger" minOccurs="0"
                                maxOccurs="1" />
                        <xs:element name="openlrOffsetsExtension" type="D2LogicalModel:_ExtensionType"
                                minOccurs="0" />
                </xs:sequence>
        </xs:complexType>
        
        <xs:simpleType name="OpenlrOrientationEnum">
                <xs:restriction base="xs:string">
                        <xs:enumeration value="noOrientationOrUnknown" />
                        <xs:enumeration value="withLineDirection" />
                        <xs:enumeration value="againstLineDirection" />
                        <xs:enumeration value="both" />
                </xs:restriction>
        </xs:simpleType>
        
        <xs:complexType name="OpenlrPathAttributes">
                <xs:sequence>
                        <xs:element name="openlrLowestFRCToNextLRPoint"
                                type="D2LogicalModel:OpenlrFunctionalRoadClassEnum" minOccurs="1"
                                maxOccurs="1" />
                        <xs:element name="openlrDistanceToNextLRPoint" type="D2LogicalModel:NonNegativeInteger"
                                minOccurs="1" maxOccurs="1" />
                        <xs:element name="openlrPathAttributesExtension" type="D2LogicalModel:_ExtensionType"
                                minOccurs="0" />
                </xs:sequence>
        </xs:complexType>
        
        <xs:complexType name="OpenlrPointAlongLine">
                <xs:complexContent>
                        <xs:extension base="D2LogicalModel:OpenlrBasePointLocation">
                                <xs:sequence>
                                        <xs:element name="openlrPointAlongLineExtension" type="D2LogicalModel:_ExtensionType"
                                                minOccurs="0" />
                                </xs:sequence>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
        
        <xs:complexType name="OpenlrPointLocationReference">
                <xs:sequence>
                        <xs:element name="openlrGeoCoordinate" type="D2LogicalModel:OpenlrGeoCoordinate"
                                minOccurs="0" />
                        <xs:element name="openlrPoiWithAccessPoint" type="D2LogicalModel:OpenlrPoiWithAccessPoint"
                                minOccurs="0" />
                        <xs:element name="openlrPointAlongLine" type="D2LogicalModel:OpenlrPointAlongLine"
                                minOccurs="0" />
                        <xs:element name="openlrPointLocationReferenceExtension"
                                type="D2LogicalModel:_ExtensionType" minOccurs="0" />
                </xs:sequence>
        </xs:complexType>
        
        <xs:complexType name="OpenlrPoiWithAccessPoint">
                <xs:complexContent>
                        <xs:extension base="D2LogicalModel:OpenlrBasePointLocation">
                                <xs:sequence>
                                        <xs:element name="openlrCoordinate" type="D2LogicalModel:PointCoordinates" />
                                        <xs:element name="openlrPoiWithAccessPointExtension"
                                                type="D2LogicalModel:_ExtensionType" minOccurs="0" />
                                </xs:sequence>
                        </xs:extension>
                </xs:complexContent>
        </xs:complexType>
        
        <xs:simpleType name="OpenlrSideOfRoadEnum">
                <xs:restriction base="xs:string">
                        <xs:enumeration value="onRoadOrUnknown" />
                        <xs:enumeration value="right" />
                        <xs:enumeration value="left" />
                        <xs:enumeration value="both" />
                </xs:restriction>
        </xs:simpleType>
        
        <xs:complexType name="PointCoordinates">
                <xs:sequence>
                        <xs:element name="latitude" type="D2LogicalModel:Float"
                                minOccurs="1" maxOccurs="1" />
                        <xs:element name="longitude" type="D2LogicalModel:Float"
                                minOccurs="1" maxOccurs="1" />
                        <xs:element name="pointCoordinatesExtension" type="D2LogicalModel:_ExtensionType"
                                minOccurs="0" />
                </xs:sequence>
        </xs:complexType>
        
</xs:schema>