OJPTripRequest 2.0

Kurzbeschreibung

Der TripRequest ist der zentrale Dienst. Mit Angabe von Origin und Destination wird ein Trip geplant.

Ein Trip hat verschiedene “Legs” (Abschnitte), welche in drei Kategorien unterteilt werden “TimedLeg”, “TransferLeg” und “ContinousLeg” welches z.B. Fusswege sind oder Fahrten mit Verkehrsmittel ohne einen definierten Fahrplan.

Fachliche Beschreibung

  • Haltestellen: Hierfür können auch die Datensätze Dienststellen 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 UTC (d.h. Zulu-Zeit), diese sollte jeweils mit den Sekunden geliefert werden und dem ISO 8601 Standard in der Formatierung entsprechen. Falls nicht UTC verwendet wird, muss die Abweichung der Zeitzone mitgegeben werden.

Technische Beschreibung

API-Explorer

Sie können dort Beispiele von Requests ausprobieren oder diese auch nach eigenem ermessen abändern – direkter Link zum OJP OpenAPI-Explorer.

Request

Weiterführende Infos zum OJPTripRequest. Hier ein Beispiel eines OJPTripRequests in OJP 2.0:

<?xml version="1.0" encoding="UTF-8"?>
<OJP xmlns="http://www.vdv.de/ojp" xmlns:siri="http://www.siri.org.uk/siri" version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vdv.de/ojp ../../../../OneDrive/01_Dokumente/OJP%20OpenJourneyPlanner/OJP_changes_for_v1.1/OJP.xsd">
    <OJPRequest>
        <siri:ServiceRequest>
            <siri:RequestTimestamp>2025-01-17T09:58:34Z</siri:RequestTimestamp>
            <siri:RequestorRef>SKIplus</siri:RequestorRef>
            <OJPTripRequest>
                <siri:RequestTimestamp>2025-01-17T09:58:34Z</siri:RequestTimestamp>
                <siri:MessageIdentifier>SKI-TR-Example1</siri:MessageIdentifier>
                <Origin>
                    <PlaceRef>
                        <siri:StopPointRef>8503308</siri:StopPointRef>
                        <Name>
                            <Text>Kloten</Text>
                        </Name>
                    </PlaceRef>
                    <DepArrTime>2025-10-01T23:30:00Z</DepArrTime>
                </Origin>
                <Destination>
                    <PlaceRef>
                        <siri:StopPointRef>8503424</siri:StopPointRef>
                        <Name>
                            <Text>Schaffhausen</Text>
                        </Name>
                    </PlaceRef>
                </Destination>
                <Params>
                    <NumberOfResults>3</NumberOfResults>
                    <IncludeIntermediateStops>false</IncludeIntermediateStops>
                </Params>
            </OJPTripRequest>
        </siri:ServiceRequest>
    </OJPRequest>
</OJP>

Beschreibung der OJPTripRequestStructure:

ElementKardinalitätBeschreibungBeispiel
siri:RequestTimestamp1:1Der Timestamp des Requests in IS0 8601, bevorzugt als Zulu-Time.
<siri:RequestTimestamp>2025-01-31T12:30:00Z</siri:RequestTimestamp>
siri:RequestorRef0:1Der RequestorRef soll verwendet werden, um die Identifizierung der anfragenden Systeme zu ermöglichen. Dies kann im Falle von Problemen uns als OJP-Systembetreiber helfen, auf die richtigen Systemnutzer zuzugehen.
<siri:RequestorRef>SKIplus</siri:RequestorRef>
siri:MessageIdentifier0:1Der Identifier der Message. Kann vom Benutzer gewählt werden. Kann im Supportfall von Nutzen sein. Dieser wird, wenn vorhanden, in der Response zurückgegeben.
<siri:MessageIdentifier>SKI-TR-Example1</siri:MessageIdentifier>
Origin1:*Der Startpunkt der Suche. OJP bietet relativ viele Möglichkeiten, dies zu modellieren, die entsprechenden IDs können mit dem LIR ermittelt werden.
Mehr Infos im entsprechenden Abschnitt.
<Origin> 
    <PlaceRef>
        <StopPlaceRef>8503000</StopPlaceRef> 
        <Name> 
            <Text>Bern</Text> 
        </Name> 
    </PlaceRef> 
    <DepArrTime>2025-01-20T12:00:00Z</DepArrTime>
