In this chapter:

SiteFrame

Glossary definition

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 stops
    • Quays - 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.).  

General NeTEx definition

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

Glossary definition

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.  

General NeTEx definition

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 of Quays.
  • 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 in privateCodes/PrivateCode with type="didok", and the same value must additionally be listed in the KeyList (KeyValue with matching Key). Both are required — the PrivateCode for direct lookup, the KeyList entry for generic key/value tooling.
  • ShortName is not used on StopPlace. In particular, the DIDOK number must never be placed in ShortName — this was common practice under Profile 1.0 / HRDF-based exports and is explicitly discontinued under RV 2.0.
  • ValidBetween: Every StopPlace carries a ValidBetween with a FromDate. Since StopPlace is infrastructure master data (not a timetable-period object), no ToDate is 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

Glossary definition

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

General NeTEx definition

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 Quay may serve one or more VehicleStoppingPlaces and be associated with one or more StopPoints. The Swiss profile does not currently model that.
  • A Quay may contain other sub Quays. A child Quay must be physically contained within its parent Quay. Furthermore:
    • A nested Quay is 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 – BoardingPosition serve this function.
    • Nested Quays and AccessSpaces must always be on the same Level as their parent (not currently modelled).
  • 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

Glossary definition

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.

General NeTEx definition

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 TopographicPlace represent the cantons and communes in Switzerland. Each StopPlace should reference the TopographicPlace representing 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  

General NeTEx definition

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 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