Dev:categoryUsage

From railML 2 Wiki
Jump to navigation Jump to search

This article explains basic concepts of train categorization via <category> elements within the timetable subschema.

Dieser Artikel erklärt Grundlagen der Zugkategorisierung mittels <category>-Elementen innerhalb des Timetable-Subschemas.

Train types, categories, products, and passenger usage

Zugarten, Produkte und Passagierverkehr

How to find out whether a train or train part is for passengers or freight?

Wie kann man ermitteln, ob ein Zug oder Zugteil eine "Fahrgastfahrt" ist?

Currently there is no attribute at <train> nor <trainPart> where one can directly deduce from whether a train (part) is for passengers or freight. Rather, the attribute categoryRef of the element <trainPart> has to be „traced back“:

Innerhalb der Elemente <train> und <trainPart> gibt es in railML® derzeit kein Attribut, das unmittelbar erkennen lässt, von welcher Zuggattung ein Zug(teil) ist oder ob es ein Reisezug (Fahrgastfahrt, personenbefördernd) ist. Vielmehr muss hierfür das Attribut categoryRef des Elements <trainPart> „zurückverfolgt“ werden:

<trainPart id="tp_1" name="222" line="EC 200" trainNumber="222" processStatus="planned"
				 timetablePeriodRef="ttp_2020_21" categoryRef="cat_3">

The categories are summarised in an own list at <timetable>. There, the attributes trainUsage and deadRun can be used to determine whether a type of train normally is used for passengers or freight:

Die Zugarten sind innerhalb der Struktur <timetable> in einer eigenen Liste zusammengefasst. Hier können die optionalen Attribute trainUsage und deadRun zu Rate gezogen werden, um festzustellen, ob eine Zugart i. d. R. für Reiseverkehr vorgesehen ist:

    <categories>
      <category id="cat_1" code="SEV" name="Schienenersatzverkehr" lang="de"/>
      <category id="cat_3" code="EC" name="EuroCity" description="Schnellfahrende Reisezüge im internationalen Verkehr mit besonderem Komfort" lang="de" trainUsage="passenger"/>
      <category id="cat_6" code="D" name="Schnellzug mit Durchgangswagen" description="Schnellfahrende Reisezüge des Fernverkehrs" lang="de" trainUsage="passenger"/>
      <category id="cat_7" code="Os" name="Osobní vlak" description="Osobní vlak je na tratích Správy železnic označení druhu vlaku, který zajišťuje přepravu většinou na krátké vzdálenosti na určité trati. Osobní vlaky zastavují až na výjimky ve všech stanicích a zastávkách." lang="cz" trainUsage="passenger"/>
      <category id="cat_9" code="S" name="Stadtschnellbahn" description="Reisezüge des linienbezogenen Ballungsverkehrs mit Systemhalten im dichten Takt unter S-Bahn-Tarifanwendung" lang="de" trainUsage="passenger"/>
      <category id="cat_10" code="FZ" name="FrachtZubringer" lang="de" trainUsage="goods"/>
      <category id="cat_11" code="Lt" name="Leertriebwagen" lang="de" deadrun="true"/>
      <category id="cat_12" code="P" name="Personenzug" description="Reisezüge des Binnenverkehrs der ÖBB auf DB-Infrastruktur und Züge der ÖBB und CD im Korridorverkehr" lang="de" trainUsage="passenger"/>
      <category id="cat_no76" code="L" name="Lokaltog" description="Lokaltog dekker transport mellom sentrum og forsteder i storbyområder. Toget stopper ved alle stasjoner og de har ideelt sett så høy avgangsfrekvens at reisende ikke må planlegge tidspunktet for reisen sin på forhånd." lang="no" trainUsage="passenger"/>
    </categories>

It is up to the reading software how it deals with such attributes missing. It can opt for a default case, or ask the user, or force the usage of these attributes e. g. by providing an error message.

Es bleibt hier dem lesenden Programm überlassen, wie es damit umgeht, wenn diese Attribute nicht angegeben sind: Es kann einen Standard-Fall annehmen oder beim Anwender nachfragen oder diese Attribute zwingend erfordern, indem es eine Fehlermeldung ausgibt.

It should also be pointed out that with version 2.5 of railML® a change was introduced to the enumeration available for @trainUsage. With this version it was allowed to provide custom values here, in addition to the ones that are defined in the standard (passenger, goods and mixed). This allows describing also less known use cases regarding their train usage, such as a working train or a tamping machine. However usage of these extensions needs to be discussed between producer and consumer of the railML® document.

