(TRIAS TripInfoRequest)
Achtung: Wird per Ende 2024 abgestellt. Beginnen sie ab Mitte 2024 mit der Migration auf OJP 2.0.
Die Fahrtprognose ist ein Open Service. Die Fahrtprognose wird über VDV431 TripInfoRequest abgebildet.
Fachliche Beschreibung
Für die Verwendung der Fahrtprognose muss eine JourneyRef bekannt sein. Diese lässt sich leider nicht einfach aus dem Sollfahrplan ableiten(Fahrpläne auffindbar über die Übersicht der Fahrpläne). Am einfachsten ist es, die JourneyRef aus einem der anderen API (TripRequest oder Ankunfts- und Abfahrtsanzeiger) abzuleiten.
Wichtige Konzepte
- Haltestelle: Hierfür können auch die Datensätze DiDok oder Haltestellen beigezogen werden.
- Fahrten: Eine Fahrt ist die Beförderung von Kunden auf einem bestimmten Weg, einer bestimmten Fahrplan-Verbindung, mit einem bestimmten Verkehrsmittel, zu einer bestimmten Zeit, in eine bestimmte Richtung.
- Fahrplan: Ein Fahrplan legt im öffentlichen Personennah- und -fernverkehr und im Schienengüterverkehr den Fahrtverlauf eines Verkehrsmittels fest. Dabei notwendige Angaben sind Zugnummer, Verkehrstage, Fahrweg, Ankunfts-, Abfahrts- und Durchfahrtszeiten an den Haltestellen sowie die zulässigen Geschwindigkeiten in den einzelnen Abschnitten des Fahrwegs.
- Prognose: Die Prognose sind die in der Zukunft liegenden Verkehrszeiten eines Zuges, die ausgehende vom aktuellen Standort des Zuges berechnet werden. Dabei werden Konflikte und deren aktuell intendierten Regelungen in den nächsten x Minuten berücksichtigt. Der weitere Verlauf der Prognose wird nach einer weniger aufwendigen Methode berechnet
- Verkehrsmittel (VM): Entweder gleichbedeutend mit Fahrzeugen (Zug, Schiff, Tram, Bus) der verschiedenen Verkehrsträger oder im Sinne von «Verkehrssystem» gebraucht (öffentliches Verkehrsmittel usw.).
- DateTime in Response: Es handelt sich immer um Zulu-Zeit (d.h. UTC). Es gilt im Sommer zwei Stunden und im Winter eine Stunde dazu zu zählen.
Technische Aspekte
API Explorer
Autorisierung und Open Services
Für den Zugriff auf diese API ist ein API-Key notwendig. Es kann über das Developer Portal bezogen werden.
Das Token muss im HTTP Header als “Authorization” mitgeschickt werden.
URL für den Aufruf
API: https://api.opentransportdata.swiss/trias2020
Test-Key: 57c5dbbbf1fe4d000100001842c323fa9ff44fbba0b9b925f0c052d1
Mit dem Authorization Header und Content-Type= “text/XML” oder “application/XML”
Beispiel einer Abfrage
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<? xml version="1.0" encoding="utf-8"?> <Trias version = "1.1" xmlns="http://www.vdv.de/trias" xmlns:siri="http://www.siri.org.uk/siri" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ServiceRequest> <siri:RequestTimestamp>2020-09-30T19:53:23.659Z</siri:RequestTimestamp> <siri:RequestorRef>API-Explorer</siri:RequestorRef> <RequestPayload> <TripInfoRequest> <JourneyRef>odp:80045:Y:H:j17:3928</JourneyRef> <OperatingDayRef>2020-09-30</OperatingDayRef> <Params> <IncludeCalls>true</IncludeCalls> <IncludeService>true</IncludeService> </Params> </TripInfoRequest> </RequestPayload> </ServiceRequest> </Trias> |
Dieser Request wird als Body übermittelt.
Erläuterungen der Elemente des Requests
Relevante Elemente des Requests:
Name | Obligat? | Beschreibung | Beispiel |
JourneyRef | Ja(*) | Die Journey-Ref muss aus einer anderen Quelle hergestellt oder bezogen werden. | odp:01012::H:j16:30441 |
OperatingDayRef | Nein | Betriebstag. Wenn kein Betriebstag angegeben ist, wird der aktuelle Betriebstag verwendet | 2020-04-02T |
Params | Nein | Die weiteren Parameter des Requests | … siehe untenstehende Tabelle |
(*) Es gibt noch eine Abfrage über VehicleRef und TimeOfOperation in VDV 431. Diese sollte nicht verwendet werden, da wir die VehicleRef nicht führen.
Params – weitere Parameter des Requests:
Name | Obligat? | Beschreibung | Beispiel |
UseTimetabledDataOnly | Nein | Legt fest, ob im Resultat Informationen zu den Verkehrstagen mit ausgegeben werden sollen. Boolean. Default ist false. | false |
IncludeCalls | Nein | Legt fest, ob im Resultat die Halte der Fahrt ausgegeben werden sollen. Boolean. Default ist true.
Der gesetzte Parameter wird ignoriert. Das System verwendet immer true. |
– |
IncludePosition | Nein | Legt fest, ob im Resultat die aktuelle Position des Verkehrsmittels ausgegeben werden soll. Boolean. Default gemäss Schrift wäre true. Ist aber nicht umgesetzt => Wird nicht mitgeliefert.
Der gesetzte Parameter wird ignoriert. Das System verwendet immer true. |
– |
IncludeService | Nein | Legt fest, ob im Resultat Verkehrsmittelinformationen zur Fahrt ausgegeben werden sollen. Default ist true. | true |
Extension | Nein | Es sind keine Extensions umgesetzt. | – |
Erläuterung einer Response
Die Antwort hat folgenden grundsätzlichen Aufbau
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
<? xml version="1.0" encoding="UTF-8"?> <trias:Trias xmlns:siri="http://www.siri.org.uk/siri" xmlns:trias="http://www.vdv.de/trias" xmlns:acsb="http://www.ifopt.org.uk/acsb" xmlns:ifopt="http://www.ifopt.org.uk/ifopt" xmlns:datex2="http://datex2.eu/schema/1_0/1_0" version="1.1"> <trias:ServiceDelivery> <siri:ResponseTimestamp>2020-09-30T20:25:44Z</siri:ResponseTimestamp> <siri:ProducerRef>EFAController10.4.10.25-OJP-EFA01-P</siri:ProducerRef> <siri:Status>true</siri:Status> <trias:Language>de</trias:Language> <trias:CalcTime>18</trias:CalcTime> <trias:DeliveryPayload> <trias:TripInfoResponse> <trias:TripInfoResult> <trias:OnwardCall> <trias:StopPointRef>8507000</trias:StopPointRef> <trias:StopPointName> <trias:Text>Bern</trias:Text> <trias:Language>de</trias:Language> </trias:StopPointName> <trias:ServiceDeparture> <trias:TimetabledTime>2020-10-14T07:22:00Z</trias:TimetabledTime> <trias:EstimatedTime>2020-10-14T07:22:00Z</trias:EstimatedTime> </trias:ServiceDeparture> <trias:StopSeqNumber>1</trias:StopSeqNumber> </trias:OnwardCall> <!-- weitere Calls --> <trias:Service> <trias:OperatingDayRef>2020-10-14</trias:OperatingDayRef> <trias:JourneyRef>ojp:91008:E:H:j20:17:8093</trias:JourneyRef> <trias:LineRef>ojp:91008:E:H</trias:LineRef> <trias:DirectionRef>outward</trias:DirectionRef> <trias:Mode> <trias:PtMode>rail</trias:PtMode> <trias:RailSubmode>local</trias:RailSubmode> <trias:Name> <trias:Text>S 8093</trias:Text> <trias:Language>de</trias:Language> </trias:Name> </trias:Mode> <trias:PublishedLineName> <trias:Text>8</trias:Text> <trias:Language>de</trias:Language> </trias:PublishedLineName> <trias:OperatorRef>ojp:88</trias:OperatorRef> <trias:OriginStopPointRef>8507000</trias:OriginStopPointRef> <trias:OriginText> <trias:Text>Bern</trias:Text> <trias:Language>de</trias:Language> </trias:OriginText> <trias:DestinationStopPointRef>8508059</trias:DestinationStopPointRef> <trias:DestinationText> <trias:Text>Solothurn</trias:Text> <trias:Language>de</trias:Language> </trias:DestinationText> </trias:Service> </trias:TripInfoResult> </trias:TripInfoResponse> </trias:DeliveryPayload> </trias:ServiceDelivery> </trias:Trias> |
Die wesentlichen Elemente der Response finden sich in TripInfoResultStructure:
Name | Obligat? | Beschreibung | Beispiel |
PreviousCall | Nein / Mehrfach | Bereits zurückgelegte Halte. Umfasst auch den aktuellen Halt, falls sich die Fahrt gerade an einer Haltestelle befindet. | Eigene Struktur … siehe nachfolgende Tabelle |
CurrentPosition | Nein | Aktuelle Position des Fahrzeugs. Ist nicht umgesetzt. | – |
OnwardCall | Nein / Mehrfach | Die noch bevorstehenden Halte der Fahrt | Eigene Struktur … siehe nachfolgende Tabelle |
Service | Nein | Angaben zum Verkehrsmittel | Eigene Struktur … siehe weiter unten |
OperatingDays | Nein | Verkehrstage für diese VerbindungIst nicht umgesetzt. | – |
OperatingDaysDescription | Nein | Menschenlesbare Beschreibung der Verkehrstage, z. B. „Montag bis Freitag“ oder „Sonn- und Feiertag“.
Ist nicht umgesetzt. |
– |
PreviousCall und OnwardCall sind wie folgt aufgebaut:
Name | Obligat? | Beschreibung | Beispiel | ||
StopPointRef | Ja | Referenz auf einen Code für eine Haltestelle. | 857000 | ||
StopPointName | Ja | Name der Haltestelle für Fahrgastinformation.Achtung: Language ist immer DE. |
|
||
PlannedBay | Nein | Name des Steigs/Haltestelle, wo in das Fahrzeug ein- oder ausgestiegen werden muss (bei Verwendung in Zusammenhang mit einer konkreten Verbindungsauskunft, wenn in StopPointName ein allgemeiner Name angegeben ist, ähnlich Haltestellen-name). Nach Planungsstand. |
|
||
EstimatedBay | Nein | Name des Steigs/Haltestelle, wo in das Fahrzeug ein- oder ausgestiegen werden muss (bei Verwendung in Zusammenhang mit einer konkreten Verbindungsauskunft, wenn in StopPointName ein allgemeiner Name angegeben ist, ähnlich Haltestellen-name). Nach letztem Prognosestand. |
|
||
ServiceArrival | Nein | Ankunftszeiten |
|
||
TimetabledTime | Ja | Ankunftszeit nach Fahrplan
Immer in Zulu-Time |
2020-04-02T11:20:00Z | ||
RecordedAtTime | Nein | Tatsächliche Ankunftszeit
Wird nicht verwendet |
– | ||
EstimatedTime | Nein | Erwartete Ankunftszeit
Nur wenn Echtzeitdaten vorhanden sind Bei Teilen der Fahrt in der Vergangenheit handelt es sich um die letzte Prognose oder um Ist-Daten. Gegenwärtig wird die Echtzeit nach Abfahrt gelöscht. |
2020-04-02T11:20:00Z | ||
ServiceDeparture | Nein | Abfahrtszeiten | Wie ServiceArrival, ausser dass es sich immer um Abfahrtszeiten handelt. | ||
StopSequenceNumber | Ja | Die Sequenznummer des Haltes | 4 | ||
DemandStop | Nein | Halt auf Verlangen. Fahrzeug bedient diesen Halt nur nach Voranmeldung. Boolean | Nicht verfügbar | ||
UnplannedStop | Nein | Halt, der laut Planung nicht vorgesehen war. Boolean |
|
||
NotServicedStop | Nein | Entgegen der Planung findet kein Halt statt (Ausfälle). |
|
||
SituationFullRef | Nein, Mehrere | Verweis auf eine Störungsnachricht. Diese Nachricht kann im ResponseContext der Antwort zu finden sein oder auf anderem Wege bekannt gemacht werden. | Nicht umgesetzt |
Service
Die Struktur “Service” ist hier beschrieben: Service (VDV 431)
Fehler / Probleme
Die Antwort enthält eine “ErrorMessage”, wenn es Probleme mit der Ausführung des Requests gab:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<? xml version="1.0" encoding="UTF-8"?> <trias:Trias xmlns:siri="http://www.siri.org.uk/siri" xmlns:trias="http://www.vdv.de/trias" xmlns:acsb="http://www.ifopt.org.uk/acsb" xmlns:ifopt="http://www.ifopt.org.uk/ifopt" xmlns:datex2="http://datex2.eu/schema/1_0/1_0" version="1.1"> <trias:ServiceDelivery> <siri:ResponseTimestamp>2020-09-30T20:01:37Z</siri:ResponseTimestamp> <siri:ProducerRef>EFAController10.4.10.25-OJP-EFA01-P</siri:ProducerRef> <siri:Status>true</siri:Status> <trias:Language>de</trias:Language> <trias:CalcTime>15</trias:CalcTime> <trias:DeliveryPayload> <trias:TripInfoResponse> <trias:ErrorMessage> <trias:Code>-1</trias:Code> <trias:Text> <trias:Text>TRIPINFO_NOJOURNEYFOUND</trias:Text> <trias:Language>de</trias:Language> </trias:Text> </trias:ErrorMessage> </trias:TripInfoResponse> </trias:DeliveryPayload> </trias:ServiceDelivery> </trias:Trias> |
Anmerkungen
Die folgenden Angaben sind für externe Entwickler wichtig:
- Es wird immer mit Zulu-Time gearbeitet.
- Die Haltestellen können der Didok-Liste entnommen werden.
- Der Aufbau der JourneyRef ist nicht trivial. Sie kann auch aus den anderen Diensten abgeleitet werden.
Weiterführende Angaben
- Allgemeine Angaben zu Autorisierung/API-Key: Developer Dashboard
- TRIAS-Dokumentation: https://www.vdv.de/ip-kom-oev.aspx
- Ausführliche Dokumentation (PDF) des TRIAS-Dienstes: https://www.vdv.de/431-2sds-v1.1.pdfx
- XSD: https://www.vdv.de/trias-xsd-v1.1.zipx?forced=true