<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xsd:include schemaLocation="types/route.xsd"/>
<xsd:include schemaLocation="additional_file.xsd"/>
<xsd:element name="snapshot">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="rngState" type="rngStateType" minOccurs="0"/>
<xsd:element name="edgeControl" type="edgeControlState" minOccurs="0"/>
<xsd:element name="delay" type="delayStateType" minOccurs="1"/>
<xsd:element name="vTypeDistribution" type="vTypeDistributionStateType" minOccurs="0"/>
<xsd:element name="routeDistribution" type="routeDistributionStateType" minOccurs="0"/>
<xsd:element name="vType" type="vTypeType" minOccurs="0"/>
<xsd:element name="vehicle" type="vehicleStateType" minOccurs="0"/>
<xsd:element name="transportables" type="transportablesStateType" minOccurs="0"/>
<xsd:element name="route" type="routeStateType" minOccurs="0"/>
<xsd:element name="flowState" type="flowStateType" minOccurs="0"/>
<xsd:element name="lane" type="laneStateType" minOccurs="0"/>
<xsd:element name="segment" type="segmentStateType" minOccurs="0"/>
<xsd:element name="vehicleTransfer" type="vehicleTransferType" minOccurs="0"/>
<xsd:element name="railSignalConstraintTracker" type="railSignalConstraintTrackerType" minOccurs="0"/>
<xsd:element name="railSignalConstraints" type="railSignalConstraintsType" minOccurs="0"/>
<xsd:element name="tlLogic" type="tlStateType" minOccurs="0"/>
<xsd:element name="driveWay" type="driveWayStateType" minOccurs="0"/>
<xsd:element name="subDriveWay" type="driveWayStateType" minOccurs="0"/>
<xsd:element name="routingEngine" type="routingEngineType" minOccurs="0"/>
</xsd:choice>
<xsd:attribute name="version" type="xsd:string"/>
<xsd:attribute name="time" type="timeType"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="constraints" type="boolType"/>
<xsd:attribute name="rail" type="boolType"/>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="rngStateType">
<xsd:choice maxOccurs="unbounded">
<xsd:element name="rngLane" type="rngLaneType" minOccurs="0"/>
</xsd:choice>
<xsd:attribute name="default" type="xsd:string" use="required"/>
<xsd:attribute name="routeHandler" type="xsd:string" use="optional"/>
<xsd:attribute name="insertionControl" type="xsd:string" use="optional"/>
<xsd:attribute name="device" type="xsd:string" use="optional"/>
<xsd:attribute name="device.btreceiver" type="xsd:string" use="optional"/>
<xsd:attribute name="device.toc" type="xsd:string" use="optional"/>
<xsd:attribute name="driverState" type="xsd:string" use="optional"/>
</xsd:complexType>
<xsd:complexType name="edgeControlState">
<xsd:attribute name="lanes" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="rngLaneType">
<xsd:attribute name="index" type="xsd:int" use="required"/>
<xsd:attribute name="state" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="delayStateType">
<xsd:attribute name="number" type="xsd:int" use="required"/>
<xsd:attribute name="begin" type="xsd:integer" use="required"/>
<xsd:attribute name="end" type="xsd:integer" use="required"/>
<xsd:attribute name="depart" type="floatType" use="required"/>
<xsd:attribute name="time" type="nonNegativeFloatType" use="required"/>
</xsd:complexType>
<xsd:complexType name="vTypeDistributionStateType">
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="vTypes" type="xsd:string" use="required"/>
<xsd:attribute name="probabilities" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="routeDistributionStateType">
<xsd:complexContent>
<xsd:extension base="routeDistributionType">
<xsd:attribute name="state" type="xsd:string" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="flowStateType">
<xsd:complexContent>
<xsd:extension base="flowType">
<xsd:attribute name="index" type="xsd:nonNegativeInteger" use="required"/>
<xsd:attribute name="done" type="xsd:nonNegativeInteger" use="required"/>
<xsd:attribute name="next" type="timeType" use="optional"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="vehicleStateType">
<xsd:sequence>
<xsd:element name="stop" type="stopType" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="param" type="paramType" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="device" type="deviceType" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="rem" type="remType" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="route" type="xsd:string"/>
<xsd:attribute name="reroute" type="boolType"/>
<xsd:attribute name="fromTaz" type="xsd:string"/>
<xsd:attribute name="toTaz" type="xsd:string"/>
<xsd:attribute name="type" type="xsd:string"/>
<xsd:attribute name="depart" type="departType" use="required"/>
<xsd:attribute name="color" type="colorType"/>
<xsd:attribute name="departLane" type="departLaneType"/>
<xsd:attribute name="departPos" type="departPosType"/>
<xsd:attribute name="departSpeed" type="departSpeedType"/>
<xsd:attribute name="departEdge" type="routeIndexType"/>
<xsd:attribute name="arrivalEdge" type="routeIndexType"/>
<xsd:attribute name="arrivalLane" type="arrivalLaneType"/>
<xsd:attribute name="arrivalPos" type="arrivalPosType"/>
<xsd:attribute name="arrivalPosRandomized" type="nonNegativeFloatType"/>
<xsd:attribute name="arrivalSpeed" type="arrivalSpeedType"/>
<xsd:attribute name="departPosLat" type="departPosLatType"/>
<xsd:attribute name="arrivalPosLat" type="arrivalPosLatType"/>
<xsd:attribute name="arrival" type="timeType"/>
<xsd:attribute name="routeLength" type="nonNegativeFloatType"/>
<xsd:attribute name="line" type="xsd:string"/>
<xsd:attribute name="personNumber" type="xsd:nonNegativeInteger"/>
<xsd:attribute name="containerNumber" type="xsd:nonNegativeInteger"/>
<xsd:attribute name="insertionChecks" type="xsd:string"/>
<xsd:attribute name="parkingBadges" type="xsd:string"/>
<xsd:attribute name="pos" type="xsd:string"/>
<xsd:attribute name="posLat" type="floatType"/>
<xsd:attribute name="speed" type="xsd:string"/>
<xsd:attribute name="angle" type="floatType"/>
<xsd:attribute name="speedFactor" type="nonNegativeFloatType"/>
<xsd:attribute name="waitingTime" type="xsd:string"/>
<xsd:attribute name="distance" type="xsd:string" use="required"/>
<xsd:attribute name="state" type="xsd:string" use="required"/>
<xsd:attribute name="lcState" type="xsd:string" use="optional"/>
</xsd:complexType>
<xsd:complexType name="deviceType">
<xsd:attribute name="id" type="xsd:string" use="required"/>
<!-- device optional if vehicle has not departed yet -->
<xsd:attribute name="state" type="xsd:string" use="optional"/>
<!-- device specific attributes -->
<xsd:attribute name="exitTimes" type="xsd:string" use="optional"/>
<xsd:attribute name="edge" type="xsd:string" use="optional"/>
</xsd:complexType>
<xsd:complexType name="remType">
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="time" type="timeType" use="required"/>
<xsd:attribute name="pos" type="xsd:float" use="required"/>
</xsd:complexType>
<xsd:complexType name="transportablesStateType">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="person" type="personStateType" minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="container" type="containerStateType" minOccurs="0" maxOccurs="unbounded"/>
</xsd:choice>
<xsd:attribute name="type" type="xsd:string" use="required"/>
<xsd:attribute name="state" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="personStateType">
<xsd:complexContent>
<xsd:extension base="personType">
<xsd:attribute name="state" type="xsd:string" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="containerStateType">
<xsd:complexContent>
<xsd:extension base="containerType">
<xsd:attribute name="state" type="xsd:string" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="routeStateType">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="stop" type="stopType"/>
<xsd:element name="param" type="paramType"/>
</xsd:choice>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="state" type="xsd:string" use="required"/>
<xsd:attribute name="edges" type="xsd:string" use="required"/>
<xsd:attribute name="color" type="colorType"/>
</xsd:complexType>
<xsd:complexType name="laneStateType">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="vehicles" type="vehiclesType" minOccurs="0" maxOccurs="1"/>
<xsd:element name="link" type="linkType" minOccurs="0" maxOccurs="unbounded"/>
</xsd:choice>
<xsd:attribute name="id" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="vehiclesType">
<xsd:attribute name="value" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="linkType">
<xsd:sequence>
<xsd:element name="approaching" type="approachingType" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="to" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="approachingType">
<xsd:attribute name="id" type="idType" use="required"/>
<xsd:attribute name="arrivalTime" type="xsd:integer" use="required"/>
<xsd:attribute name="arrivalSpeed" type="floatType" use="required"/>
<xsd:attribute name="departSpeed" type="floatType" use="required"/>
<xsd:attribute name="request" type="boolType" use="required"/>
<xsd:attribute name="arrivalTimeBraking" type="xsd:integer" use="optional"/>
<xsd:attribute name="arrivalSpeedBraking" type="floatType" use="required"/>
<xsd:attribute name="waitingTime" type="xsd:integer" use="required"/>
<xsd:attribute name="distance" type="floatType" use="required"/>
<xsd:attribute name="posLat" type="floatType" use="optional"/>
</xsd:complexType>
<xsd:complexType name="segmentStateType">
<xsd:sequence>
<xsd:element name="vehicles" type="queueType" minOccurs="1" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="queueType">
<xsd:attribute name="time" type="xsd:long" use="required"/>
<xsd:attribute name="blockTime" type="xsd:long" use="required"/>
<xsd:attribute name="value" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="vehicleTransferType">
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="depart" type="xsd:integer" use="required"/>
<xsd:attribute name="parking" type="xsd:string" use="optional"/>
<xsd:attribute name="jump" type="boolType" use="optional"/>
</xsd:complexType>
<xsd:complexType name="railSignalConstraintTrackerType">
<xsd:attribute name="lane" type="xsd:string" use="required"/>
<xsd:attribute name="index" type="xsd:int" use="required"/>
<xsd:attribute name="state" type="xsd:string" use="required"/>
</xsd:complexType>
<xsd:complexType name="tlStateType">
<xsd:attribute name="id" type="idType" use="required"/>
<xsd:attribute name="programID" type="xsd:string" use="required"/>
<xsd:attribute name="phase" type="xsd:int" use="required"/>
<xsd:attribute name="duration" type="xsd:integer" use="required"/>
<xsd:attribute name="active" type="boolType"/>
</xsd:complexType>
<xsd:complexType name="driveWayStateType">
<xsd:attribute name="id" type="idType" use="required"/>
<xsd:attribute name="edges" type="xsd:string" use="required"/>
<xsd:attribute name="vehicles" type="xsd:string" use="optional"/>
</xsd:complexType>
<xsd:complexType name="routingEngineType">
<xsd:sequence>
<xsd:element name="edge" type="routingEngineEdgeType" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="last" type="xsd:int" use="required"/>
<xsd:attribute name="index" type="xsd:int" use="required"/>
</xsd:complexType>
<xsd:complexType name="routingEngineEdgeType">
<xsd:attribute name="id" type="idType" use="required"/>
<xsd:attribute name="speed" type="floatType" use="required"/>
<xsd:attribute name="pastSpeed" type="xsd:string" use="optional"/>
<xsd:attribute name="bikeSpeed" type="floatType" use="optional"/>
<xsd:attribute name="pastBikeSpeed" type="xsd:string" use="optional"/>
</xsd:complexType>
</xsd:schema>