Es sollte darauf hingewiesen werden, dass mit Version 2.5 von railML® eine Änderung an der für @trainUsage verfügbaren Enumeration vorgenommen wurde. Ab dieser Version ist es möglich, zusätzlich zu den im Standard definierten Werten (passenger, goods und mixed) eigene Werte anzugeben. Damit lassen sich auch weniger bekannte Anwendungsfälle hinsichtlich der Verwendung des Zuges beschreiben, wie z.B. ein Arbeitszug oder eine Stopfmaschine. Die Verwendung dieser Erweiterungen muss jedoch zwischen Produzent und Konsument des railML®-Dokuments abgesprochen werden.

Product categories vs operational categories

Product category (<trainPart>@categoryRef)

The attribute categoryRef escpecially of <trainPart> references to train categories which are commonly known as products in practice. They are normally used for publishing. It has to be noted that a train can consist of more than one product at the same time because different train parts may reference different products (see also Train coupling and sharing). This occurs in reality e. g. in Germany between Erfurt and Plaue (Thuringia) in the years 2003 to 2017 where trains of Erfurter Bahn (product EB) and of Süd-Thüringen-Bahn (product STB) often run coupled, or at ÖBB where sometimes trains with the product name RailJet have additional carriages for peak periods placed as IC.

Das bei <trainPart> angegebene Attribut categoryRef verweist auf Zugarten (categories), die in der Praxis üblicherweise als Produkte bezeichnet und auch veröffentlicht werden. Hierbei ist zu beachten, dass ein Zug gleichzeitig mehrere Produkte haben kann, da verschiedene Zugteile unterschiedliche Produkte haben können (s. a. Train coupling and sharing). Dies kommt in der Praxis vor, z. B. die in den Jahren 2003 bis 2017 zwischen Erfurt und Plaue (Thüringen) vereinigt verkehrenden Züge der Erfurter Bahn (Produktbezeichnung EB) und Süd-Thüringen-Bahn (Produktbezeichnung STB) oder die bei der ÖBB gelegentlich an Züge mit der Produktbezeichnung RailJet angehangenen Verstärkungswagen, die jedoch als IC vermarktet werden.

Operational category (<train>@categoryRef)

In contrary to products there is the operational train category. (In UK this is part of the head code of a train at least in a certain sense.) It is something rather internal, not to be published. Also, a train can have only one operational category at the same time. For this kind of train categories, there is the attribute categoryRef at the element <train> in railML®. It is sub-placed below <trainPartSequence> because the operational category may change between different sections of the train’s route. The many long-distance trains which run empty before and after their published route are examples from practice for such changes. In Germany, this is widely common between Berlin’s stations Grunewald, Lehrter Bahnhof (main station), and Rummelsburg (stabling station):

Dem gegenüber steht die traditionelle Zuggattung als etwas eher Betriebsinternes, wobei ein Zug in einem Streckenabschnitt nur eine Zuggattung haben kann. Für diese Zuggattung gibt es in railML® das Attribut categoryRef im Element <train>, und zwar unter <trainPartSequence>, da auch die betriebliche Gattung innerhalb des Laufwegs eines Zuges wechseln kann. Praktische Beispiele für solche Wechsel wären die vielen Fernreisezüge, die vor und nach ihrem eigentlichen (veröffentlichten) Zuglauf als Leerreisezüge zu- und abgeführt werden, wie das z. B. zwischen Berlin-Grunewald, Lehrter Bahnhof und Rummelsburg üblich ist:

      <train id="tro_1" type="operational" trainNumber="141" scope="primary">
        <trainPartSequence sequence="1" categoryRef="cat_3">  <!-- IC Schiphol - Berlin -->
          <trainPartRef ref="tp_2" position="1"/>
        </trainPartSequence>
        <trainPartSequence sequence="2" categoryRef="cat_11">   <!-- empty run to stable -->
          <trainPartRef ref="tp_3" position="1"/>
        </trainPartSequence>
      </train>

The attribute categoryRef at <train> for the operational category is normally used at operational trains only (elements <train> with occurrence type="operational").

Das Attribut categoryRef unter <train> für die betriebliche Zuggattung wird üblicher Weise nur bei betrieblichen Zügen (Elemente <train> mit Ausprägung type="operational") angegeben.

Missing representation in <category>

Currently there is no explicit distinction between product and operational category in railML® – an element <category> can represent an operational category (i. e. referenced by a <train>) as well as a product (i. e. referenced by a <trainPart>).