</Origin>
Destination1:*Der Zielpunkt der Suche. OJP bietet relativ viele Möglichkeiten, dies zu modellieren.
Mehr Infos im entsprechenden Abschnitt.
<Destination>
    <PlaceRef>
        <StopPlaceRef>8505000</StopPlaceRef> 
        <Name> 
            <Text>Luzern</Text>
        </Name>
    </PlaceRef>
    <DepArrTime>2025-01-20T12:00:00Z</DepArrTime>
</Destination>
Via0:1Maximal ein Via wird unterstützt. Müssen mehrere Vias berücksichtigt werden oder soll ein Rundkurs berechnet werden, so muss das anfragende System die Reise in einzelne Trips aufteilen, welche separat gesucht werden.
Die DwellTime ist optional, am ViaPoint wird dann ein entsprechender Aufenthalt eingerechnet. DwellTime >= Abfahrtszeit(Via) – Ankunftszeit(Via).
<Via>
    <ViaPoint> 
        <StopPlaceRef>8506000</StopPlaceRef>
        <Name>
            <Text>Winterthur</Text>
        </Name>
    </ViaPoint>
    <ojp:DwellTime>PT2H</ojp:DwellTime>
</Via>
Params0:*Für die Beschreibung der Parameter, siehe entsprechenden Abschnitt weiter unten. Dort befindet sich auch ein link auf weitere Parameter, welche jedoch nicht alle unterstützt werden.
<Params>
    <NumberOfResults>5</NumberOfResults>
    <IncludeTrackSections>true</IncludeTrackSections>
    <IncludeLegProjection>true</IncludeLegProjection>
    <IncludeIntermediateStops>true</IncludeIntermediateStops>
    <UseRealtimeData>explanatory</UseRealtimeData>
</Params>

Struktur Origin/Destination

ElementKardinalitätBeschreibungBeispiel
 PlaceRef/siri:StopPointRef0:1Referenz auf ein “Scheduled Stop Point”. Achtung: Sowohl Didok Nummern wie auch SLOID können vorkommen als PlaceRef bei StopPointRef (und StopPlaceRef). Mehr Infos.
<PlaceRef>
    <siri:StopPointRef>8503000</siri:StopPointRef>
    <Name>
        <Text>Zürich HB</Text>
    </Name>
</PlaceRef>
PlaceRef/StopPlaceRef0:1Referenz auf eine Haltestelle. Achtung: Sowohl Didok Nummern wie auch SLOID können vorkommen als PlaceRef bei StopPointRef (und StopPlaceRef). Mehr Infos.
<PlaceRef>
    <StopPlaceRef>8503424</StopPlaceRef>
    <Name>
        <Text>Schaffhausen</Text>
    </Name>
</PlaceRef>
PlaceRef/GeoPosition0:1WGS84 Koordinaten, hier ist kein Names Element notwendig.
<PlaceRef>
    <GeoPosition>
        <siri:Longitude>7.431516</siri:Longitude>
        <siri:Latitude>46.956353</siri:Latitude>
    </GeoPosition>
</PlaceRef>
PlaceRef/TopographicPlaceRef0:1Verweis auf einen “Ort. Schwierig, da die Werte nicht erraten werden können

 

<Origin>
    <PlaceRef>
        <StopPlaceRef>8503000</StopPlaceRef>
        <Name>
            <Text>Bern</Text>
        </Name>
    </PlaceRef>
    <DepArrTime>2025-01-20T12:00:00Z</DepArrTime>
</Origin>
DepArrTime0:1Zeit, die verwendet werden soll.

“Z” ist Zulu-Zeit (also zeitzonenunabhängig). Die Zeitangabe muss IS0 8601 entsprechen, somit muss hiernoch die Sekunden auch angegeben werden. Stimmt das Format nicht nimmt das System die lokale Zeit.

<DepArrTime>2025-01-20T12:00:00Z</DepArrTime>
TimeAllowance0:1Anstelle von DepArrTime. Zusatzzeit, die für das Erreichen und Verlassen der Location nötig ist.
<TimeAllowance>PT2H</TimeAllowance>
IndividualTransportOptions0:*Optionen für den Weg von und zu den Haltestellen

