From railML 2 Wiki
Jump to navigation Jump to search


Scheme description / Schemenbeschreibung

Position of speedChange in the XML-Tree / Position von speedChange im XML-Baum

Multiplicity / Anzahl


Semantics / Bedeutung

A <speedChange> defines a track element in which position the maximum allowed speed on a track changes. The maximum allowed speed is given in km/h. (introduced with version 2.3): If the <speedChange> is used to model the end of a temporary speed restriction zone without specifying the ongoing maximum allowed speed, the vMax parameter shall be assigned the value "end". For versions before railML® 2.3, the end of a temporary speed restriction shall be modeled with the "virtual" speed value "999.9".
Please, be aware of the semantic constraint(s)!

Attributes of speedChange / Attribute von speedChange

  • id: XML-file-wide unique, machine-interpretable identity, required for later referencing that element internally. For a detailed explanation see Dev:identities.
    XML-Datei-weit eindeutige, maschineninterpretierbare Identität, die für die spätere interne Referenzierung dieses Elements erforderlich ist. Für eine detaillierte Erklärung siehe Dev:identities.
  • code (introduced with version 2.1): Machine-interpretable string (e.g. an abbreviation) used for identification of the object across exchange partners, usecase specific uniqueness constraints may apply. Please see our description of the differences between id, code and human-readable identifiers.
    Maschineninterpretierbare Zeichenkette (z.B. Abkürzung), die zur Identifizierung des Objekts auch bei Austauschpartnern verwendet wird, wobei spezifische Eindeutigkeitsbeschränkungen gelten können. Bitte beachten Sie unsere Erläuterung zu den Unterschieden zwischen id, code and menschenlesbaren Kennzeichnungen.
  • name: Established, human-readable short string, giving the object a name. Not intended for machine interpretation, please see our notice on human interpretable data fields.
    Etablierte, menschenlesbare kurze Zeichenkette, die das Objekt benennt. Nicht zur maschinellen Interpretation bestimmt, siehe Hinweise zu menschenlesbaren Datenfeldern.
  • description: Human-readable, more detailed description as addition to the name. It should give additional explanations or hints to the contents of this element. Not intended for machine interpretation, please see our notice on human interpretable data fields.
    Menschenlesbare, detailliertere Beschreibung als Ergänzung zu name. Sie soll zusätzliche Erläuterungen oder Hinweise auf den Inhalt dieses Elements geben. Nicht zur maschinellen Interpretation bestimmt, siehe Hinweise zu menschenlesbaren Datenfeldern.


  • xml:lang (introduced with version 2.1): This is a unique identifier of language. It uses basically the language standard IETF BCP 47 (external link) which may be different to ISO 639-1 (external link) or ISO 639-2 (external link). For mapping hints see relation to other standards (external link).
    This defines the language used for name and description. Use <additionalName> to provide a name and/or description in other languages.}
  • pos: This is the position on a track defined as distance from its start (trackBegin) regardless the "absolute mileage" in @absPos.
    Das ist die Position des Elements auf einem Track i.S. der realen Entfernung zum trackBegin. Sie ist damit unabhängig von der mit absPos modellierten Strecken-Kilometrierung.
🗒️ For an explanation of the differences between @pos and @absPos see <mileageChange>
  • absPos: This is the position on a track as absolute mileage/chainage.
    Das ist die Position des Elements im Referenzsystem der Strecken-Kilometrierung.
