Dev:categoryUsage

From wiki.railML.org
(Redirected from TT:categoryUsage)
Jump to: navigation, search

- German text below -

This article explains basic concepts of train categorization within the timetable subschema.

Dieser Artikel erklärt Grundlagen der Zugkategorisierung innerhalb des Timetable-Subschemas.

Train types, categories, products, and passenger usage

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

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

<trainPart id='tp_222' name='222' line='EC 200' trainNumber='222' processStatus='planned'
				 timetablePeriodRef='ttp_2020_21' categoryRef='cat_EC'>

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:

    <categories>
      <category id='cat_SEV' code='SEV' name='Schienenersatzverkehr'/>
      <category id='cat_OBB' code='OBB' name='Oberlausitz-Bahn' trainUsage='passenger'/>
      <category id='cat_EC' code='EC' name='EuroCity' description='Schnellfahrende Reisezüge im internationalen Verkehr mit besonderem Komfort' trainUsage='passenger'/>
      <category id='cat_OBE' code='OBE' name='Oberlausitz-Express' trainUsage='passenger'/>
      <category id='cat_OBC' code='OBC' name='Oberlausitz-City' trainUsage='passenger'/>
      <category id='cat_D' code='D' name='Schnellzug mit Durchgangswagen' description='Schnellfahrende Reisezüge des Fernverkehrs' trainUsage='passenger'/>
      <category id='cat_Os' code='Os'/>
      <category id='cat_CS' code='CS' name='Ganzzug' trainUsage='goods'/>
      <category id='cat_S' code='S' name='Stadtschnellbahn' description='Reisezüge des linienbezogenen Ballungsverkehrs mit Systemhalten im dichten Takt unter S-Bahn-Tarifanwendung' trainUsage='passenger'/>
      <category id='cat_FZ' code='FZ' name='FrachtZubringer' trainUsage='goods'/>
      <category id='cat_Lt' code='Lt' name='Leertriebwagen' deadrun='true'/>
      <category id='cat_P' code='P' name='Personenzug' description='Reisezüge des Binnenverkehrs der ÖBB auf DB-Infrastruktur und Züge der ÖBB und ČD im Korridorverkehr' 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.

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 really happens in practice e. g. in Germany between Erfurt and Plaue (Thüringen) 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.

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

      <train id='tro_141' type='operational' trainNumber='141' scope='primary'>
        <trainPartSequence sequence='1' categoryRef='cat_IC'>  <!-- IC Schiphol - Berlin -->
          <trainPartRef ref='tp_141_XNSP-BHF' position='1'/>
        </trainPartSequence>
        <trainPartSequence sequence='2' categoryRef='cat_Lr'>   <!-- empty run to stable -->
          <trainPartRef ref='tp_141_BHF-BRGBA' 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').

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

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

Overriding of places

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

     <trainPart id='tp_xyz' name='141'  categoryRef='cat_IC'>
        <formationTT formationRef='fmt_abc'  >
          <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.

Deutsche Fassung

Zugarten, Zuggattungen, Produkte und Fahrgastfahrten

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

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_222' name='222' line='EC 200' trainNumber='222' processStatus='planned'
				 timetablePeriodRef='ttp_2020_21' categoryRef='cat_EC'>

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_SEV' code='SEV' name='Schienenersatzverkehr'/>
      <category id='cat_OBB' code='OBB' name='Oberlausitz-Bahn' trainUsage='passenger'/>
      <category id='cat_EC' code='EC' name='EuroCity' description='Schnellfahrende Reisezüge im internationalen Verkehr mit besonderem Komfort' trainUsage='passenger'/>
      <category id='cat_OBE' code='OBE' name='Oberlausitz-Express' trainUsage='passenger'/>
      <category id='cat_OBC' code='OBC' name='Oberlausitz-City' trainUsage='passenger'/>
      <category id='cat_D' code='D' name='Schnellzug mit Durchgangswagen' description='Schnellfahrende Reisezüge des Fernverkehrs' trainUsage='passenger'/>
      <category id='cat_Os' code='Os'/>
      <category id='cat_CS' code='CS' name='Ganzzug' trainUsage='goods'/>
      <category id='cat_S' code='S' name='Stadtschnellbahn' description='Reisezüge des linienbezogenen Ballungsverkehrs mit Systemhalten im dichten Takt unter S-Bahn-Tarifanwendung' trainUsage='passenger'/>
      <category id='cat_FZ' code='FZ' name='FrachtZubringer' trainUsage='goods'/>
      <category id='cat_Lt' code='Lt' name='Leertriebwagen' deadrun='true'/>
      <category id='cat_P' code='P' name='Personenzug' description='Reisezüge des Binnenverkehrs der ÖBB auf DB-Infrastruktur und Züge der ÖBB und ČD im Korridorverkehr' trainUsage='passenger'/>
    </categories>

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.

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 durchaus auch praktisch vor, z. B. die 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.

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_141' type='operational' trainNumber='141' scope='primary'>
        <trainPartSequence sequence='1' categoryRef='cat_IC'>   <!-- IC Schiphol - Berlin -->
          <trainPartRef ref='tp_141_XNSP-BHF' position='1'/>
        </trainPartSequence>
        <trainPartSequence sequence='2' categoryRef='cat_Lr'>  <!-- Leerzug zur Abstellung -->
          <trainPartRef ref='tp_141_BHF-BRGBA' position='1'/>
        </trainPartSequence>
      </train>

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.

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.

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.

Überschreiben von Platzkapazitäten

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_xyz' name='141'  categoryRef='cat_IC'>
        <formationTT formationRef='fmt_abc'  >
          <passengerUsage>
            <places category='class1' count='0'/>
            <places category='class2' count='0'/>
          </passengerUsage>
        </formationTT>
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.