Siehe separate Tabelle

<IndividualTransportOptions>
    <Mode>walk</Mode>
    <MaxDistance>5000</MaxDistance>
    <MaxDuration>PT1H</MaxDuration>
    <Speed>120</Speed>
</IndividualTransportOptions>

Struktur IndividualTransportOption

ElementKardinalitätBeschreibungBeispiel
ItModeToCover/PersonalMode1:1PersonalModes, mit dem der Origin erreicht werden soll, in einigen fällen auch die Destination. Im Moment wird nur “foot” unterstützt, welcher auch der Default ist, wenn die Reise nicht bei einer Haltestelle beginnt.

Werte ansonsten:

  • foot
  • bicycle
  • car
  • motorcycle
  • truck
  • scooter
  • other (Only in case if nothing else fits)
<Params>
    ...
    <ItModeToCover>
        <PersonalMode>foot</PersonalMode>
    </ItModeToCover>
</Params>
MaxDistance0:1Maximale Distanz in Metern. Damit werden die Routen minimiert.
<MaxDistance>10000</MaxDistance>
MaxDuration0:1Maximale Dauer. Steuert den Router bezüglich der maximalen Dauer. Das Format ist zu beachten. Es ist eine xs:duration.
<MaxDuration>PT2H</MaxDuration>
MinDistance0:1Minimale Distanz in Metern. Damit werden die Routen minimiert.

Das Feature wird nicht unterstützt.

<MinDistance>1000</MinDistance>
MinDuration0:1Minimale Dauer. Steuert den Router bezüglich der minimalen Dauer. Das Format ist zu beachten. Es ist eine xs:duration.

Das Feature wird nicht unterstützt.

<MinDuration>PT300S</MinDuration>
Speed0:1Relative Geschwindigkeit in Prozent, normal ist 100%, langsamer mit einem kleineren Wert, schneller mit einem höheren.
<Speed>100</Speed>

Struktur TripParamStructure

ElementKardinalitätBeschreibungBeispiel
ModeAndModeOfOperationFilter 0:*Der Filter sagt, welche Modes berücksichtigt werden sollen. Mit dem Exclude-Parameter kann definiert werden, ob ich einen Mode ausschliessen möchte (true) oder eben nur diesen anfrage (false).

Die Listen der Modes definiert die Verkehrsmittel, zusätzlich gibt es noch Definitionen von  Submodes welche aus SIRI entstammen.

<ModeAndModeOfOperationFilter>
    <Exclude>false</Exclude>
    <PtMode>water</PtMode>
</ModeAndModeOfOperationFilter>
LineFilter 0:1Linien, die ein- oder ausgeschlossen werden sollen.

 

<LineFilter>
    <Line>
        <LineRef>sbb:92080::R</LineRef>
    </Line>
    <Line>
        <LineRef>sbb:91012:B:H</LineRef>
    </Line>
    <Exclude>true</Exclude>
</LineFilter>
OperatorFilter0:1Betreiber, die ein- oder ausgeschlossen werden sollen.

 

<OperatorFilter>
    <Exclude>false</Exclude>
    <OperatorRef>sbb:11:SchweizerischeBundesbahnenSBB</OperatorRef>
</OperatorFilter>
IncludeAllRestrictedLines0:1Es könnte Linien geben, die besondere Einschränkungen haben und nicht allgemein für die Öffentlichkeit zugänglich sind. Zum Beispiel Schulbusse oder Firmenshuttles. Wenn dieses Flag gesetzt ist, berücksichtigt der Router auch eingeschränkte Linien.
<IncludeAllRestrictedLines>true</IncludeAllRestrictedLines>
NoSingleStep0:1Der Benutzer kann keinen Absatz überwinden.

Das Feature steht nicht zur Verfügung.

 n/a
NoStairs0:1Der Benutzer kann keine Treppe benutzen.

Das Feature steht nicht zur Verfügung.

n/a
NoEscalator0:1Der Benutzer kann keine Rolltrippe benutzen.

Das Feature steht nicht zur Verfügung.

n/a
NoElevator0:1Der Benutzer kann keinen Fahrstuhl benützen.

