<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://clients.multimap.com/API"
    xmlns="http://clients.multimap.com/API">
    
    <xs:include schemaLocation="http://clients.multimap.com/Schema/common_1.2.xsd" />
        
    <xs:element name="Route" type="RouteType" />
    
    <xs:complexType name="RouteType">
        <xs:sequence>
            <xs:choice>
                <xs:element name="Error" type="PreFlightErrorType" minOccurs="1" maxOccurs="unbounded" form="qualified" />
                <xs:sequence>
                    <xs:element name="Duration" type="DurationType" form="qualified"/> 
                    <xs:element name="Distance" type="DistanceType" form="qualified"/>
                    <xs:element name="Bounds" type="BoundsType" minOccurs="0" maxOccurs="1" form="qualified"/>
                    <xs:element name="Emissions" type="EmissionsType" minOccurs="0" maxOccurs="1" form="qualified"/>
                    <xs:element name="Stages" type="StagesType" form="qualified"/>
                    <xs:element name="Vector" type="xs:string" minOccurs="0" maxOccurs="1" form="qualified"/>
                    <xs:element name="Copyright" type="xs:string" form="qualified"/>
                    <xs:element name="Disclaimer" type="xs:anyURI" form="qualified"/>
                </xs:sequence>
            </xs:choice>
        </xs:sequence>
        <xs:attribute name="key" use="optional" type="xs:string"/>
        <xs:attribute name="reverseKey" use="optional" type="xs:string"/>
    </xs:complexType>
    
    <xs:complexType name="StagesType">
        <xs:sequence>
            <xs:element name="Stage" minOccurs="1" maxOccurs="unbounded" type="StageType" form="qualified"/>
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="EmissionsType">
        <xs:sequence>
            <xs:element name="Emission" minOccurs="1" maxOccurs="unbounded" form="qualified">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:double">
                            <xs:attribute name="transport_type" use="required" type="xs:string"/>
                            <xs:attribute name="emission_factor" use="required" type="xs:string"/>
                            <xs:attribute name="assumed_mpg" use="optional" type="xs:string"/>
                            <xs:attribute name="assumed_kpg" use="optional" type="xs:string"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>            
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="StageType">
        <xs:sequence>
            <xs:element name="StartAddress" type="AddressType" minOccurs="0" form="qualified"/>
            <xs:element name="StartPoint" type="PointType" form="qualified"/>
            <xs:element name="EndAddress" type="AddressType" minOccurs="0" form="qualified"/>
            <xs:element name="EndPoint" type="PointType" form="qualified"/>
            <xs:element name="Duration" type="DurationType" form="qualified"/>
            <xs:element name="Distance" type="DistanceType" form="qualified"/>
            <xs:element name="Bounds" type="BoundsType" minOccurs="0" maxOccurs="1" form="qualified"/>
            <xs:element name="Steps" type="StepsType" minOccurs="0" maxOccurs="1" form="qualified"/>
        </xs:sequence>
        <xs:attribute name="id" use="required" type="xs:int"/>
        <xs:attribute name="stepCount" use="optional" type="xs:int"/>
        <xs:attribute name="mode" use="optional" type="xs:string" />
        <xs:attribute name="summary" use="optional" type="xs:string"/>
    </xs:complexType>
    
    
    <xs:complexType name="StepsType">
        <xs:sequence>
            <xs:element name="Step" type="StepType" maxOccurs="unbounded" minOccurs="1" form="qualified"/>
        </xs:sequence>
    </xs:complexType>    
    
    
    <xs:complexType name="StepType">
        <xs:sequence>
            <xs:element name="Instruction" type="xs:string" form="qualified"/>
            <xs:element name="RoadName" type="xs:string" form="qualified"/>
            <xs:element name="RoadNumber" type="xs:string" form="qualified"/>
            <xs:element name="Exit" minOccurs="0">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="type" use="required" type="xs:string"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>                
            </xs:element>
            <xs:element name="Distance" type="DistanceType" form="qualified"/>
            <xs:element name="Duration" type="DurationType" form="qualified"/>
            <xs:element name="Bearing" type="xs:string" form="qualified"/>
            <xs:element name="TurnDirection" minOccurs="0" type="xs:string" form="qualified"/>
            <xs:element name="Actions" minOccurs="1" form="qualified">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Action" minOccurs="1" type="xs:string" maxOccurs="unbounded" form="qualified"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="Toll" minOccurs="0" type="xs:string" form="qualified"/>
            <xs:element name="Information" minOccurs="0" form="qualified">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Info" minOccurs="1" maxOccurs="unbounded" form="qualified">
                            <xs:complexType>
                                <xs:simpleContent>
                                    <xs:extension base="xs:string">
                                        <xs:attribute name="type" use="required" type="xs:string"/>
                                    </xs:extension>
                                </xs:simpleContent>
                            </xs:complexType>                              
                        </xs:element>
                    </xs:sequence> 
                </xs:complexType>
            </xs:element>
            <xs:element name="StartPoint" type="PointType" form="qualified"/>
            <xs:element name="EndPoint" type="PointType" form="qualified"/>
        </xs:sequence>
    </xs:complexType>
        
</xs:schema>

