Stop Modelling
In this chapter:
SiteFrame
Purpose
A SiteFrame contains the physical infrastructure model for public transport — StopPlaces, Quays, and topographic context. It defines the spatial elements that passengers interact with and that other frames reference for stop assignments.
classDiagram
%% Styles
classDef frame fill:#FFF8E1,stroke:#FFB300
classDef contained fill:#E8F4FF,stroke:#1E90FF
classDef external fill:#F6F6F6,stroke:#AAAAAA
%% Frame
class SiteFrame:::frame
%% Contained elements
class StopPlace:::contained {
- centroid
- quays []
}
class Quay:::contained {
- centroid
}
class TopographicPlace:::contained
class Centroid:::contained
%% Containment relations
SiteFrame "1" o-- "0..*" StopPlace : contains
SiteFrame "1" o-- "0..*" TopographicPlace : contains
StopPlace "1" o-- "0..*" Quay : contains
StopPlace "1" o-- "1" Centroid : contains
Quay "1" o-- "1" Centroid : contains
Figure: Elements in SiteFrame
Contained Elements
StopPlaces – stations and stopsQuays - platforms where passengers can board or alight from a vehicle
TopographicPlaces - geographical and administrative area context for stops- Not currently modelled: entrances, levels, equipments, paths, accessibility properties, points of interest
Table
Table: SiteFrame
| Sub | Element | Usage | Card | Type | Description | Note |
|---|---|---|---|---|---|---|
| @id | mandatory | 1..1 | xsd:string | Attribute id | ||
| @version | mandatory | 1..1 | xsd:string | Attribute version | ||
| topographicPlaces | expected | 0..1 | topographicPlacesInFrame_RelStructure | PLACEs in frame. | ||
| + | TopographicPlace | expected | 1..1 | TopographicPlace | A town, city, village, suburb, quarter or other name settlement within a country. Provides a Gazetteer of Transport related place names. | Used to represent countries if outside CH, cantons and communes if in CH. Cantons are referenced from StopPlaces. |
| stopPlaces | mandatory | 0..1 | stopPlacesInFrame_RelStructure | STOP PLACEs in frame. | ||
| + | StopPlace | mandatory | 1..1 | StopPlace | Version of a named place where public transport may be accessed. May be a building complex (e.g. a station) or an on-street location. Can be a STOP PLACE, VEHICLE MEETING POINT, TAXI RANK. Note: If a master id exists for a StopPlace (must be stable and globally unique), then it is best used in the id. Optimally it would be built according IFOPT. It can also be put into one of the privateCodes in addition. If it is stored in KeyValue, then it should be documented well, so that importing systems know, which id is the relevant one. | |
| siteFacilitySets | optional | 0..1 | siteFacilitySetsInFrame_RelStructure | SITE FACILITY SETs in frame . +v1.2.2 | We expect the SiteFacilitySet in the ResourceFrame | |
| + | SiteFacilitySet | optional | 1..1 | SiteFacilitySet | Set of enumerated FACILITY values that are relevant to a SITE (names based on TPEG classifications, augmented with UIC etc.). |
Example
<?xml version="1.0" encoding="UTF-8"?>
<SiteFrame id="ch:1:SiteFrame" version="1">
<topographicPlaces>
<TopographicPlace id="ch:1:TopoGraphicPlace:CH-BE" version="1">
<!-- Used to represent countries if outside CH, cantons and communes if in CH. Cantons are referenced from StopPlaces. -->
<Descriptor>
<Name>Bern</Name>
</Descriptor>
</TopographicPlace>
</topographicPlaces>
<stopPlaces>
<StopPlace id="ch:1:sloid:7000" version="1"/>
</stopPlaces>
<siteFacilitySets>
<!-- We expect the SiteFacilitySet in the ResourceFrame -->
<SiteFacilitySet id="generated" version="1"/>
</siteFacilitySets>
</SiteFrame>
→ Template
Frame Relationships
SiteFrame is independent of other frames but provides the physical stop infrastructure that ServiceFrame references through PassengerStopAssignments. TimetableFrame indirectly depends on SiteFrame through the ServiceJourneyPattern stop sequence. SiteFrame is typically wrapped in a CompositeFrame within a PublicationDelivery.
StopPlace
Purpose
A named physical or virtual location where passengers can board or alight from public transport, containing one or more Quays.
Note that a StopPlace is a distinct concept from the representation of the stop in a timetable – the ScheduledStopPoint. The two can be connected using a PassengerStopAssignment.
Table
In some cases the id of a StopPlace is not a SLOID.
Table: StopPlace
| Sub | Element | Usage | Card | Type | Description | Note |
|---|---|---|---|---|---|---|
| @id | mandatory | 1..1 | xsd:string | Attribute id | ||
| @version | mandatory | 1..1 | xsd:string | Attribute version | ||
| ValidBetween | optional | 1..1 | ValidBetween | OPTIMISATION. Simple version of a VALIDITY CONDITION. Comprises a simple period. NO UNIQUENESS CONSTRAINT. | This can be used to show, when the StopPlace can be used. | |
| + | FromDate | optional | 0..1 | xsd:dateTime | Start date of AVAILABILITY CONDITION. | |
| + | ToDate | optional | 0..1 | xsd:dateTime | End of AVAILABILITY CONDITION. Date is INCLUSIVE. | |
| keyList | mandatory | 1..1 | KeyListStructure | A list of alternative Key values for an element. | Key value pairs for DIDOK number and SLOID | |
| + | KeyValue | mandatory | 1..* | KeyValueStructure | Key value pair for Entity. | |
| ++ | Key | mandatory | 1..1 | xsd:normalizedString | Identifier of value e.g. System. | |
| ++ | Value | mandatory | 0..1 | xsd:anyType | Value associated with QUALITY STRUCTURE FACTOR. | |
| privateCodes | mandatory | 1..1 | PrivateCodesStructure | A list of private codes that uniquely identifiy the element. May be used for inter-operating with other (legacy) systems. +v2.0 | ||
| + | PrivateCode | mandatory | 0..* | PrivateCodeStructure | A private code that uniquely identifies the element. May be used for inter-operating with other (legacy) systems. | In Switzerland to be filled with the DIDOK number and the SLOID. HafasPriority and HafasKMInfo are also types of PrivateCode used in Hafas environments. |
| ++ | @type | mandatory | 1..1 | xsd:string | Attribute type | |
| Name | mandatory | 0..* | MultilingualString | Name of Traveller | The official stop name. If you have different versions one needs to use AlternativeName | |
| Centroid | mandatory | 0..1 | SimplePoint_VersionStructure | Centre Coordinates of GROUP of STOP PLACEs. | Global or national location | |
| + | Name | optional | 0..* | MultilingualString | Name of Traveller | |
| + | Location | mandatory | 0..1 | LocationStructure | Absolute location of EQUIPMENT. | Note concerning coordinates - The main coordinates are given as WSG84. |
| ++ | Longitude | mandatory | 1..1 | LongitudeType | Longitude from Greenwich Meridian. -180 (East) to +180 (West). | |
| ++ | Latitude | mandatory | 1..1 | LatitudeType | Latitude from equator. -90 (South) to +90 (North). | |
| ++ | Altitude | optional | 0..1 | AltitudeType | Altitude. | |
| alternativeNames | optional | 0..1 | alternativeNames_RelStructure | ALTERNATIVE NAMES for MACHINE READABILITY. | Alternative names for the StopPlace. We will also use these for synonyms. | |
| + | AlternativeName | optional | 1..1 | AlternativeName | Alternative Name. | |
| TopographicPlaceRef | optional | 1..* | TopographicPlaceRefStructure | Reference to the identifier of a TOPOGRAPHIC PLACE. | Id to the county, community, canton or country. | |
| StopPlaceType | optional | 0..1 | StopTypeEnumeration | Type of STOP PLACE. | ||
| LimitedUse | optional | 0..1 | LimitedUseTypeEnumeration | Further categorisation of stop as having topographic limitations. | For stops like Sagliains | |
| Weighting | optional | 0..1 | InterchangeWeightingEnumeration | Default rating of the STOP PLACE for making interchanges. | Default relative weighting to be used for stop place. Cf. HafasPriority in Extensions. | |
| quays | expected | 1..1 | quays_RelStructure | QUAYs within the STOP PLACE. | The Quays contained in the StopPlace - platforms, jetties, bays, taxi ranks, and other points of physical access to vehicles. | |
| + | Quay | expected | 1..1 | Quay | A place such as platform, stance, or quayside where passengers have access to PT vehicles, Taxi cars or other means of transportation. A QUAY may contain other sub QUAYs. A child QUAY must be physically contained within its parent QUAY. |
Example
<?xml version="1.0" encoding="UTF-8"?>
<StopPlace id="ch:1:sloid:7000" version="1">
<!-- In some cases the id of a StopPlace is not a SLOID. -->
<ValidBetween>
<!-- This can be used to show, when the StopPlace can be used. -->
<FromDate>2026-01-01T00:00:00</FromDate>
<ToDate>2026-12-31T00:00:00</ToDate>
</ValidBetween>
<keyList>
<!-- Key value pairs for DIDOK number and SLOID -->
<KeyValue>
<Key>DIDOK</Key>
<Value>7000</Value>
</KeyValue>
<KeyValue>
<Key>SLOID</Key>
<Value>ch:1:sloid:7000</Value>
</KeyValue>
</keyList>
<privateCodes>
<PrivateCode type="didok">7000
<!-- In Switzerland to be filled with the DIDOK number and the SLOID. HafasPriority and HafasKMInfo are also types of PrivateCode used in Hafas environments. -->
</PrivateCode>
<PrivateCode type="sloid">ch:1:sloid:7000</PrivateCode>
<PrivateCode type="HafasPriority">4
<!-- Special value for Hafas environments. -->
</PrivateCode>
<PrivateCode type="HafasKMInfo">1000
<!-- Special value for Hafas environments. -->
</PrivateCode>
</privateCodes>
<Name>Bern
<!-- The official stop name. If you have different versions one needs to use AlternativeName -->
</Name>
<Centroid>
<!-- Global or national location -->
<Name/>
<Location>
<!-- Note concerning coordinates - The main coordinates are given as **WSG84**. -->
<Longitude>7.43913088992</Longitude>
<Latitude>46.94883228914</Latitude>
<Altitude>540.2</Altitude>
</Location>
</Centroid>
<alternativeNames>
<!-- Alternative names for the StopPlace. We will also use these for synonyms. -->
<AlternativeName id="ch:1:sloid:7000:it" version="1">
<Name lang="it">Berna</Name>
</AlternativeName>
</alternativeNames>
<TopographicPlaceRef ref="BE-bern" version="1">
<!-- Id to the county, community, canton or country. -->
</TopographicPlaceRef>
<StopPlaceType>railStation</StopPlaceType>
<LimitedUse>interchangeOnly
<!-- For stops like Sagliains -->
</LimitedUse>
<Weighting>preferredInterchange
<!-- Default relative weighting to be used for stop place. Cf. HafasPriority in Extensions. -->
</Weighting>
<quays>
<!-- The Quays contained in the StopPlace - platforms, jetties, bays, taxi ranks, and other points of physical access to vehicles. -->
<Quay id="ch:1:sloid:7000:5:9" version="1"/>
</quays>
</StopPlace>
→ Template
Usage Notes
- All
StopPlaces in Switzerland are identifiable by both a DIDOK number and a SLOID. DIDOK number are under the responsibility of the Department of Transport (BAV). It is possible that in the future the BAV will also regulate “Haltepunkte” and “Haltekanten” and, therefore, the identifiers ofQuays. - Foreign
StopPlaces may be mapped to Swiss DIDOK codes. - Meta-stations will have their own codes. In some cases these are added for operational or searching reasons.
- id-attribute needs to be kept stable between exports.
- DIDOK number placement: The DIDOK number is not transported as free text anywhere on
StopPlace. It is placed inprivateCodes/PrivateCodewithtype="didok", and the same value must additionally be listed in theKeyList(KeyValuewith matchingKey). Both are required — thePrivateCodefor direct lookup, theKeyListentry for generic key/value tooling. ShortNameis not used onStopPlace. In particular, the DIDOK number must never be placed inShortName— this was common practice under Profile 1.0 / HRDF-based exports and is explicitly discontinued under RV 2.0.ValidBetween: EveryStopPlacecarries aValidBetweenwith aFromDate. SinceStopPlaceis infrastructure master data (not a timetable-period object), noToDateis set — validity is open-ended until a future change is published.
Example: DIDOK number and validity on StopPlace
<StopPlace id="ch:1:StopPlace:8503000" version="1">
<ValidBetween>
<FromDate>2026-01-01T00:00:00</FromDate>
</ValidBetween>
<Name>Zürich HB</Name>
<privateCodes>
<PrivateCode type="didok">8503000</PrivateCode>
</privateCodes>
<keyList>
<KeyValue>
<Key>didok</Key>
<Value>8503000</Value>
</KeyValue>
</keyList>
<!-- Quays, Centroid, etc. -->
</StopPlace>
Quay
Purpose
A specific boarding or alighting position (platform, stand, bay) within a StopPlace where passengers physically meet vehicles.
Table
Can be a platform, track, sector group or sector. id is a SLOID whenever possible or generated.
Table: Quay
| Sub | Element | Usage | Card | Type | Description | Note |
|---|---|---|---|---|---|---|
| @id | mandatory | 1..1 | xsd:string | Attribute id | ||
| @version | mandatory | 1..1 | xsd:string | Attribute version | ||
| keyList | expected | 1..1 | KeyListStructure | A list of alternative Key values for an element. | ||
| + | KeyValue | expected | 1..* | KeyValueStructure | Key value pair for Entity. | When no SLOID is possible it may be omitted. |
| ++ | Key | mandatory | 1..1 | xsd:normalizedString | Identifier of value e.g. System. | SLOID is mandatory key |
| ++ | Value | mandatory | 0..1 | xsd:anyType | Value associated with QUALITY STRUCTURE FACTOR. | |
| privateCodes | expected | 1..1 | PrivateCodesStructure | A list of private codes that uniquely identifiy the element. May be used for inter-operating with other (legacy) systems. +v2.0 | ||
| + | PrivateCode | expected | 0..* | PrivateCodeStructure | A private code that uniquely identifies the element. May be used for inter-operating with other (legacy) systems. | |
| ++ | @type | mandatory | 1..1 | xsd:string | Attribute type | |
| Centroid | mandatory | 0..1 | SimplePoint_VersionStructure | Centre Coordinates of GROUP of STOP PLACEs. | Location of Quay. | |
| SiteRef | optional | 0..1 | SiteRefStructure | Reference to parent of SITE, if any. | Can reference the parent Quay or StopPlace | |
| PublicCode | mandatory | 0..1 | PublicCodeStructure | Public code for JOURNEY. | Code used to identify the Quay to the public |
Example
<?xml version="1.0" encoding="UTF-8"?>
<Quay id="ch:1:sloid:7000:5:9" version="1">
<!-- Can be a platform, track, sector group or sector. id is a SLOID whenever possible or generated. -->
<keyList>
<KeyValue>
<!-- When no SLOID is possible it may be omitted. -->
<Key>SLOID
<!-- SLOID is mandatory key -->
</Key>
<Value>ch:1:sloid:7000:5:9</Value>
</KeyValue>
</keyList>
<privateCodes>
<PrivateCode type="sloid">ch:1:sloid:7000:5:9</PrivateCode>
</privateCodes>
<Centroid>
<!-- Location of Quay. -->
<Location>
<Longitude>7.43913088992</Longitude>
<Latitude>46.94883228914</Latitude>
<Altitude>540.2</Altitude>
</Location>
</Centroid>
<SiteRef ref="ch:1:sloid:7000">
<!-- Can reference the parent Quay or StopPlace -->
</SiteRef>
<PublicCode>9
<!-- Code used to identify the Quay to the public -->
</PublicCode>
</Quay>
→ Template
Usage Notes
- In standard NeTEx, a
Quaymay serve one or moreVehicleStoppingPlaces and be associated with one or moreStopPoints. The Swiss profile does not currently model that. - A
Quaymay contain other subQuays. A childQuaymust be physically contained within its parentQuay. Furthermore:- A nested
Quayis always physically contiguous with its parent and so has the same accessibility characteristics as its parent. - Nested
Quays should not be used to mark individual positions on a platform –BoardingPositionserve this function. - Nested
Quays andAccessSpaces must always be on the sameLevelas their parent (not currently modelled).
- A nested
- If the SLOID for platforms is not unique, it will be formed according to the schema: {StopPlace SLOID}_gen:{Quay SLOID}_pf:{Platform Code}.
- If no platform SLOID is available {StopPlace SLOID}_gen:missingSLOID_pf:{Platform Code*} will be used instead.
-
NB: Special characters in the track identifier will be replaced with a dot («.»), for example 21/22 → 21.22.
- id-attribute needs to be kept stable between exports.
In the table below you will find an overview of the possible cases. For more information on SLOID, see Swiss Location Identification (SLOID) öv-info.ch.
| Case | id | sloid in Key/Value, PrivateCode |
|---|---|---|
| Unique track sloid | ch:1:sloid:7000:6:32 | ch:1:sloid:7000:6:32 |
| Non-unique track sloid | ch:1:sloid:7000_gen:ch:1:sloid:7000:0:349752_pf:2A-D | ch:1:sloid:7000:0:349752 |
| Non-unique SLOID with special characters “11/12” | ch:1:sloid:6206_gen:ch:1:sloid:6206:0:11_pf:11.12 | ch:1:sloid:6206:0:11 |
| non platform SLOID | ch:1:sloid:1102381_gen:missingSLOID_pf:1 | |
| No SLOID (abroad) | 8029701_gen:missingSLOID_pf:1 |
Table: SLOID and id in NeTEx
Quays are mapped with the following resolution:
- No hierarchy between the different definitions of quays is foreseen at the moment
- All combinations between sectors of the same quay are considered as independent quays.
- Combinations of several quays are considered as independent quays.
Further notes:
- In the future we intend to also include
Quays that remain unused by the regular timetable - this will alllow to properly handle real-time data that may refer to such “unused”Quays. - Atlas does model the hierarchy of the quays.
TopographicPlace
Purpose
A named geographic area such as a city, municipality, county, or region - used to provide spatial context for StopPlaces, for example when interactively searching for the origin or destination of a trip.
Table
Table: TopographicPlace
| Sub | Element | Usage | Card | Type | Description | Note |
|---|---|---|---|---|---|---|
| @id | mandatory | 1..1 | xsd:string | Attribute id | ||
| @version | mandatory | 1..1 | xsd:string | Attribute version | ||
| Descriptor | mandatory | 1..1 | TopographicPlaceDescriptor_VersionedChildStructure | Structured text descriptor of TOPOGRAPHIC PLACE. | ||
| + | Name | mandatory | 0..* | MultilingualString | Name of Traveller | |
| + | ShortName | expected | 0..* | MultilingualString | Short Name for service | Abbreviation of the canton (leave empty if TopographicPlaceType is country) |
| TopographicPlaceType | mandatory | 0..1 | TopographicPlaceTypeEnumeration | Classification of the TOPOGRAPHIC PLACE as a settlement. Enumerated value. | Allowed values: country, county | |
| ParentTopographicPlaceRef | optional | 0..1 | TopographicPlaceRefStructure | Parent TOPOGRAPHIC PLACE. Reference to another TOPOGRAPHIC PLACE that contains the child TOPOGRAPHIC PLACE completely. Must not be cyclic. | Parent topographic place when it exists. |
Example
<?xml version="1.0" encoding="UTF-8"?>
<TopographicPlace id="ch:1:TopoGraphicPlace:CH-BE" version="1">
<Descriptor>
<Name>Bern</Name>
<ShortName>BE
<!-- Abbreviation of the canton (leave empty if TopographicPlaceType is country) -->
</ShortName>
</Descriptor>
<TopographicPlaceType>county
<!-- Allowed values: country, county -->
</TopographicPlaceType>
<ParentTopographicPlaceRef ref="ch:1:TopoGraphicPlace:CH-BE-Bern" version="1">
<!-- Parent topographic place when it exists. -->
</ParentTopographicPlaceRef>
</TopographicPlace>
→ Template
Usage Notes
- The
TopographicPlacerepresent the cantons and communes in Switzerland. EachStopPlaceshould reference theTopographicPlacerepresenting its canton. - id-attribute needs to be kept stable between exports.
Centroid
Purpose
It provides precise geographic coordinates (WGS84) of a central reference point representing a single point or an area such as a Quayor a StopPlace.
Table
Global or national location
Table: Centroid
| Sub | Element | Usage | Card | Type | Description | Note |
|---|---|---|---|---|---|---|
| Name | expected | 0..* | MultilingualString | Name of Traveller | Global or national location | |
| Location | mandatory | 0..1 | LocationStructure | Absolute location of EQUIPMENT. | Note concerning coordinates - The main coordinates are given as WSG84. | |
| + | Longitude | mandatory | 1..1 | LongitudeType | Longitude from Greenwich Meridian. -180 (East) to +180 (West). | |
| + | Latitude | mandatory | 1..1 | LatitudeType | Latitude from equator. -90 (South) to +90 (North). | |
| + | Altitude | optional | 0..1 | AltitudeType | Altitude. | |
| + | pos | optional | 1..1 | gml:DirectPositionType | EPSG:2056 is LV95. We use it in the INFO+ export. | |
| ++ | @srsName | mandatory | 1..1 | xsd:string | Attribute srsName |
Example
<?xml version="1.0" encoding="UTF-8"?>
<Centroid>
<!-- Global or national location -->
<Location>
<!-- Note concerning coordinates - The main coordinates are given as **WSG84**. -->
<Longitude>7.43913088992</Longitude>
<Latitude>46.94883228914</Latitude>
<Altitude>540.2</Altitude>
<pos srsName="EPSG:2056">2600037.945 1199749.812
<!-- EPSG:2056 is LV95. We use it in the INFO+ export. -->
</pos>
</Location>
</Centroid>
→ Template
Usage Notes
- The
Centroidalways contains a location. - The main coordinates are given as WGS84.
- Required accuracy 4+ decimal positions.
- The Swiss coordinates are added as well, when available (for Swiss stops). The format is LV95. For imports they are not needed, however.
- INFO+ will not use the master data from NeTEx imports, it will rely on the Atlas master data for all Swiss coordinates. INFO+ will, however, use the imported location data of foreign places without DIDOK numbers.
- no id-attribute