From railML 2 Wiki
Jump to navigation Jump to search


💡 (deprecated with version 2.1)
This element was deprecated with version 2.1
Dieses Element wurde mit Version 2.1 abgeschafft.

Scheme description / Schemenbeschreibung

Position of <infrastructureVisualizations> in the XML-Tree / Position von <infrastructureVisualizations> im XML-Baum

Multiplicity / Anzahl


Semantics / Bedeutung

(deprecated with version 2.1)(introduced with version 2.4) This Element has been deprecated with railML® 2.1 but reintroduced with railML® 2.4. An infrastructure visualization defines a layout of the railway infrastructure network on the screen or on paper. There can be multiple visualizations of the same infrastructure.(introduced with version 2.4) (deprecated with version 2.1)

Attributes of <infrastructureVisualizations> / Attribute von <infrastructureVisualizations>

  • xml:base: base (as an attribute name): denotes an attribute whose value provides a URI to be used as the base for interpreting any relative URIs in the scope of the element on which it appears; its value is inherited. This name is reserved by virtue of its definition in the XML Base specification. See for information about this attribute.

Syntactic Constraints / Syntaktische Beschränkungen

Best practice & Examples / Empfohlene Anwendung & Beispiele

With this example (based on our simple railML® example[1] and railOscope[2]) we will try to present a way to describe a visualization of a small railway station at a microscopic level of aggregation. Permission to post was granted by Mr Burkolter of trafIT.

This draft station consists of two railway tracks, two switches and a platform. The position of a <platformEdge> refers to the lower left corner of the object, which is shown with a red dot in the figure.

“Distance between tracks” is modelled through kinks. Here, “kink” means a point of an angle produced by an imaginary continuation of the straight track sections. See an example ([3]). In the real world, a railway track has a smooth bend (curve) that allows a train to go by it. Please note, that usually (in the real world) “kink” means damage done by let’s say heat[4]. But a schematic track plan is a “rough” representation of a track and does not include curves (smooth bends). To summarise, in the schematic track sub-world of the railML® world “kink” is not damage but a point of an angle. This is also consistent with railML® 3 usage of the “kink” concept.[5] Please refer to the railML® forum post ([6]) for the historical discussion in this regard.

An example of these differences between a plan and a real-world station can be found in the Dresden Hauptbahnhof. Here you can see that the schematic track plan has a lot of “plan kinks” but a real-world station has only curves.

In that, the loop track (shunting track, siding track, or whatever you call it) is not a straight line like the “main” track in the example, but something like a polyline. These “plan kinks” are represented in railML® by <geoMapping> elements in the infrastructure subschema and by <trackElementVis> in the visualization part.

For the visualization, a track MUST refer to a line because <lineVis> MUST refer to a line. In, that track tr2 could have not belonged to any railway line as it is not fragmented and there is nothing to the group there. But track tr2 belongs to line l2 to visualize it.

Please note that here “x” and “y” coordinates of the switch sw1 and the beginning tr2_b of the track tr2 are the same. This is also true for the "x" and "y" coordinates of the switch sw2 and the ending tr2e of the track tr2. Please also note that there can be some correlation (semantic dependency) between visualization and the rest of the elements. For example, if a platform is somewhere "near" ocp1 (by the means of <position> of a <trackElementVis>) then, probably this <platformEdge> should not have @ocpRef to an ocp2.

VisExample.png KinkExample.png

<?xml version="1.0" encoding="UTF-8"?>
<railml xmlns="" xmlns:dc="" xmlns:xsi="" xsi:schemaLocation="" version="2.5">
    <infrastructure id="inf01">
            <track id="tr1" ... type="mainTrack">
                    <trackBegin pos="0.0" id="tr1_b">
                        <openEnd id="tr1_b_oe"/>
                    <trackEnd pos="1000.0" id="tr1_e">
                        <openEnd id="tr1_e_oe"/>
                        <switch id="sw1" pos="200.0">
                            <connection orientation="outgoing" 
                            course="left" ref="tr2_c1" 
                        <switch id="sw2" pos="800.0">
                            <connection orientation="incoming" 
                            course="right" ref="tr2_c2" 
                        <crossSection id="tr1_cs" name="Vieren" 
                        ocpRef="ocp1" pos="500.0" 
                        absPos="500.0" type="station"/>
                        <platformEdge id="tr1_pe" name="platform 1" 
                        pos="400" dir="up" absPos="400" 
                        side="right" height="550" length="200"/>
            <track id="tr2" ... type="sidingTrack" mainDir="none">
                    <trackBegin pos="0.0" id="tr2_b">
                        <connection ref="tr1_c1" id="tr2_c1"/>
                    <trackEnd pos="600.0" id="tr2_e">
                        <connection ref="tr2_c2" id="tr2_c2"/>
                        <geoMapping id="tr2_gm1" pos="50.0"/>
                        <geoMapping id="tr2_gm2" pos="550.0"/>
            <line id="l1">
                <trackRef ref="tr1" sequence="1"/>
            <line id="l2">
                <trackRef ref="tr2" sequence="1"/>
            <ocp id="ocp1" name="Vieren" type="operationalName">
                <propOperational operationalType="station" 
                    <summary hasSwitches="true"/>
        <visualization id="vis0" infrastructureRef="inf0" version="2.4">
            <lineVis ref="l1">
                <trackVis ref="tr1">
                    <trackElementVis ref="tr1_b">
                        <!-- reference to the beginning of track tr1 -->
                        <position x="1.2" y="4.2"/>
                    <trackElementVis ref="sw1">
                        <!-- reference to the switch sw1 -->
                        <position x="7.2" y="4.2"/>
                        <!-- equals to the 
                        position of the beginning of track tr2 -->
                    <trackElementVis ref="tr1_b">
                        <!-- reference to the switch sw2 -->
                        <position x="14.0" y="4.2"/>
                        <!-- equals to the position of the 
                        end of track tr2 -->
                    <trackElementVis ref="tr1_e">
                        <!-- reference to the ending of track tr1 -->
                        <position x="17.8" y="4.2"/>
            <lineVis ref="l2">
                <trackVis ref="tr2">
                    <trackElementVis ref="tr2_b">
                        <!-- reference to the beginning of track tr2 -->
                        <position x="1.2" y="4.2"/>
                    <trackElementVis ref="tr2_e">
                        <!-- reference to the ending of track tr2 -->
                        <position x="14.0" y="4.2"/>
                    <trackElementVis ref="tr2_gm1">
                        <!-- reference to the kink geoMapping of track tr2 -->
                        <position x="8.2" y="3.2"/>
                    <trackElementVis ref="tr2_gm2">
                        <!-- reference to the kink geoMapping of track tr2 -->
                        <position x="13.0" y="3.2"/>
            <objectVis ref="ocp1">
                <position x="10.5" y="6.2"/>
                <size width="0.73" height="0.36"/>

Notes / Anmerkungen

Not yet described. / Noch nicht beschrieben.

Open issues / Offene Punkte/Pendenzen

Not yet described. / Noch nicht beschrieben.