Das Feature steht nicht zur Verfügung.

n/a
NoRamp0:1Der Benutzer kann keine Rampe benützen

Das Feature steht nicht zur Verfügung.

n/a
LevelEntrance0:1Der Benutzer benötigt ebenerdige Eingänge/Übergänge

Das Feature steht nicht zur Verfügung.

n/a
BikeTransport0:1Der Benutzer möchte ein Fahrrad mitnehmen

Das Feature steht nicht zur Verfügung.

n/a
WalkSpeed0:1Abweichung vor normalen Laufgeschwindigkeit. 100% normal.

Das Feature steht nicht zur Verfügung.

n/a
NumberOfResults0:1Wenn Resultate vom Suchalgorithmus gleich gewichtet werden, werden mehr und falls nicht die gewünschte Anzahl an Verbindungen gefunden werden kann, werden weniger, als die gewünschte Anzahl an Resultate zurückgegeben.
<NumberOfResults>10</NumberOfResults>
NumberOfResultsBefore0:1Anzahl Resultate vor einer gegebenen Zeit (am Ziel oder am Start).

Will ein OJP-Client zu den bereits erhaltenen Fahrten noch nächst frühere erhalten, so muss er einen neuen Request mit NumberOfResultsBefore=n und Destination.DepArrTime = früheste gefundene EndTime in der letzten Antwort minus 1 Minute senden.

<NumberOfResultsBefore>4</NumberOfResultsBefore>
NumberOfResultsAfter0:1Anzahl Resultate nach einer gegebenen Zeit (am Ziel oder am Start)

Will ein OJP-Client zu den bereits erhaltenen Fahrten noch nächst spätere erhalten, so muss er einen neuen Request mit NumberOfResultsAfter=n und Origin.DepArrTime = späteste gefundene StartTime in der letzten Antwort plus 1 Minute senden.

<NumberOfResultsAfter>6</NumberOfResultsAfter>
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>
TransferLimit0:1Maximale Anzahl Umstiege
<TransferLimit>3</TransferLimit>
OptimisationMethod0:1Welche Optimierungsmethode soll verwendet werden?

fastest, least walking, etc

Das Feature steht nicht zur Verfügung.

n/a
ItModesToCover0:*Für jeden Modus in der Liste soll ein separater monomodaler Trip gefunden werden, zusätzlich zu den intermodalen Trips.n/a
IncludeTrackSection0:1Soll die Information TrackSection Information beinhalten, der eine geographische Projektion eines Legs erlaubt. Es werden TrackStart, TrackEnd und Duration ausgegeben, sofern diese Infos verfügbar sind.
<IncludeTrackSections>true</IncludeTrackSections>
IncludeLegProjection0:1Soll das Resultat die geographische Präsentation eines Legs beinhalten.
<IncludeLegProjection>true</IncludeLegProjection>
IncludeTurnDescription0:1Eine detaillierte Wegbeschreibung für jedes Leg wird in PathGuidance ausgegeben.
<IncludeTurnDescription>true</IncludeTurnDescription>
IncludeIntermediateStops0:1Gibt an, ob Haltestellen auch angegeben werden sollen, während der einzelnen Fahrt. d.h. alle Zwischenhalte.
<IncludeIntermediateStops>true</IncludeIntermediateStops>
IncludeFare0:1Sollen Preisangaben eingefügt werden.

Das Feature wird im Moment nicht unterstützt.

<IncludeFare>true</IncludeFare>

 

Response

Weiterführende Infos zur Trip Response oder der Struktur OJPTripDeliver sind in den Tabelle von VDV zu finden.

Zuerst wird der TripResponseContext geliefert. Dieser enthält Angaben zu allen verwendeten Places (Haltestellen, Ortschaften, Adressen,..) im Element Places:

<Place>
    <StopPlace>
        <StopPlaceRef>8590034</StopPlaceRef>
        <StopPlaceName>
            <Text xml:lang="de">Bern, Bärenpark</Text>
        </StopPlaceName>
        <TopographicPlaceRef>23006351:1</TopographicPlaceRef>
    </StopPlace>
    <Name>
        <Text xml:lang="de">Bern, Bärenpark</Text>
    </Name>
    <GeoPosition>
        <siri:Longitude>7.45941</siri:Longitude>
        <siri:Latitude>46.94847</siri:Latitude>
    </GeoPosition>
