Kurzbeschreibung
Mit dem TripInfoRequest können weitere Details zu einer “Journey” (Fahrt) abgefragt werden. Die “Journey” bezieht sich immer auf die ganze Fahrt, von wo die Verbindung aus startet, bis zum Endziel, unabhängig davon welcher Teil der Fahrt wirklich von Interesse ist. Ein gängiges Szenario für den TripInfoRequest ist, wenn man sich auf einer Fahrt befindet und demnächst an einer Haltestelle auf eine andere Verbindung wechselt, um von der nächsten Fahrt die Anschlussmöglichkeit zu prüfen und allfällige Verspätungen oder Änderungen zum Fahrplan abzufragen. Diese Möglichkeit kann natürlich auch für die aktuelle Fahrt genutzt werden, um zu prüfen ob der gewünschte Anschluss noch möglich ist, respektive wie viel Zeit für den Transfer noch bleiben wird.
Technische Beschreibung
API-Explorer
Sie können Requests nach eigenen Wünschen anpassen und dazu die Vorlagen in der Open-API ausprobieren – direkter Link zum API-Explorer.
TripInfoRequest
Die zentrale Information um einen TripInfoRequest zu senden sind die JourneyRef und die OperatingDayRef – eine Referenz auf eine ganz bestimmte Journey an einem Kalendertag. Die JourneyRef muss der Response einer anderen Anfrage (z.B. TripRequest oder StopEventRequest) entnommen werden. Weitere Details zum Aufbau eines TripInfoRequest können der Beschreibung der OJPTripInfoRequestStructure beim VDV verfügbar. Hier ein Beispiel TripInfoRequest:
<OJP xmlns="http://www.vdv.de/ojp" xmlns:siri="http://www.siri.org.uk/siri" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.vdv.de/ojp" version="2.0">
<OJPRequest>
<siri:ServiceRequest>
<siri:ServiceRequestContext>
<siri:Language>de</siri:Language>
</siri:ServiceRequestContext>
<siri:RequestTimestamp>2025-02-18T15:41:28.717Z</siri:RequestTimestamp>
<siri:RequestorRef>SKIPlus</siri:RequestorRef>
<OJPTripInfoRequest>
<siri:RequestTimestamp>2025-02-18T15:41:28.717Z</siri:RequestTimestamp>
<span class="crayon-r "> <siri:MessageIdentifier></span><span class="crayon-i ">SER-1a</span><span class="crayon-r "></siri:MessageIdentifier></span>
<JourneyRef>ch:1:sjyid:100001:975-001</JourneyRef>
<OperatingDayRef>2025-02-18</OperatingDayRef>
<Params>
<UseRealtimeData>explanatory</UseRealtimeData>
<IncludeCalls>true</IncludeCalls>
<IncludeService>true</IncludeService>
</Params>
</OJPTripInfoRequest>
</siri:ServiceRequest>
</OJPRequest>
</OJP>
Beschreibung der Parameter
Die Elemente der OJPTripInfoRequestStructure und TripInfoParamStructure:
Element | Kardinalität | Beschreibung | Beispiel |
siri:RequestTimestamp | 1:1 | Timestamp der Anfrage. Bevorzugt in Zulu Time. |
<siri:RequestTimestamp>2025-02-18T15:41:28.717Z</siri:RequestTimestamp> |
siri:MessageIdentifier | 0:1 | Der Identifier der Meldung. Bevorzugt stetig steigend. |
<siri:MessageIdentifier>SER-1a</siri:MessageIdentifier> |
JourneyRef | -1:1 | Referenz auf die Fahrt.Die Referenz kann über einen TripRequest oder StopEventRequest ermittelt werden. |
<JourneyRef>ch:1:sjyid:100001:975-001</JourneyRef>
|
OperatingDayRef | -1:1 | Im Format YYYY-MM-DD |
<OperatingDayRef>2025-02-18</OperatingDayRef> |
TrainNumber | -1:1 | Dieses Feature steht nicht zur Verfügung, wird aber geliefert wenn vorhanden. |
n/a |
OperatorRef | -1:1 | Dieses Feature steht nicht zur Verfügung, wird aber geliefert wenn vorhanden. |
n/a |
siri:VehicleRef | -1:1 | Dieses Feature steht nicht zur Verfügung. | n/a |
TimeOfOperation | -1:1 | Dieses Feature steht nicht zur Verfügung. | n/a |
Params | 0:1 | Weitere Parameter für die Anfrage | |
Params/UseRealTimeData | 0:1 | Bestimmt wie Realtime berücksichtigt wird, full = alles; explanatory = auch verspätete und gestrichene Verbindungen (ausführlichste Variante); none = nur gemäss Fahrplan. |
<UseRealtimeData>explanatory</UseRealtimeData> |
Params/IncludeCalls | 0:1 | Sollen die “Calls” (Zwischenhalte) eingefügt werden? Default ist true. |
<IncludeCalls>true</IncludeCalls> |
Params/IncludePosition | 0:1 | Soll die aktuelle Position des Zugs eingefügt werden?Dieses Feature steht nicht zur Verfügung. | n/a |
Params/IncludeService | 0:1 | Soll die Service-Information eingfügt werden (LineRef, Mode, OperatorRef,..)? Default ist true. |
<IncludeService>false</IncludeService> |
Params/IncludeTrackSections | 0:1 | Sollen geographische Infos der Route eingefügt werden? Default ist false. |
<IncludeTrackSections>true</IncludeTrackSections> |
Params/IncludeTrackProjection | 0:1 | Ob das die geografische Projektion (Koordinaten) dieser Fahrzeugfahrt enthalten soll? |
<IncludeTrackProjection>true</IncludeTrackProjection> |
Params/IncludePlacesContext | 0:1 | Ob der Ortskontext benötigt wird. Wenn der Anfragende bereits über diese Informationen verfügt, kann die Antwort schlanker ausfallen, wenn sie auf false gesetzt wird. Default ist true.Dieses Feature ist angedacht. | n/a |
Params/IncludeFormation | 0:1 | Ob die Formation einbezogen werden soll. Bei “einfach” wird nur VehicleFeature verwendet. “full” kann die volle Leistung des SIRI-Bildungsmodells entfalten (insbesondere für Züge). Das OJP-Spezifikationsdokument gibt Hinweise, wie man sich als Server auf die wichtigsten Aspekte beschränken kann. Der Default ist none.Dieses Feature ist angedacht. | n/a |
Params/IncludeSituationsContext | 0:1 | Ob der Kontext der Situation erforderlich ist. Wenn der Anfragende über diese Informationen auf andere Weise verfügt oder sie nicht verarbeiten kann, kann die Antwort schlanker gestaltet werden, wenn sie auf false gesetzt wird. Default ist true. | n/a |
TripInfoResponse
Die Details der einzelnen Parameter können den Beschreibungen beim StopEventRequest entnommen werden.
TripInfoResponseContext
Zuoberst in der OJPTripInfoDeliveryStructure wird der TripResponseContext als ResponseContextStructure geliefert. Deatailinformationen zu den verwendeten “Places” sind in der entsprechenden Beschreibung in OJPTripRequest enthalten.
<TripInfoResponseContext>
<Places>
<Place>
<StopPlace>
<StopPlaceRef>8500010</StopPlaceRef>
<StopPlaceName>
<Text xml:lang="de">Basel SBB</Text>
</StopPlaceName>
<TopographicPlaceRef>23005701:2</TopographicPlaceRef>
</StopPlace>
<Name>
<Text xml:lang="de">Basel SBB</Text>
</Name>
<GeoPosition>
<siri:Longitude>7.59009</siri:Longitude>
<siri:Latitude>47.54672</siri:Latitude>
</GeoPosition>
</Place>
<Place>
<!-- ... -->
</Place>
</Places>
<Situations>
<PtSituation>
<siri:CreationTime>2025-03-13T11:17:00Z</siri:CreationTime>
<siri:ParticipantRef>ski-ddip-out-sx_prod</siri:ParticipantRef>
<siri:SituationNumber>ch:1:sstid:100001:ski-oct_sip2-sx_prod-TT958987-0</siri:SituationNumber>
<siri:Version>1</siri:Version>
<siri:Source>
<siri:SourceType>directReport</siri:SourceType>
</siri:Source>
<siri:ValidityPeriod>
<siri:StartTime>2025-03-13T11:17:00Z</siri:StartTime>
<siri:EndTime>2025-03-14T21:00:00Z</siri:EndTime>
</siri:ValidityPeriod>
<siri:AlertCause>unknown</siri:AlertCause>
<siri:Priority>3</siri:Priority>
<siri:ScopeType>stopPoint</siri:ScopeType>
<siri:Language>de</siri:Language>
<siri:PublishingActions>
<siri:PublishingAction>
<siri:PublishAtScope>
<siri:ScopeType>stopPoint</siri:ScopeType>
<siri:Affects/>
</siri:PublishAtScope>
<siri:PassengerInformationAction>
<siri:ActionRef/>
<siri:RecordedAtTime>2025-03-13T11:17:00Z</siri:RecordedAtTime>
<siri:Perspective>stopPoint</siri:Perspective>
<siri:TextualContent>
<siri:SummaryContent>
<siri:SummaryText xml:lang="de">Der stufenfreie Zugang zum Bahnhof Basel SBB ist für Reisende mit Mobilitätseinschränkung nicht mehr garantiert.</siri:SummaryText>
<!-- ... -->
</siri:TextualContent>
</siri:PassengerInformationAction>
</siri:PublishingAction>
</siri:PublishingActions>
</PtSituation>
</Situations>
</TripInfoResponseContext>
TripInfoResult
Nach dem Kontext kommt die Journey selbst; zuerst alle Halte mit PreviousCalls (vorangehende Halte) und OnwardCalls (folgende Halte). Dabei können mehr Halte enthalten sein als im TripRequest, welcher zur Ermittlung der JourneyRef gemacht wurde, da im TripInfoRequest jeweils die ganze Fahrt geliefert wird. Beispiel: Bei einem TripRequest von Bern nach Zürich könnte im entsprechenden TripInfoRequest eine Fahrt von Genf nach St. Gallen geliefert werden, wovon der Abschnitt Bern – Zürich eine Teilmenge ist.
Abhängig von den Parametern in der Anfrage kommen mehr oder weniger Details in der Antwort mit. Insbesondre für die Echtzeit, empfehlen wir “UseRealtimeData” mit “explanatory” anzufragen, um alle Details über die Echtzeit zu erhalten, so werden auch ausgefallene Fahrten noch angezeigt.
<TripInfoResult>
<PreviousCall>
<siri:StopPointRef>ch:1:sloid:10:4:8</siri:StopPointRef>
<StopPointName>
<Text xml:lang="de">Basel SBB</Text>
</StopPointName>
<NameSuffix>
<Text xml:lang="de">PLATFORM_ACCESS_WITHOUT_ASSISTANCE</Text>
</NameSuffix>
<PlannedQuay>
<Text xml:lang="de">8</Text>
</PlannedQuay>
<ServiceDeparture>
<TimetabledTime>2025-03-14T13:56:00Z</TimetabledTime>
<EstimatedTime>2025-03-14T14:02:00Z</EstimatedTime>
</ServiceDeparture>
<Order>1</Order>
</PreviousCall>
<!-- ... -->
<PreviousCall>
<siri:StopPointRef>ch:1:sloid:7483:0:954324</siri:StopPointRef>
<StopPointName>
<Text xml:lang="de">Spiez</Text>
</StopPointName>
<NameSuffix>
<Text xml:lang="de">PLATFORM_ACCESS_WITHOUT_ASSISTANCE</Text>
</NameSuffix>
<PlannedQuay>
<Text xml:lang="de">3</Text>
</PlannedQuay>
<ServiceArrival>
<TimetabledTime>2025-03-14T15:37:00Z</TimetabledTime>
<EstimatedTime>2025-03-14T15:36:36Z</EstimatedTime>
</ServiceArrival>
<ServiceDeparture>
<TimetabledTime>2025-03-14T15:38:00Z</TimetabledTime>
<EstimatedTime>2025-03-14T15:39:12Z</EstimatedTime>
</ServiceDeparture>
<Order>6</Order>
</PreviousCall>
<OnwardCall>
<siri:StopPointRef>ch:1:sloid:1605:4:7</siri:StopPointRef>
<StopPointName>
<Text xml:lang="de">Visp</Text>
</StopPointName>
<NameSuffix>
<Text xml:lang="de">PLATFORM_ACCESS_WITHOUT_ASSISTANCE</Text>
</NameSuffix>
<PlannedQuay>
<Text xml:lang="de">7</Text>
</PlannedQuay>
<ServiceArrival>
<TimetabledTime>2025-03-14T16:04:00Z</TimetabledTime>
<EstimatedTime>2025-03-14T16:03:12Z</EstimatedTime>
</ServiceArrival>
<ServiceDeparture>
<TimetabledTime>2025-03-14T16:06:00Z</TimetabledTime>
<EstimatedTime>2025-03-14T16:06:42Z</EstimatedTime>
</ServiceDeparture>
<Order>7</Order>
</OnwardCall>
<!-- ... -->
</TripInfoResult>
Service
Die Informationen zum Abschnitt Service im Detail: LineRef, Mode (Verkersmittelart), OperatorRef, PublishedServiceName, TrainNumber, etc.
<TripInfoResult>
<!-- ... -->
<Service>
<OperatingDayRef>2025-03-14</OperatingDayRef>
<JourneyRef>ch:1:sjyid:100001:975-001</JourneyRef>
<siri:LineRef>ojp:91006:H</siri:LineRef>
<siri:DirectionRef>R</siri:DirectionRef>
<Mode>
<PtMode>rail</PtMode>
<siri:RailSubmode>interregionalRail</siri:RailSubmode>
<Name>
<Text xml:lang="de">Zug</Text>
</Name>
<ShortName>
<Text xml:lang="de">IC</Text>
</ShortName>
</Mode>
<ProductCategory>
<Name>
<Text xml:lang="de">Zug</Text>
</Name>
<ShortName>
<Text xml:lang="de">IC</Text>
</ShortName>
<ProductCategoryRef>23</ProductCategoryRef>
</ProductCategory>
<PublishedServiceName>
<Text xml:lang="de">IC6</Text>
</PublishedServiceName>
<TrainNumber>975</TrainNumber>
<OriginText>
<Text xml:lang="de">n/a</Text>
</OriginText>
<siri:OperatorRef>11</siri:OperatorRef>
<DestinationStopPointRef>ch:1:sloid:1609:2:3</DestinationStopPointRef>
<DestinationText>
<Text xml:lang="de">Brig</Text>
</DestinationText>
<SituationFullRefs>
<SituationFullRef>
<siri:ParticipantRef>ski-ddip-out-sx_prod</siri:ParticipantRef>
<siri:SituationNumber>ch:1:sstid:100001:ski-oct_sip2-sx_prod-TT958987-0</siri:SituationNumber>
</SituationFullRef>
</SituationFullRefs>
</Service>
</TripInfoResult>
JourneyTrack und LinkProjection
Anschliessend werden in JourneyTrack und der LinkProjection (Anfrageparameter = true: IncludeTrackSections und IncludeLinkProjection) geographische Informationen über die Journey geliefert.
<ojp:TripInfoResult>
<!-- ... -->
<JourneyTrack>
<TrackSection>
<TrackSectionStart>
<siri:StopPointRef>8500010</siri:StopPointRef>
<Name>
<Text xml:lang="de">Basel SBB</Text>
</Name>
</TrackSectionStart>
<TrackSectionEnd>
<siri:StopPointRef>8501609</siri:StopPointRef>
<Name>
<Text xml:lang="de">Brig</Text>
</Name>
</TrackSectionEnd>
<LinkProjection>
<Position>
<siri:Longitude>7.59235</siri:Longitude>
<siri:Latitude>47.54587</siri:Latitude>
</Position>
<Position>
<siri:Longitude>7.59256</siri:Longitude>
<siri:Latitude>47.54579</siri:Latitude>
</Position>
<!-- ... -->
<Position>
<siri:Longitude>7.59273</siri:Longitude>
<siri:Latitude>47.54575</siri:Latitude>
</Position>
<Position>
<siri:Longitude>7.98536</siri:Longitude>
<siri:Latitude>46.31967</siri:Latitude>
</Position>
<Position>
<siri:Longitude>7.98575</siri:Longitude>
<siri:Latitude>46.31969</siri:Latitude>
</Position>
</LinkProjection>
<Duration>PT2H13M</Duration>
<Length>0</Length>
</TrackSection>
</JourneyTrack>
</ojp:TripInfoResult>