(TRIAS TripRequest)
Achtung: Wird per Ende 2024 abgestellt. Beginnen sie ab Mitte 2024 mit der Migration auf OJP 2.0.
TripRequest ist ein Open Service. Es handelt sich um eine spezielle Form der Fahrtprognose, die über VDV431 TripRequest abgebildet wird.
Fachliche Beschreibung
TripRequest ist ein Routenplaner. Als Input werden ein Starthalt und ein Zielhalt erwartet. Abfahrts- und Ankunftszeit können auch angegeben werden.
Die Umsetzung der SBB erlaubt es nur, nach direkten Fahrten zu suchen. Z.B.:
- Bern – Olten findet eine Antwort,_ da es direkte Fahrten gibt.
- Lausanne – Chur findet keine, da man immer mind. 1 mal umsteigen muss.
Wichtige Konzepte
- Haltestellen: Hierfür können auch die Datensätze DiDok beigezogen werden.
- Fahrten: Eine Fahrt ist die Beförderung von Kunden auf einem bestimmten Weg, einer bestimmten Fahrplan-Verbindung, mit einem bestimmten Verkehrsmittel-Fahrt, 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
Für den vorliegenden TripRequest-Dienst kann der Entwickler Start- und Zielhaltestelle (DiDok-ID) und optional für einen zukünftigen Zeitpunkt (Default = jetzt) die entsprechenden Echtzeitdaten abfragen. Es wird eine Echtzeitinformation geliefert, sofern vorhanden.
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 |
<? 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-30T11:42:03.007Z</siri:RequestTimestamp> <siri:RequestorRef>API-Explorer</siri:RequestorRef> <RequestPayload> <TripRequest> <Origin> <LocationRef> <StopPointRef>8500320</StopPointRef> </LocationRef> <DepArrTime>2020-09-30T01:02:03</DepArrTime> </Origin> <Destination> <LocationRef> <StopPointRef>8500322</StopPointRef> </LocationRef> </Destination> <Params> <NumberOfResults>1</NumberOfResults> <IncludeTrackSections>true</IncludeTrackSections> <IncludeLegProjection>true</IncludeLegProjection> <IncludeIntermediateStops>true</IncludeIntermediateStops> </Params> </TripRequest> </RequestPayload> </ServiceRequest> </Trias> |
Dieser Request wird als Body übermittelt.
Erläuterungen der Elemente des Requests
Der Request hat die folgenden zentralen Elemente:
Name | Obligat? | Beschreibung | Beispiel | ||
Origin | Ja | Ortsdaten für den Abfahrtsort |
|
||
LocationRef | Ja | – | |||
StopPointRef | Ja | Die Haltestelle als Didok-Code. | 8500320 | ||
DepArrTime | Nein | Abfahrts- oder Ankunftszeit. Ohne Zeitangabe wird die aktuelle Uhrzeit verwendet. | 2020-08-01T09:11:40 | ||
Via | Nein, Mehrere | Ein oder mehrere Via-Orte. Die angegebenen Via-Orte müssen in der vorgegebenen Reihenfolge erreicht werden. Der Server darf eine Via-Haltestelle durch eine äquivalente Haltestelle ersetzen
Achtung: Im gegenwärtigen System nicht umgesetzt. |
– | ||
NoChangeAt | Nein, Mehrere | Gibt Haltestellen an, an denen nicht umgestiegen werden darf.
Achtung: Im gegenwärtigen System nicht umgesetzt. |
– | ||
Destination | Ja | Ortsdaten für den Zielort
Hat denselben Aufbau wie Origin |
– | ||
Params | Nein | … siehe nachfolgende Tabelle | – |
Aufbau von Params:
Name | Obligat? | Beschreibung | Beispiel |
IncludeTrackSections | Nein | Die TrackSections werden angezeigt. Default = true.
Nur teilweise umgesetzt: immer nur ein Track, also nicht speziell interessant. |
true |
IncludeLegProjection | Nein | Achtung: Im gegenwärtigen System nicht umgesetzt. | true |
IncludeIntermediateStops | Nein | Umgesetzt, aber keine intermediate Stops angezeigt. | true |
NumberOfResults | Nein | Anzahl der Verbindungsauskünfte, die der Benutzer mindestens erwartet. Default = 3 und es werden immer wenigstens 3 ausgegeben, auch wenn der Wert tiefer ist. | 20 |
Die folgenden weiteren Parameter gemäss VDV431 sind nicht umgesetzt:
- PtModeFilter: Filter nach Verkehrsmitteltypen
- LineFilter: Erlaubte Linien (ggf. verfeinert auf Richtungen)
- OperatorFilter: Filter nach Verkehrsunternehmen
- NoSingleStep: Legt fest, ob der Benutzer eine Stufe bewältigen kann. Falls nein, wird dieser Parameter auf true gesetzt.
- NoStairs: Legt fest, ob der Benutzer eine Treppe bewältigen kann. Falls nein, wird dieser Parameter gesetzt.
- NoEscalator: Legt fest, ob der Benutzer eine Rolltreppe benutzen kann. Falls nein, wird dieser Parameter gesetzt.
- NoElevator: legt fest, ob der Benutzer einen Aufzug benutzen kann. Falls nein, wird dieser Parameter gesetzt.
- NoRamp: Legt fest, ob der Benutzer eine Rampe bewältigen kann. Falls nein, wird dieser Parameter gesetzt.
- LevelEntrace: Legt fest, ob der Benutzer beim Ein- und Aussteigen in und aus Fahrzeugen einen ebenen Zugang benötigt. Dazu reicht u.U. auch ein Hublift am Fahrzeug oder am Bahnsteig. Falls der ebene Zugang notwendig ist, wird dieser Parameter gesetzt.
- BikeTransport: Legt fest, ob der Benutzer ein Fahrrad an Bord der Verkehrsmittel mitnehmen will. Falls ja, wird dieser Parameter gesetzt.
- WalkSpeed: Veränderung der Standardgehgeschwindigkeit in Prozent. Der Wert 100 stellt den Standard dar. Werte kleiner 100 stellen eine langsamere Geschwindigkeit dar, Werte grösser 100 eine schnellere.
- IgnoreRealtime Data: Wenn dieser Parameter gesetzt ist, sollen in der Verbindungssuche keine Echtzeitdaten oder Störungsinformationen sondern nur Sollfahrplandaten berücksichtigt werden.
- ImmediateTripStart: Wenn dieser Parameter gesetzt ist, soll die zu suchende Verbindung unmittelbar an der angegeben Startsituation beginnen. Eine Optimierung der Abfahrtszeit am Start nach der Regel “Starte so spät wie möglich, solange nur die gleiche Ankunftszeit am Ziel gewährleistet ist”, ist dann nicht notwendig.
- InterchangeLimit: Anzahl der maximal zugelassenen Umsteigevorgänge. Achtung: Dieser Parameter wird ignoriert.
- AlgorithmType: Art der Zielfunktion, nach der der Algorithmus die Verbindung optimieren soll: fastest, minChanges, leastWalking, leastCost
- ItModesToCover: Für jeden IV-Typ in dieser Liste soll eine eigene monomodale Verbindung gefunden werden – zusätzlich zu den intermodalen Verbindungen.
- IncludeTurnDescription: Legt fest, ob im Resultat Routenhinweise mit Abbiegeempfehlungen mit ausgegeben werden sollen. Default ist false. Parameter wird ignoriert.
- IncludeAccessibilitiy: Legt fest, ob im Resultat Informationen zur Barrierefreiheit mit ausgegeben werden sollen. Default ist false. Parameter wird ignoriert.
- IncludeFares: Legt fest, ob im Resultat Tarifinformationen mit ausgegeben werden sollen. Default ist false. Parameter wird ignoriert.
- IncludeOperatingDays: Legt fest, ob im Resultat Informationen zu den Verkehrstagen mit ausgegeben werden sollen. Default ist false.
- FaresParam: Parameter für die Tarifermittlung. Parameter werden ignoriert.
- Extension: Erweiterungen. Keine 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 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
<? 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-30T11:25:56Z</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>72</trias:CalcTime> <trias:DeliveryPayload> <trias:TripResponse> <trias:TripResponseContext> <trias:Situations></trias:Situations> </trias:TripResponseContext> <trias:TripResult> <trias:ResultId>ID-2BE4715E-B8EA-4550-940F-471B34CA2D60</trias:ResultId> <trias:Trip> <trias:TripId>ID-6A87028D-B0B9-4302-B7B8-7483FC31A0F4</trias:TripId> <trias:Duration>PT15M</trias:Duration> <trias:StartTime>2020-09-30T10:20:00Z</trias:StartTime> <trias:EndTime>2020-09-30T10:35:00Z</trias:EndTime> <trias:Interchanges>0</trias:Interchanges> <trias:Distance>10724</trias:Distance> <trias:TripLeg> <trias:LegId>1</trias:LegId> <trias:TimedLeg> <trias:LegBoard> <trias:StopPointRef>8572748</trias:StopPointRef> <trias:StopPointName> <trias:Text>Stein-Säckingen, Bahnhof</trias:Text> <trias:Language>de</trias:Language> </trias:StopPointName> <trias:PlannedBay> <trias:Text>C</trias:Text> <trias:Language>de</trias:Language> </trias:PlannedBay> <trias:ServiceDeparture> <trias:TimetabledTime>2020-09-30T10:20:00Z</trias:TimetabledTime> </trias:ServiceDeparture> <trias:StopSeqNumber>1</trias:StopSeqNumber> </trias:LegBoard> <!-- weitere Legs --> <trias:Service> <trias:OperatingDayRef>2020-09-30</trias:OperatingDayRef> <trias:JourneyRef>ojp:92033:Y:R:j20:41:37243</trias:JourneyRef> <trias:LineRef>ojp:92033:Y:R</trias:LineRef> <trias:DirectionRef>return</trias:DirectionRef> <trias:Mode> <trias:PtMode>bus</trias:PtMode> <trias:BusSubmode>localBus</trias:BusSubmode> <trias:Name> <trias:Text>Bus</trias:Text> <trias:Language>de</trias:Language> </trias:Name> </trias:Mode> <trias:PublishedLineName> <trias:Text></trias:Text> <trias:Language>de</trias:Language> </trias:PublishedLineName> <trias:OperatorRef>ojp:7000</trias:OperatorRef> <trias:Attribute> <trias:Text> <trias:Text>VELOS: Keine Beförderung möglich</trias:Text> <trias:Language>de</trias:Language> </trias:Text> <trias:Code>A__VN</trias:Code> </trias:Attribute> <!-- weitere Attributes --> <trias:OriginText> <trias:Text></trias:Text> <trias:Language>de</trias:Language> </trias:OriginText> <trias:DestinationText> <trias:Text>Laufenburg, Bahnhof</trias:Text> <trias:Language>de</trias:Language> </trias:DestinationText> </trias:Service> </trias:TimedLeg> </trias:TripLeg> </trias:Trip> </trias:TripResult> </trias:TripResponse> </trias:DeliveryPayload> </trias:ServiceDelivery> </trias:Trias> |
Die Antwort enthält die folgenden Elemente
- TripResponse: Die Antwort selber
- Sie enthält einzelne TripResults.
Trip
Name | Obligat? | Beschreibung | Beispiel |
ResultID | Ja | ID für interne Zwecke | ID-95725E00-4D45-4651-99A7-3BB4AFFA4E0D |
TripID | Ja | ID für interne Zwecke | ID-95725E00-4D45-4651-99A7-3BB4AFFA4E0D |
Duration | Ja | Gesamtdauer in Minuten | 7 |
StartTime | Ja | Startzeit des Trips in Zuluzeit | 2020-08-01T07:19:00Z |
EndTime | Ja | Endzeit des Trips in Zuluzeit | 2020-08-01T07:26:00Z |
Interchanges | Ja | Anzahl Umsteigevorgänge | 0 |
TripLeg
Name | Obligat? | Beschreibung | Beispiel | ||
LegID | Ja | Laufnummer des Legs
In der Umsetzung der SBB immer 1. |
1 | ||
TimedLeg | Ja | VDV431 verwendet verschiedene Typen von Legs. In der aktuellen Umsetzung handelt es sich immer um TimedLegs. | – | ||
LegBoard | Ja | Der Startort des Legs | – | ||
StopPointRef | Ja | Didok-Code | 8500320 | ||
StopPointName | Ja | Bezeichnung des Didok-Codes. Achtung: Sprache ist immer DE. | – | ||
ServiceDeparture | Ja | Abfahrtszeitstruktur | – | ||
TimetabledTime | Ja | Abfahrtszeit gemäss Fahrplan | 2020–08–01T07:19:00Z | ||
EstimatedTime | Nein | Abfahrtszeit gemäss Prognose. Bei Teilen der Fahrt in der Vergangenheit handelt es sich um die letzte Prognose oder um Ist-Daten. | 2020–08–01T07:19:00Z | ||
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 Haltestellenname). Nach Planungsstand. |
|
||
Planned Bay | 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 Haltestellenname). Nach letztem Prognosestand. |
|
||
StopSequenceNumber | Ja | Sequenznummer des Stops | 1 | ||
LegIntermediate | Nein | Gleiche Struktur wie LegBoard für Zwischenhalt. Enthält sowohl ServiceDeparture wie auch ServiceArrival als Zeiten. | – | ||
LegAlight | Ja | Gleiche Struktur wie LegBoard für den Endhalt. Enthält nur Servicearrival als Zeit. | – | ||
Service | Ja | Die Angaben zum Service für dieses Leg | – | ||
LegTrack | Nein | Detaillierter (geometrischer) Verlauf. | – |
Service
Die Struktur “Service” ist hier beschrieben.
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-30T13:36:50Z</siri:ResponseTimestamp> <siri:ProducerRef>EFAController10.4.10.25-OJP-EFA02-P</siri:ProducerRef> <siri:Status>true</siri:Status> <trias:Language>de</trias:Language> <trias:CalcTime>20</trias:CalcTime> <trias:DeliveryPayload> <trias:TripResponse> <trias:ErrorMessage> <trias:Code>-4000</trias:Code> <trias:Text> <trias:Text>TRIP_NOTRIPFOUND</trias:Text> <trias:Language>de</trias:Language> </trias:Text> </trias:ErrorMessage> </trias:TripResponse> </trias:DeliveryPayload> </trias:ServiceDelivery> </trias:Trias> |
Anmerkungen
Die folgenden Angaben sind für externe Entwickler wichtig:
- EstimatedBay und PlannedBay beinhalten die Gleisinformationen, wie sie durch die Systeme angeliefert werden. D.h. Gleis “12” und Gleis “12A” werden als zwei unterschiedliche Gleise betrachtet. In Zürich HB gibt es als geplant z.B. “41/42”. Im PlannedBay kann es dann nur noch “41” sein.
- Aufgrund von Restriktionen können nur direkte Züge angezeigt werden.
- Metahaltestellen werden auch nicht berücksichtigt. D.h. Es wird ein Resultat von Wankdorf nach Bern gefunden. Von Wankdorf, Bahnhof nach Bern nicht.
- Ausgefallene Fahrten werden (anders als im StopEvent) nicht angezeigt oder markiert.
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