🗒️ For an explanation of the differences between @pos and @absPos see <mileageChange>
  • absPosOffset (deprecated with version 2.1): The semantics of this attribute aren't very clear. It seems to be redundant to the definitions with mileageChanges in "overlapping regions".
  • dir: This defines the validity of speedChange along the track. Possible values are:
  • up This denotes the direction from the <trackBegin> to the <trackEnd> (increasing relative position values).
  • down This goes opposite to up (decreasing relative position values).
  • trainCategory (deprecated with version 2.2) This is a category name for trains. Use the new attribute etcsTrainCategory (see below) instead. Don't confuse with <category>!
  • etcsTrainCategory: (introduced with version 2.2)(deprecated with version 2.5) in railML® 2.2 to railML® 2.4: the international train category number as specified on page 38 in ERA_ERTMS_040001 "Assignment of values to ETCS variables" v1.9 from 10/07/12. In railML® 2.5: DEPRECATED. Use the new attribute etcsTrainCategory in linked <speedProfile> instead
  • profileRef: reference to a speedProfile
  • status defines the status of the speedChange element from perspective of its availability
  • vMax: maximum allowed speed in km/h (or (introduced with version 2.3): the end of a restriction)
  • trainRelation (introduced with version 2.2) Reference to the part of the train from where the speed change is valid. Normally, a speed change with a speed that is higher than the permitted speed in the section before will be valid only after the end of the train has passed the speed change. On the contrary, a speed change with a speed value that is lower than the permitted speed in the section before applies already when the head of train passes the speedChange. If the attribute is not given, it means that the information is not known. See notes for further information.
  • mandatoryStop: (introduced with version 2.2) specifying the speedChange as a mandatory stop point, e.g. in front of a level crossing. If the mandatory stop point is physically visualized by a signal/panel, the attribute signalised shall be set to true. Further, the related <signal> shall reference the <speedChange>.
  • signalised (introduced with version 2.2) Indicates whether the speed aspect is shown next to the track by a signal or panel (=true/1) or not (=false/0). For speed changes which are printed in a "Driver's timetable" only but not shown at track-site, use false/0. This is aimed to be used to create special caution for speed changes which are not shown at track-side by special 'highlighting' e. g. in the Driver's timetable. In the meaning of 'on the safe side' this may also apply to speed changes with no proper pre-signalisation (since the pre-signalisation is normally more important than the signalisation at the actual beginning of a speed restriction). A speed change is treated as not pre-signalised if there is at least one route at which a train can pass the speed change decreasing and did not pass any pre-signalisation for the speed reduction a proper braking distance before.

Syntactic Constraints / Syntaktische Beschränkungen

Please, be aware of the semantic constraint(s)!

  • id: xs:ID, required
    a string, starting with a letter (a..zA..Z) or an underscore (_),
    followed by a non-colonized and non-spaced string consisting of letters, digits, points (.), dashes (-) or underscores (_)
  • code: xs:string, optional
  • name: xs:string, optional
  • description: xs:string, optional
  • xml:lang: xs:language, language identification, optional
  • pos: tLengthM (xs:decimal, 6 fraction digits, length value measured in meter); required; must be greater than or equal to zero, less than or equal to the track's length
  • absPos: tLengthM (xs:decimal, 6 fraction digits, length value measured in meter); optional
  • absPosOffset: xs:decimal, 6 fraction digits, length value measured in meter; optional
  • dir: xs:string, generic type for more constrained direction statements: enumeration up, down; derived from tLaxDirection; optional
  • trainCategory: xs:string; optional
  • etcsTrainCategory: xs:integer; optional
  • profileRef: tGenericRef (xs:IDREF); optional
  • status: xs:string; optional
  • vMax: tSpeedKmPerHour (xs:decimal, 5 digits and 1 fraction digit with minimum value 0, speed value measured in km/h); required
(introduced with version 2.3): union of tSpeedKmPerHour and the enumeration value of "end"

Semantic Constraints / Semantische Beschränkungen

Private-cloud-icon.png Semantic Constraint "IS:011":

  • Every <track> has to have at least one <speedChange> at the track begin with parameters @pos="0" and @dir="up".
  • Every <track> has to have at least one <speedChange> at the track end with parameters @pos="{value equal to trackEnd@pos}" and @dir="down".
  • Only applies if speedChanges are exported at all [1]
  • It also only applies if both directions can be accessed, otherwise, corresponding exceptions would have to apply.

Compare #425
Proposed on March 14th 2022
Approved on November 10th 2021
Discuss this semantic constraint
Please, recognize our guidelines on semantic constraints

Best practice & Examples / Empfohlene Anwendung & Beispiele

Consider railML® 2.3 example of Middle Rhine Railway by GPSinfradat (link to the railML® website).

