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
Contained Elements
StopPlaces – stations and stopsQuays - platforms where passengers can board a vehicle
TopographicPlaces - geographical and administrative area context for stops- Not currently modelled: entrances, levels, equipments, paths, accessibility properties, points of interest
Table
| Sub | Element | Usage | Card | Type | Description | Note |
|---|---|---|---|---|---|---|
| SiteFrame | expected | 1..1 | unknown | |||
| + | topographicPlaces | expected | 1..1 | unknown | ||
| ++ | TopographicPlace | expected | 1..1 | unknown | Used to represent countries if outside CH, cantons and communes if in CH. Cantons are referenced from StopPlaces. | |
| + | stopPlaces | mandatory | 1..1 | unknown | ||
| ++ | StopPlace | mandatory | 1..1 | unknown | ||
| + | siteFacilitySets | optional | 1..1 | unknown | We expect the SiteFacilitySet in the ResourceFrame | |
| ++ | SiteFacilitySet | optional | 1..1 | unknown |
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 JourneyPattern 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
| Sub | Element | Usage | Card | Type | Description | Note |
|---|---|---|---|---|---|---|
| StopPlace | mandatory | 1..1 | unknown | In some cases the id is not a sloid. | ||
| + | ValidBetween | optional | 1..1 | unknown | This can be used to show, when the StopPlace can be used. | |
| ++ | FromDate | mandatory | 1..1 | unknown | ||
| ++ | ToDate | mandatory | 1..1 | unknown | ||
| + | keyList | mandatory | 1..1 | unknown | Key value pairs for DIDOK number and SLOID | |
| ++ | KeyValue | mandatory | 1..1 | unknown | ||
| +++ | Key | mandatory | 1..1 | unknown | ||
| +++ | Value | mandatory | 1..1 | unknown | ||
| + | privateCodes | mandatory | 1..1 | unknown | ||
| ++ | PrivateCode | mandatory | 1..1 | unknown | In Switzerland to be filled with the didok number and the sloid | |
| ++ | @type | mandatory | 1..1 | xsd:string | Attribute type | |
| + | Extensions | optional | 1..1 | unknown | ||
| ++ | HafasPriority | optional | 1..1 | unknown | Interchange priority if several alternative interchange possibilities exist. Integer allows for finer grained value than standard element Weighting. | |
| ++ | HafasKMInfo | optional | 1..1 | unknown | Special value for Hafas environments. | |
| + | Name | mandatory | 1..1 | unknown | ||
| + | Centroid | mandatory | 1..1 | unknown | Global or national location | |
| ++ | Location | mandatory | 1..1 | unknown | Note concerning coordinates - The main coordinates are given as WSG84. | |
| +++ | Longitude | mandatory | 1..1 | unknown | ||
| +++ | Latitude | mandatory | 1..1 | unknown | ||
| +++ | Altitude | optional | 1..1 | unknown | ||
| + | alternativeNames | optional | 1..1 | unknown | Alternative names for the StopPlace. We will also use these for synonyms. From INFO+ the synonyms are used on the Stop-Place. | |
| + | TopographicPlaceRef | optional | 1..1 | unknown | Id to the county, community, canton or country. | |
| + | StopPlaceType | optional | 1..1 | unknown | ||
| + | Weighting | optional | 1..1 | unknown | Default relative weighting to be used for stop place. Cf. HafasPriority in Extensions. | |
| + | quays | expected | 1..1 | unknown | The Quays contained in the StopPlace - platforms, jetties, bays, taxi ranks, and other points of physical access to vehicles. | |
| ++ | Quay | expected | 1..1 | unknown |
Example
<?xml version="1.0" encoding="UTF-8"?>
<StopPlace id="ch:1:sloid:7000" version="1">
<!-- In some cases the id 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</PrivateCode>
<!-- In Switzerland to be filled with the didok number and the sloid -->
<PrivateCode type="sloid">ch:1:sloid:7000</PrivateCode>
</privateCodes>
<Extensions>
<HafasPriority>
<!-- Interchange priority if several alternative interchange possibilities exist. Integer allows for finer grained value than standard element Weighting. -->
<Value>4</Value>
</HafasPriority>
<HafasKMInfo>
<!-- Special value for Hafas environments. -->
<Value>1000</Value>
<!-- Special value for Hafas environments. -->
</HafasKMInfo>
</Extensions>
<Name>Bern</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. From INFO+ the synonyms are used on the Stop-Place. -->
<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>
<Weighting>preferredInterchange</Weighting>
<!-- Default relative weighting to be used for stop place. Cf. HafasPriority in Extensions. -->
<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 responsability 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. - The main connection between DIDOK codes and the NeTEx export are the
ScheduledStopPoints. They typically have the sameId(except for thein the identifier string) as the `StopPlace`. Exceptions are meta stations and local public transport already using assignment to “Haltekanten”. In such cases the `ScheduledStopPoint` is more refined than the DIDOK and UIC 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.
Quay
Purpose
A specific boarding or alighting position (platform, stand, bay) within a StopPlace where passengers physically meet vehicles.
Table
Quai.md
Example
<?xml version="1.0" encoding="UTF-8"?>
<StopPlace id="ch:1:sloid:7000" version="1">
<!-- In some cases the id 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</PrivateCode>
<!-- In Switzerland to be filled with the didok number and the sloid -->
<PrivateCode type="sloid">ch:1:sloid:7000</PrivateCode>
</privateCodes>
<Extensions>
<HafasPriority>
<!-- Interchange priority if several alternative interchange possibilities exist. Integer allows for finer grained value than standard element Weighting. -->
<Value>4</Value>
</HafasPriority>
<HafasKMInfo>
<!-- Special value for Hafas environments. -->
<Value>1000</Value>
<!-- Special value for Hafas environments. -->
</HafasKMInfo>
</Extensions>
<Name>Bern</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. From INFO+ the synonyms are used on the Stop-Place. -->
<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>
<Weighting>preferredInterchange</Weighting>
<!-- Default relative weighting to be used for stop place. Cf. HafasPriority in Extensions. -->
<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
- In standard NeTEx, a
Quaymay serve one or moreVehicleStoppingPlaces and be associated with one or moreStopPointss. 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 it parents. - 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.
- 👉 Please note: 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](https://www.oev-info.ch/de/datenmanagement/swiss-identification-public-transport-sid4pt/swiss-location-identification-sloid “https://www.oev-info.ch/de/datenmanagement/swiss-identification-public-transport-sid4pt/swiss-location-identification-sloid”) |
| 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 |
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:
- We will at some point include also
Quays that are not used actually to have the base data, if they are needed in real-time. - 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
| Sub | Element | Usage | Card | Type | Description | Note |
|---|---|---|---|---|---|---|
| TopographicPlace | mandatory | 1..1 | unknown | |||
| + | Descriptor | mandatory | 1..1 | unknown | ||
| ++ | Name | mandatory | 1..1 | unknown | ||
| ++ | ShortName | expected | 1..1 | unknown | Abbreviation of the canton (leave empty if TopographicPlaceType is country) | |
| + | TopographicPlaceType | mandatory | 1..1 | unknown | Allowed values: country, county | |
| + | ParentTopographicPlaceRef | optional | 1..1 | unknown | 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</ShortName>
<!-- Abbreviation of the canton (leave empty if TopographicPlaceType is country) -->
</Descriptor>
<TopographicPlaceType>county</TopographicPlaceType>
<!-- Allowed values: country, county -->
<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
| Sub | Element | Usage | Card | Type | Description | Note |
|---|---|---|---|---|---|---|
| Centroid | expected | 1..1 | unknown | Global or national location | ||
| + | Location | mandatory | 1..1 | unknown | Note concerning coordinates - The main coordinates are given as WSG84. | |
| ++ | Longitude | mandatory | 1..1 | unknown | ||
| ++ | Latitude | mandatory | 1..1 | unknown | ||
| ++ | Altitude | optional | 1..1 | unknown | ||
| ++ | pos | optional | 1..1 | unknown | EPSG:2056 is LV95. We use it in the 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 xmlns:ns0="http://www.opengis.net/gml/3.2" srsName="EPSG:2056">2600037.945 1199749.812</pos>
<!-- EPSG:2056 is LV95. We use it in the export. -->
</Location>
</Centroid>
→ Template
Usage Notes
The Centroid always 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