</Place>
<Place>
    <StopPoint>
        <siri:StopPointRef>ch:1:sloid:90034:0:2</siri:StopPointRef>
        <StopPointName>
            <Text xml:lang="de">Bern, Bärenpark</Text>
        </StopPointName>
        <ParentRef>8590034</ParentRef>
        <TopographicPlaceRef>23006351:1</TopographicPlaceRef>
    </StopPoint>
    <Name>
        <Text xml:lang="de">Bärenpark</Text>
    </Name>
    <GeoPosition>
        <siri:Longitude>7.45941</siri:Longitude>
        <siri:Latitude>46.94847</siri:Latitude>
    </GeoPosition>
</Place>

Im ServiceKontext werden auch PtSituations (Störungen) eingetragen, falls sie generell auf die Reiseroute zutreffen.

<PtSituation>
    <siri:CreationTime>2025-02-03T12:13:00Z</siri:CreationTime>
    <siri:ParticipantRef>ski-ddip-out-sx_prod</siri:ParticipantRef>
    <siri:SituationNumber>ch:1:sstid:100001:ski-oct_sip2-sx_prod-TT951800-0</siri:SituationNumber>
    <siri:Version>1</siri:Version>
    <siri:Source>
        <siri:SourceType>directReport</siri:SourceType>
    </siri:Source>
    <siri:ValidityPeriod>
        <siri:StartTime>2025-02-03T12:13:00Z</siri:StartTime>
        <siri:EndTime>2025-02-04T21: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-02-03T12:13:00Z</siri:RecordedAtTime>
                <siri:Perspective>stopPoint</siri:Perspective>
                <siri:TextualContent>
                    <siri:SummaryContent>
                        <siri:SummaryText xml:lang="de">Der stufenfreie Zugang zum Bahnhof Bern ist für Reisende mit Mobilitätseinschränkung unter Umständen nicht mehr garantiert.</siri:SummaryText>
                    </siri:SummaryContent>
                    <siri:ReasonContent>
                        <siri:ReasonText xml:lang="de">Der Grund ist eine Liftstörung.</siri:ReasonText>
                    </siri:ReasonContent>
                    <siri:DescriptionContent>
                        <siri:DescriptionText xml:lang="de">Betroffen ist der Personenlift Gleis 1/2 - Welle.</siri:DescriptionText>
                    </siri:DescriptionContent>
                    <siri:RecommendationContent>
                        <siri:RecommendationText xml:lang="de">Für Reisende mit Mobilitätseinschränkung wird empfohlen, sich beim Contact Center Handicap zu melden: Tel. 0800 007 102 oder swisspass.ch/handicap.</siri:RecommendationText>
                    </siri:RecommendationContent>
                    <siri:DurationContent>
                        <siri:DurationText xml:lang="de">Die Einschränkung dauert ungefähr bis 04.02.2025, 22:00.</siri:DurationText>
                    </siri:DurationContent>
                </siri:TextualContent>
            </siri:PassengerInformationAction>
        </siri:PublishingAction>
    </siri:PublishingActions>
</PtSituation>
+

Danach kommen 0:* TripResult. Nach dem Header folgen einzelne Trips.

<TripResult>
    <Id>ID-FEF77DD9-EC8D-46D8-92EE-DC5FCFBE7B86</Id>
    <Trip>
        <Id>ID-FEF77DD9-EC8D-46D8-92EE-DC5FCFBE7B86</Id>
        <Duration>PT6M30S</Duration>
        <StartTime>2025-02-03T07:59:00Z</StartTime>
        <EndTime>2025-02-03T08:05:30Z</EndTime>
        <!-- ... -->

Wenn nicht von und zu einer Haltestelle gerechnet wurde, dann kommen zuerst Legs, die zur Haltestelle führen.
Ansonsten kommt ein TimedLeg als erstes Leg. Hier ein Beispiel mit einem ContinousLeg (Fussweg) zum Beginn:

<Leg>
    <Id>1</Id>
    <Duration>PT2M</Duration>
    <ContinuousLeg>
        <LegStart>
            <GeoPosition>
                <siri:Longitude>7.45939</siri:Longitude>
                <siri:Latitude>46.94783</siri:Latitude>
            </GeoPosition>
            <Name>
                <Text xml:lang="de">46.947825,7.459388</Text>
            </Name>
        </LegStart>
        <LegEnd>
            <siri:StopPointRef>8590034</siri:StopPointRef>
            <Name>
                <Text xml:lang="de">Bern, Bärenpark</Text>
            </Name>
        </LegEnd>
        <Service>
            <PersonalModeOfOperation>own</PersonalModeOfOperation>
            <PersonalMode>foot</PersonalMode>
        </Service>
        <Duration>PT2M</Duration>
        <Length>121</Length>
    </ContinuousLeg>
</Leg>
<Leg>
    <Id>2</Id>
    <Duration>PT4M</Duration>
    <TimedLeg>
        <LegBoard>
            <siri:StopPointRef>ch:1:sloid:90034:0:2</siri:StopPointRef>
            <StopPointName>
                <Text xml:lang="de">Bern, Bärenpark</Text>
            </StopPointName>
            <NameSuffix>
                <Text xml:lang="de">PLATFORM_ACCESS_WITH_ASSISTANCE</Text>
            </NameSuffix>
            <ServiceDeparture>
                <TimetabledTime>2025-02-03T08:01:00Z</TimetabledTime>
                <EstimatedTime>2025-02-03T08:01:30Z</EstimatedTime>
            </ServiceDeparture>
            <Order>1</Order>
        </LegBoard>
        <LegIntermediate>
            <siri:StopPointRef>ch:1:sloid:90033:0:2</siri:StopPointRef>
            <StopPointName>
                <Text xml:lang="de">Bern, Nydegg</Text>
            </StopPointName>
            <NameSuffix>
                <Text xml:lang="de">PLATFORM_ACCESS_WITH_ASSISTANCE</Text>
            </NameSuffix>
            <ServiceArrival>
                <TimetabledTime>2025-02-03T08:02:00Z</TimetabledTime>
                <EstimatedTime>2025-02-03T08:02:30Z</EstimatedTime>
            </ServiceArrival>
            <ServiceDeparture>
                 <TimetabledTime>2025-02-03T08:02:00Z</TimetabledTime>
                 <EstimatedTime>2025-02-03T08:02:30Z</EstimatedTime>
            </ServiceDeparture>
            <Order>2</Order>
        </LegIntermediate>
        <LegIntermediate>
            <siri:StopPointRef>ch:1:sloid:90032:0:2</siri:StopPointRef>
            <StopPointName>
                <Text xml:lang="de">Bern, Rathaus</Text>
            </StopPointName>
            <NameSuffix>
                <Text xml:lang="de">ALTERNATIVE_TRANSPORT</Text>
            </NameSuffix>
            <ServiceArrival>
                <TimetabledTime>2025-02-03T08:03:00Z</TimetabledTime>
                <EstimatedTime>2025-02-03T08:03:30Z</EstimatedTime>
            </ServiceArrival>
            <ServiceDeparture>
                <TimetabledTime>2025-02-03T08:03:00Z</TimetabledTime>
                <EstimatedTime>2025-02-03T08:03:30Z</EstimatedTime>
            </ServiceDeparture>
            <Order>3</Order>
        </LegIntermediate>
        <LegAlight>
            <siri:StopPointRef>ch:1:sloid:7110:0:6</siri:StopPointRef>
            <StopPointName>
                <Text xml:lang="de">Bern, Zytglogge</Text>
            </StopPointName>
            <NameSuffix>
                <Text xml:lang="de">PLATFORM_ACCESS_WITH_ASSISTANCE</Text>
            </NameSuffix>
            <PlannedQuay>
                <Text xml:lang="de">C</Text>
            </PlannedQuay>
            <EstimatedQuay>
                <Text xml:lang="de">C</Text>
            </EstimatedQuay>
            <ServiceArrival>
                <TimetabledTime>2025-02-03T08:05:00Z</TimetabledTime>
                <EstimatedTime>2025-02-03T08:05:30Z</EstimatedTime>
            </ServiceArrival>
            <Order>4</Order>
         </LegAlight>
         <Service>
            <Mode>
                <PtMode>bus</PtMode>
                <siri:BusSubmode>localBus</siri:BusSubmode>
                <Name>
                    <Text xml:lang="de">Bus</Text>
                </Name>
                <ShortName>
                    <Text xml:lang="de">B</Text>
                </ShortName>
             </Mode>
             <ConventionalModeOfOperation>scheduled</ConventionalModeOfOperation>
             <TrainNumber>9992</TrainNumber>
             <siri:LineRef>ojp:92012:_x0020_</siri:LineRef>
             <siri:OperatorRef>827</siri:OperatorRef>
             <PublicCode>Bus</PublicCode>
             <PublishedServiceName>
                 <Text xml:lang="de">12</Text>
             </PublishedServiceName>
             <ProductCategory>
                 <Name>
                     <Text xml:lang="de">Bus</Text>
                 </Name>
                 <ShortName>
                     <Text xml:lang="de">B</Text>
                 </ShortName>
                 <ProductCategoryRef>29</ProductCategoryRef>
             </ProductCategory>
             <siri:DirectionRef>R</siri:DirectionRef>
             <OperatingDayRef>2025-02-03</OperatingDayRef>
             <DestinationStopPointRef>8576646</DestinationStopPointRef>
             <OriginText>
                 <Text xml:lang="de">n/a</Text>
             </OriginText>
             <DestinationText>
                 <Text xml:lang="de">Bern, Bahnhof</Text>
             </DestinationText>
             <JourneyRef>ojp-92-12-_-j25-1-419-TA</JourneyRef>
             <Attribute>
                 <UserText>
                     <Text xml:lang="de">VELOS: Platzzahl eingeschränkt</Text>
                 </UserText>
                 <Code>A__VB</Code>
             </Attribute>
