OJPTripInfoRequest 2.0

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:

ElementKardinalitätBeschreibungBeispiel
siri:RequestTimestamp1:1 Timestamp der Anfrage. Bevorzugt in Zulu Time.
<siri:RequestTimestamp>2025-02-18T15:41:28.717Z</siri:RequestTimestamp>
siri:MessageIdentifier0:1Der Identifier der Meldung. Bevorzugt stetig steigend.
<siri:MessageIdentifier>SER-1a</siri:MessageIdentifier>
JourneyRef-1:1Referenz auf die Fahrt.Die Referenz kann über einen TripRequest oder StopEventRequest ermittelt werden.
<JourneyRef>ch:1:sjyid:100001:975-001</JourneyRef>

 

OperatingDayRef-1:1Im Format YYYY-MM-DD
<OperatingDayRef>2025-02-18</OperatingDayRef>
TrainNumber-1:1Dieses Feature steht nicht zur Verfügung, wird aber geliefert wenn vorhanden.

n/a

OperatorRef-1:1Dieses Feature steht nicht zur Verfügung, wird aber geliefert wenn vorhanden.

n/a

siri:VehicleRef-1:1Dieses Feature steht nicht zur Verfügung.n/a
TimeOfOperation-1:1Dieses Feature steht nicht zur Verfügung.n/a
Params0:1Weitere Parameter für die Anfrage
Params/UseRealTimeData0:1Bestimmt 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/IncludeCalls0:1Sollen die “Calls” (Zwischenhalte) eingefügt werden? Default ist true.
<IncludeCalls>true</IncludeCalls>
Params/IncludePosition0:1Soll die aktuelle Position des Zugs eingefügt werden?Dieses Feature steht nicht zur Verfügung.n/a
Params/IncludeService0:1Soll die Service-Information eingfügt werden (LineRef, Mode, OperatorRef,..)? Default ist true.
<IncludeService>false</IncludeService>
Params/IncludeTrackSections0:1Sollen geographische Infos der Route eingefügt werden? Default ist false.
<IncludeTrackSections>true</IncludeTrackSections>
Params/IncludeTrackProjection0:1Ob das die geografische Projektion (Koordinaten) dieser Fahrzeugfahrt enthalten soll?
<IncludeTrackProjection>true</IncludeTrackProjection>
Params/IncludePlacesContext0:1Ob 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/IncludeFormation0:1Ob 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/IncludeSituationsContext0:1Ob 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>