Es gibt in railML® derzeit keine explizite Unterscheidung zwischen Produkt und Gattung – ein Element <category> kann sowohl als Zuggattung (d. h. referenziert von einem <train>) als auch als Produkt (d. h. referenziert von einem <trainPart>) verwendet werden.

Here again it is up to the reading software how to deal with potential contradictions of this contextual redundancy in case a train (part) is shown e. g. as passenger hauling by its <trainPart>.categoryRef and at the same time as non passenger hauling by its <train>.categoryRef. It is recommended to “consult” the product for traffic properties (such as passenger hauling) and to “consult” the operational category for operational properties (which may be for instance categoryPriority).

Auch hier bleibt es dem lesenden Programm überlassen, wie es mit theoretisch möglichen Widersprüchen innerhalb der inhaltlichen Redundanz umgeht, falls ein Zug(teil) über seine <trainPart>.categoryRef z. B. als personenbefördernd, über seine <train>.categoryRef jedoch als nicht personenbefördernd dargestellt wird. Es wird empfohlen, sich für verkehrliche Eigenschaften (wie z. B. personenbefördernd) am Produkt zu orientieren, für eventuelle betriebliche Eigenschaften (wie vielleicht categoryPriority) jedoch an der Gattung.

Overriding of places

Überschreiben von Platzkapazitäten

To explicitly declare a train or train part as passenger hauling, it must stringently reference a properly defined <category> by its categoryRef. But, in this relation, it has to be considered that sometimes the so-called overriding of places happens. Here, the element <passengerUsage> of <trainPart> is used to override (correct) the place capacities inherited from a formation (by the attribute formationRef). If the place capacities are corrected to 0 by this method, this included implicitly that the train part cannot be passenger-hauling in a certain sense - even if its categoryRef says something else. This method is used e. g. to declare some carriages in a train to be closed. (Some carriages = part of the train may normally be used by passengers but another train part is closed may be because it does not fit at some platform.)

Um einen Zug oder Zugteil explizit als personenbefördernd oder nicht personenbefördernd zu deklarieren, muss dieser zwingend über categoryRef auf eine entsprechend definierte <category> verweisen. In diesem Zusammenhang ist jedoch zu beachten, dass gelegentlich das sogenannte „Überschreiben von Sitzplätzen“ vorkommt: Hierbei wird das Element <passengerUsage> unter <trainPart> benutzt, um die aus einer Formation (Attribut formationRef) „geerbten“ Platzkapazitäten zu überschreiben, d. h. im Einzelfall zu korrigieren. Falls die Platzkapazitäten dabei auf 0 korrigiert werden, folgt daraus implizit, dass der Zugteil in gewissem Sinne nicht mehr personenbefördernd sein kann – u. U. obwohl seine categoryRef etwas anderes suggeriert. Diese Möglichkeit wird z. B. benutzt, um abgesperrte Wagen innerhalb eines Zuges auszudrücken (ein Teil der Wagen = Zugteil darf von Reisenden ganz normal benutzt werden, ein anderer Zugteil ist jedoch abgesperrt, z. B. weil diese Wagen nicht an einen Bahnsteig passen).

     <trainPart id="tp_4" name="141" … categoryRef="cat_3">
        <formationTT formationRef="fmt_1" … >
          <passengerUsage>
            <places category="class1" count="0"/>
            <places category="class2" count="0"/>
          </passengerUsage>
        </formationTT>

Though it alternatively can be expressed by assigning an „empty-run product“ to the this train part, it is not always common to do so. Sometimes it is up to the custom of the user and therefore cannot be forced by the writing software. Also, normally there should not be all the train set to 0 places but some of its parts only. Anyway, it is recommended for reading software when determining such properties as passenger, freight, or public to check any possible overriding of places too and possibly to act according.

Es kann zwar alternativ auch durch Zuweisung eines „Leerzug-Produkts“ zu diesem Zugteil ausgedrückt werden, dass die Wagen als abgesperrt gelten, jedoch ist das nicht immer üblich und oft von Gepflogenheiten des Anwenders abhängig (und kann daher nicht immer durch das schreibende Programm sichergestellt werden). Ebenso sollte i. d. R. nicht der gesamte Zug, sondern nur einige seiner Teile, durch Überschreiben auf 0 Plätze gesetzt sein. Dennoch wird lesenden Programmen empfohlen, beim Feststellen von Eigenschaften wie personenbefördernd oder zu veröffentlichen auch das Überschreiben der Plätze zu prüfen und ggf. darauf zu reagieren.