<!-- ... -->
        </Service>
    </TimedLeg>
</Leg>
+

Bemerkungen:

  • Die Attribute bilden sich aus den bekannten Attributen aus HRDF mit A__ .  Das Mapping erfolgt dabei gemäss Notes2FacilitiesMappingFile.
  • Die verfügbaren Modes sind aus den Verkehrshinweisen abgeleitet. In einigen Fällen entsprechen diese auch einer Kombination von SIRI Facilities.
  • Um den FareRequest erstellen zu können sind in der Response die Attribute mit Tarifcodes eingefügt, welche dann für die Anfrage an das System NOVA relevant sind.
<!-- ... -->
<Attribute>
    <UserText>
        <Text xml:lang="de">TC-006000</Text>
    </UserText>
    <Code>T_1SX</Code>
</Attribute>
<!-- ... -->

Umstieg und BehiG-Umsetzung

Beim Umsteigen werden TransferLegs wie folgt ausgegeben:

<!-- ... -->
<Leg>
    <Id>2</Id>
    <Duration>PT6M</Duration>
    <TransferLeg>
        <TransferType>walk</TransferType>
        <LegStart>
            <siri:StopPointRef>8507000</siri:StopPointRef>
            <Name>
                <Text xml:lang="de">Bern</Text>
            </Name>
        </LegStart>
        <LegEnd>
            <siri:StopPointRef>8507000</siri:StopPointRef>
            <Name>
                <Text xml:lang="de">Bern</Text>
            </Name>
        </LegEnd>
        <Duration>PT6M</Duration>
    </TransferLeg>
</Leg>
<!-- ... -->

Spezielle Transfers mit dem Tag “TranferType” mit dem Inhalt “remainInVehicle” und “changeWithinVehicle” sind Schwächungs- und Flügel-Züge. Die Verstärkung ist in der Regel in der Kundeninfo nicht ersichtlich.

Um dem BehiG gerecht zu werden, werden die Infos betreffend der Zugänglichkeit mit dem Rollstuhl jeweils pro Fahrt in den Tags “LegBord” und “LegAlight” ausgegeben:

