<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.opengis.net/indoorgml/1.0/navigation" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      xmlns:gml="http://www.opengis.net/gml/3.2"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:IndoorCore="http://www.opengis.net/indoorgml/1.0/core"
      targetNamespace="http://www.opengis.net/indoorgml/1.0/navigation"
      version="1.0.2"
      elementFormDefault="qualified">
      <xs:annotation>
            <xs:documentation>
			IndoorGML is an OGC Standard. 
			Copyright (c) 2014,2015,2016  Open Geospatial Consortium.
			To obtain additional rights of use, visit http://www.opengeospatial.org/legal/.
		</xs:documentation>
      </xs:annotation>
      <xs:import namespace="http://www.opengis.net/gml/3.2" 
            schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd"/>
      <xs:import namespace="http://www.opengis.net/indoorgml/1.0/core"
            schemaLocation="http://schemas.opengis.net/indoorgml/1.0/indoorgmlcore.xsd"/>

      <!-- ====================================================================== -->
      <xs:element name="NavigableSpace" type="NavigableSpaceType" substitutionGroup="IndoorCore:CellSpace">
            <xs:annotation>
                  <xs:documentation>NavigableSpace
                  </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:complexType name="NavigableSpaceType">
            <xs:complexContent>
                  <xs:extension base="IndoorCore:CellSpaceType">
                        <xs:sequence>
                              <xs:element name="class" type="gml:CodeType"/>
                              <xs:element name="function" type="gml:CodeType"/>
                              <xs:element name="usage" type="gml:CodeType"/>
                        </xs:sequence>
                  </xs:extension>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:element name="GeneralSpace" type="GeneralSpaceType" substitutionGroup="NavigableSpace">
            <xs:annotation>
                  <xs:documentation>Denote general indoor space such as rooms, terraces, lobbies, etc.
                  </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:complexType name="GeneralSpaceType">
            <xs:complexContent>
                  <xs:extension base="NavigableSpaceType"/>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:element name="TransferSpace" type="TransferSpaceType" substitutionGroup="NavigableSpace">
            <xs:annotation>
                  <xs:documentation>Denote the space which is purposed to tranfer between spaces.
                  </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:complexType name="TransferSpaceType">
            <xs:complexContent>
                  <xs:extension base="NavigableSpaceType"/>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:element name="AnchorSpace" type="AnchorSpaceType" substitutionGroup="TransferSpace">
            <xs:annotation>
                  <xs:documentation>
AnchorSpace represents a special opening space that provides connection between an indoor space and an outdoor space. It refers to Entrance Doors.
                  </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:complexType name="AnchorSpaceType">
            <xs:complexContent>
                  <xs:extension base="TransferSpaceType"/>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:element name="ConnectionSpace" type="ConnectionSpaceType" substitutionGroup="TransferSpace">
            <xs:annotation>
                  <xs:documentation>
ConnetionSpace represents an opening space that provides passages between two indoor spaces
                  </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:complexType name="ConnectionSpaceType">
            <xs:complexContent>
                  <xs:extension base="TransferSpaceType"/>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:element name="TransitionSpace" type="TransitionSpaceType" substitutionGroup="TransferSpace">
            <xs:annotation>
                  <xs:documentation>