This code example defines <speedChange> of track adjacent to Bft Bingen (Rhein) Vorbahnhof station.

  <speedChange id="sc2630i0" dir="up" pos="0" vMax="0" absPos="91104" xml:lang="en" description="The value &quot;0&quot; has been set because the maximum permitted speed at the beginning of the route is unknown." trainRelation="headOfTrain"/>
  <speedChange id="sc26300" dir="up" pos="582" vMax="140" absPos="91632" signalised="true" trainRelation="headOfTrain"/>
  <speedChange id="sc26301" dir="up" pos="15613" vMax="110" absPos="106663" signalised="true" trainRelation="headOfTrain"/>

Consider railML® 2.2 example of East Saxony railway network by FBS (link to the railML® website).

This code example defines <speedChange> of track located between Arnsdorf West and Arnsdorf Nord junctions.

  <speedChange id='spc_80.6228u1_0' pos='0' absPos='942' dir='up' profileRef='spp_0' vMax='100'/>
  <speedChange id='spc_80.6228d2_942' pos='942' absPos='23982' dir='down' profileRef='spp_1' vMax='100'/>
  <speedChange id='spc_80.6228u3_0' description='R500' pos='0' absPos='942' dir='up' profileRef='spp_2' vMax='100'/>
  <speedChange id='spc_80.6228u3_112' pos='112' absPos='830' dir='up' profileRef='spp_2' vMax='110'/>
  <speedChange id='spc_80.6228d4_942' pos='942' absPos='23982' dir='down' profileRef='spp_2' vMax='100'/>


Notes / Anmerkungen

General information on positioning

Positive pos values describe the distance from the track's begin. The track length is derived from the pos value in <trackEnd>.

The absolute mileage refered to by absPos is usually found on technical drawings of the track layout or on mileage posts next to the track.

Relationships between overlapping speed changes
Beziehungen zwischen sich überlagernden Geschwindigkeitswechseln

All speed changes are to be understood to act independently from each other: A speed change at the front of a train does not affect the speed changes still 'under' the train. The lowest of all speed changes currently valid for a train is relevant. This explains why there is no trainRelation="headOfTrainIfDecreasingAndEndOfTrainIfIncreasing" enumeration value. If the speed changes come closer than the length of the train (which may always be the case), the train has to maintain several speed restrictions. If the train passes an increasing speed change (valid for headOfTrain) with its front but has not yet passed a lower increasing speed change (valid for endOfTrain) with its end, the lower speed still has to be maintained - in spite of the new speed change being valid for head of train. But anyway, the train has also to remember the new speed, so it cannot ignore the new speed change.

This is only another (but less obvious) variant of the very common case where a train is in one speed restriction with it’s end and already in a next speed restriction with it’s front, so never enjoying the raised speed between both restrictions - a case which all drivers of the world must handle.

Usage of vMax='end' and dir

Speed changes are always understood directional. This means that a speed change that is specified without providing the attribute dir cannot be interpreted and shall be ignored. The direction is also important when specifying speed changes that are terminated by a speed change with the attribute vMax set to the value 'end'. If the speed applies to the nominal direction of the enclosing <track>, it is expected to specify the terminating <speedChange> with a higher pos value than the corresponding initiating <speedChange>. When describing a speed change that is terminated as such in reverse direction of the enclosing <track> the terminating <speedChange> (the one with vMax = 'end') is expected to have a lower pos value.
It is also important to note that a terminating <speedChange> always relates to initiating speed changes that refer to the same <speedProfile>. In case a terminating <speedChange> does not refer to any <speedProfile>, it terminates ALL previous speed changes (with respect to the dir attribute).

Mandatory braking Betriebsbremsung

In railML® #227 the implementation of a "mandatory braking" attribute has been discussed. In the end it was decided not to add a new parameter to <speedChange>, because the final speed after braking is not specified. Users looking for a way to model mandatory braking sections for the beginning should think of choosing a user-specific extension under <trackElements> and come up with new suggestions for railML® 3 if needed.

Open issues / Offene Punkte/Pendenzen

Not yet described. / Noch nicht beschrieben.