<!-- ... -->
<TimedLeg>
    <LegBoard>
        <siri:StopPointRef>ch:1:sloid:7000:5:10</siri:StopPointRef>
        <StopPointName>
            <Text xml:lang="de">Bern</Text>
        </StopPointName>
        <PlannedQuay>
            <Text xml:lang="de">10</Text>
        </PlannedQuay>
        <EstimatedQuay>
            <Text xml:lang="de">10</Text>
        </EstimatedQuay>
        <NameSuffix>
            <strong><Text xml:lang="de">PLATFORM_ACCESS_WITH_ASSISTANCE_WHEN_NOTIFIED</Text></strong>
        </NameSuffix>
        <ServiceDeparture>
            <TimetabledTime>2025-02-03T14:47:00Z</TimetabledTime>
            <EstimatedTime>2025-02-03T14:47:30Z</EstimatedTime>
        </ServiceDeparture>
        <Order>1</Order>
    </LegBoard>
<!-- ... -->
    <LegAlight>
        <siri:StopPointRef>ch:1:sloid:7100:3:4</siri:StopPointRef>
        <StopPointName>
            <Text xml:lang="de">Thun</Text>
        </StopPointName>
        <NameSuffix>
            <strong><Text xml:lang="de">PLATFORM_ACCESS_WITHOUT_ASSISTANCE</Text></strong>
        </NameSuffix>
        <PlannedQuay>
            <Text xml:lang="de">4</Text>
        </PlannedQuay>
        <EstimatedQuay>
            <Text xml:lang="de">4</Text>
        </EstimatedQuay>
        <ServiceArrival>
            <TimetabledTime>2025-02-03T15:18:00Z</TimetabledTime>
            <EstimatedTime>2025-02-03T15:18:00Z</EstimatedTime>
        </ServiceArrival>
        <Order>10</Order>
    </LegAlight>
<!-- ... -->

Dabei sind folgende Werte möglich und für die Kundeninfo werden nachfolgende Symbole und Texte vorgeschlagen:

  • Autonomie / PLATFORM_ACCESS_WITHOUT_ASSISTANCE
  • Rampeneinsatz / PLATFORM_ACCESS_WITH_ASSISTANCE
  • Voranmeldung / PLATFORM_ACCESS_WITH_ASSISTANCE_WHEN_NOTIFIED
  • Shuttle / ALTERNATIVE_TRANSPORT
  • kein Zugang / PLATFORM_NOT_WHEELCHAIR_ACCESSIBLE
  • keine Info / NO_DATA

Verwendete geographische Information

Das Fusswegrouting basiert auf OpenStreetMap (OSM). OSM-Daten sind verfügbar unter der Open Data Commons Open Database-Lizenz (ODbL). Anwendungen, die OSM nutzen, müssen OSM als Quelle angeben. Auf welche Art dies geschehen kann (je nach Art der Anwendung), kann in den OSM Richtlinien für Namensnennungen nachgelesen werden.

Weiterführende Angaben

Autotunnelzüge suchen

Beispiel der Anfrage für einen Autotunnelzug (ATZ):

<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-03T10:05:00.552Z</siri:RequestTimestamp>
            <siri:RequestorRef>SKIplus</siri:RequestorRef>
            <OJPTripRequest>
                <siri:RequestTimestamp>2025-02-03T10:05:00.552Z</siri:RequestTimestamp>
                <Origin>
                    <PlaceRef>
                        <StopPlaceRef>8511171</StopPlaceRef>
                        <Name>
                            <Text>Kandersteg Autoverlad (Kandersteg)</Text>
                        </Name>
                    </PlaceRef>
                    <DepArrTime>2025-02-03T08:00:15.652Z</DepArrTime>
                </Origin>
                <Destination>
                    <PlaceRef>
                        <StopPlaceRef>8519655</StopPlaceRef>
                        <Name>
                            <Text>Goppenstein Autoverlad (Ferden)</Text>
                        </Name>
                    </PlaceRef>
                </Destination>
                <Params>
                    <IncludeAllRestrictedLines>true</IncludeAllRestrictedLines>
                    <NumberOfResults>1</NumberOfResults>
                    <IncludeTrackSections>true</IncludeTrackSections>
                    <IncludeLegProjection>true</IncludeLegProjection>
                    <IncludeTurnDescription>true</IncludeTurnDescription>
                    <IncludeIntermediateStops>true</IncludeIntermediateStops>
                    <UseRealtimeData>explanatory</UseRealtimeData>
                </Params>
            </OJPTripRequest>
        </siri:ServiceRequest>
    </OJPRequest>
</OJP>