TransitionSpace represents a real world space that provides passage between two indoor spaces
                  </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:complexType name="TransitionSpaceType">
            <xs:complexContent>
                  <xs:extension base="TransferSpaceType"/>
            </xs:complexContent>
      </xs:complexType>
      <xs:element name="Route" type="RouteType" substitutionGroup="gml:AbstractFeature">
            <xs:annotation>
                  <xs:documentation>Route
                  </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:element name="NavigableBoundary" type="NavigableBoundaryType" substitutionGroup="IndoorCore:CellSpaceBoundary">
            <xs:annotation>
                  <xs:documentation> NavigableBoundary </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:complexType name="NavigableBoundaryType">
            <xs:complexContent>
                  <xs:extension base="IndoorCore:CellSpaceBoundaryType"/>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:element name="TransferBoundary" type="TransferBoundaryType" substitutionGroup="NavigableBoundary">
            <xs:annotation>
                  <xs:documentation> TransferBoundary </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:complexType name="TransferBoundaryType">
            <xs:complexContent>
                  <xs:extension base="NavigableBoundaryType">
                        <xs:sequence/>
                  </xs:extension>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:element name="ConnectionBoundary" type="ConnectionBoundaryType" substitutionGroup="TransferBoundary">
            <xs:annotation>
                  <xs:documentation> ConnectionBoundary </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:complexType name="ConnectionBoundaryType">
            <xs:complexContent>
                  <xs:extension base="TransferBoundaryType"/>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:element name="AnchorBoundary" type="AnchorBoundaryType" substitutionGroup="TransferBoundary">
            <xs:annotation>
                  <xs:documentation> AnchorBoundary </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:complexType name="AnchorBoundaryType">
            <xs:complexContent>
                  <xs:extension base="TransferBoundaryType"/>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:complexType name="RouteType">
            <xs:complexContent>
                  <xs:extension base="gml:AbstractFeatureType">
                        <xs:sequence>
                              <xs:element name="startRouteNode" type="RouteNodePropertyType"/>
                              <xs:element name="endRouteNode" type="RouteNodePropertyType"/>
                              <xs:element name="routeNodes" type="RouteNodesType"/>
                              <xs:element name="path" type="PathType"/>
                        </xs:sequence>
                  </xs:extension>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:complexType name="RouteNodesType">
            <xs:complexContent>
                  <xs:extension base="gml:AbstractFeatureType">
                        <xs:sequence>
                              <xs:element name="nodeMember" type="RouteNodeMemberType" minOccurs="2" maxOccurs="unbounded"/>
                        </xs:sequence>
                        <xs:attributeGroup ref="gml:AggregationAttributeGroup"/>
                  </xs:extension>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:complexType name="RouteNodeMemberType">
            <xs:complexContent>
                  <xs:extension base="gml:AbstractFeatureMemberType">
                        <xs:sequence minOccurs="1">
                              <xs:element ref="RouteNode"/>
                        </xs:sequence>
                  </xs:extension>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:complexType name="PathType">
            <xs:complexContent>
                  <xs:extension base="gml:AbstractFeatureType">
                        <xs:sequence>
                              <xs:element name="routeMember" type="RouteSegmentMemberType" minOccurs="0" maxOccurs="unbounded"/>
                        </xs:sequence>
                        <xs:attributeGroup ref="gml:AggregationAttributeGroup"/>
                  </xs:extension>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:complexType name="RouteSegmentMemberType">
            <xs:complexContent>
                  <xs:extension base="gml:AbstractFeatureMemberType">
                        <xs:sequence>
                              <xs:element ref="RouteSegment"/>
                        </xs:sequence>
                  </xs:extension>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:element name="RouteSegment" type="RouteSegmentType">
            <xs:annotation>
                  <xs:documentation>RouteSegment
                  </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:complexType name="RouteSegmentType">
            <xs:complexContent>
                  <xs:extension base="gml:AbstractFeatureType">
                        <xs:sequence>
                              <xs:element name="weight" type="xs:double"/>
                              <xs:element name="connects" type="RouteNodePropertyType" minOccurs="2" maxOccurs="2"/>
                              <xs:element name="referencedTransition" type="IndoorCore:TransitionPropertyType"/>
                              <xs:element name="geometry" type="gml:CurvePropertyType"/>
                        </xs:sequence>
                  </xs:extension>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:element name="RouteNode" type="RouteNodeType">
            <xs:annotation>
                  <xs:documentation>Route Node
                  </xs:documentation>
            </xs:annotation>
      </xs:element>
      <!-- ====================================================================== -->
      <xs:complexType name="RouteNodeType">
            <xs:complexContent>
                  <xs:extension base="gml:AbstractFeatureType">
                        <xs:sequence>
                              <xs:element name="referencedState" type="IndoorCore:StatePropertyType"/>
                              <xs:element name="geometry" type="gml:PointPropertyType"/>
                        </xs:sequence>
                  </xs:extension>
            </xs:complexContent>
      </xs:complexType>
      <!-- ====================================================================== -->
      <xs:complexType name="RouteNodePropertyType">
            <xs:sequence minOccurs="0">
                  <xs:element ref="RouteNode"/>
            </xs:sequence>
            <xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
      </xs:complexType>
      <!-- ====================================================================== -->
</xs:schema>
