Dev:Reversing trains and formations

From railML 3 Wiki
Jump to navigation Jump to search

This article explains basic concepts of handling formation orientation within the timetable subschema.

Dieser Artikel erklärt die grundlegenden Konzepte des Umgangs mit der Fahrtrichtung von Zügen im Timetable-Subschema.

Reversing trains and formations

In the <timetable> scheme, there are two elements or attributes concerning the running direction of a train formation: <activityTrainReverse> and <formationInformation>.orientationReversed. They may seem to be redundant and may possibly be mixed. This shall try to explain the difference between the two:

Concerning the meaning of <activityTrainReverse>

This indicates that the train (part) changes its running direction at the parent base itinerary point. It includes all operational actions that may be necessary to do so. Examples are:

  • reversal with identical formation, but in reversed order (if it has more than one vehicle) and vehicle orientation (if it is given).
  • reversal with the engine coupled to the other end of the formation, also known as run-around.
  • reversal with a different engine coupled to the other end of the formation.

This information is mainly intended for passenger information (systems). Some systems may, for example, show a ↔ symbol where the running direction of the train changes.

Concerning the meaning of <formationInformation>.orientationReversed

This has nothing to do with a train changing the running direction. It merely avoids the necessity of creating reversed copies of formations that run in both directions. Instead, a formation reference with <formationInformation>.orientationReversed set to true is equivalent to a reference to a formation with all identical properties except for:

  • the <trainOrder>.orderNumber are in reversed order.
  • the <trainOrder>.orientation (if present) have the opposite value.

This may be useful when the train has an <activityTrainReverse>. But it may also be relevant in other cases.


Consider a train with the following formation:

<formation id="fm-1">
  <trainOrder orderNumber="1" vehicleRef="vh-1" orientation="normal"/> <!-- control car -->
  <trainOrder orderNumber="2" vehicleRef="vh-2"/>                      <!-- 2nd class carriage -->
  <trainOrder orderNumber="3" vehicleRef="vh-3"/>                      <!-- 1st class carriage -->
  <trainOrder orderNumber="4" vehicleRef="vh-4" orientation="reverse"/><!-- engine -->

It runs all day between the stations Arnau and Cstadt.[1] For one direction, referencing fm-1 would be fine:

<formationInformation formationRef="fm-1"/>

But the <operationalTrainSectionPart> for the return journey would have to reference the following formation:

<formation id="fm-2">
  <trainOrder orderNumber="1" vehicleRef="vh-4" orientation="normal"/> <!-- engine -->
  <trainOrder orderNumber="2" vehicleRef="vh-3"/>                      <!-- 1st class carriage -->
  <trainOrder orderNumber="3" vehicleRef="vh-2"/>                      <!-- 2nd class carriage -->
  <trainOrder orderNumber="4" vehicleRef="vh-1" orientation="reverse"/><!-- control car -->

Instead of this near-duplicate, it could also reference the original formation fm-1 itself, but with <formationInformation>.orientationReversed set to true. So, the following are equivalent:

<formationInformation formationRef="fm-2"/>
<formationInformation formationRef="fm-1" orientationReversed="true"/>

Please note: None of the trains do ever change their running direction during a single run.

Semantical Relationship

There is a certain correlation between <activityTrainReverse> and <formationInformation>.orientationReversed. But neither necessarily implies the other.

  • A reversal with an engine change may result in a completely different formation.
  • If the formation changes due to shunting, the new formation could be in reversed orientation without the train changing its running direction.
  • The exporter may choose to export reversed copies of formations, instead of using orientationReversed.
  • ...

There is another way to change the orientation of the formation of a whole train without <formationInformation>.orientationReversed: If there is one <operationalTrainSectionPart> for each vehicle, and no vehicle has a <trainOrder>.orientation attribute:

  <operationTrainSectionPart><formationInformation formationRef="fm-1-1"/></operationTrainSectionPart>
  <operationTrainSectionPart><formationInformation formationRef="fm-1-2"/></operationTrainSectionPart>
  <operationTrainSectionPart><formationInformation formationRef="fm-1-3"/></operationTrainSectionPart>
  <operationTrainSectionPart><formationInformation formationRef="fm-1-4"/></operationTrainSectionPart>

Then the entire formation could be reversed by reversing the order of the <operationTrainSectionPart>s:

  <operationTrainSectionPart><formationInformation formationRef="fm-1-4"/></operationTrainSectionPart>
  <operationTrainSectionPart><formationInformation formationRef="fm-1-3"/></operationTrainSectionPart>
  <operationTrainSectionPart><formationInformation formationRef="fm-1-2"/></operationTrainSectionPart>
  <operationTrainSectionPart><formationInformation formationRef="fm-1-1"/></operationTrainSectionPart>

Additional notes

  • The "standard" orientation can be chosen arbitrarily by the exporting software. It may be with the engine at the front, or with the engine at the end, or anything else.
  • There is no guarantee that the standard orientation of a formation is actually ever used in a railML document. It would be perfectly valid, if all references to a specific formation had <formationTT>.orientationReversed set to true.
  • The order of the vehicles in a formation is defined by increasing <trainOrder>.orderNumber. That is, the lowest order number is at the front of the train, while the highest order number is at the end of the train. Except if <formationTT>.orientationReversed is set to true, which reverses the entire vehicle order.
  • It is not forbidden to use <formationInformation>.orientationReversed with a formation of one single vehicle, even if that vehicle does not have an orientation.


  1. Simple Example: [1]