Dev:changes/2.4/diff: Difference between revisions

From railML 2 Wiki
Jump to navigation Jump to search
[unchecked revision][checked revision]
No edit summary
m (1 revision imported: http→https)
(No difference)

Revision as of 19:00, 22 March 2021

Schema differences between railML® 2.3 and railML® 2.4

This page shows schema differences between railML® 2.3 and railML® 2.4. It is intended to support advanced railML® users in comprehending and documenting the differences between these versions. Thanks to Milan Wölke of PSI Transcom (external link) for compiling the data.

An explanation of how to interpret diff output can be found here (external link).

diff --git a/schema/genericRailML.xsd b/schema/genericRailML.xsd
index 007e6cb..1e7e159 100644
--- a/schema/genericRailML.xsd
+++ b/schema/genericRailML.xsd
@@ -1,18 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- $Id$ -->
-<xs:schema xmlns:rail="https://www.railml.org/schemas/2016" 
+<xs:schema xmlns:rail="https://www.railml.org/schemas/2018" 
            xmlns:xs="https://www.w3.org/2001/XMLSchema" 
            xmlns:xml="https://www.w3.org/XML/1998/namespace" 
            xmlns:dc="https://purl.org/dc/elements/1.1/" 
-           targetNamespace="https://www.railml.org/schemas/2016" 
+           targetNamespace="https://www.railml.org/schemas/2018" 
            elementFormDefault="qualified" 
-           version="2.3">
+           version="2.4">
 
   <xs:annotation>
-    <xs:documentation>Copyright (c) railML.org; All Rights Reserved.</xs:documentation>
+    <xs:documentation>Copyright (c) railML.org e.V. Dresden/Germany; All Rights Reserved.</xs:documentation>
     <xs:documentation>This work is licensed under the restricted CreativeCommons Attribution-NonCommercial-NoDerivs 3.0 Unported License with additional license conditions of railML.org.</xs:documentation>
-    <xs:documentation>For further information see: https://www.railml.org/en/user/licence.html</xs:documentation>
-    <xs:documentation>Content of this file: XML Schema for railML(R) 2.3 Definition of generic simple types, used by all sub schemas</xs:documentation>
+    <xs:documentation>For further information see: https://www.railml.org/licence</xs:documentation>
+    <xs:documentation>Content of this file: XML Schema for railML(R) 2.4 Definition of generic simple types, used by all sub schemas</xs:documentation>
   </xs:annotation>
 
   <xs:import namespace="https://purl.org/dc/elements/1.1/" schemaLocation="https://dublincore.org/schemas/xmls/qdc/2008/02/11/dc.xsd">
diff --git a/schema/infrastructure.xsd b/schema/infrastructure.xsd
index 58e4762..6752cf1 100644
--- a/schema/infrastructure.xsd
+++ b/schema/infrastructure.xsd
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
   <!-- $Id$ -->
-<xs:schema xmlns:rail="https://www.railml.org/schemas/2016" 
+<xs:schema xmlns:rail="https://www.railml.org/schemas/2018" 
            xmlns:xs="https://www.w3.org/2001/XMLSchema" 
            xmlns:xml="https://www.w3.org/XML/1998/namespace" 
-           targetNamespace="https://www.railml.org/schemas/2016" 
+           targetNamespace="https://www.railml.org/schemas/2018" 
            elementFormDefault="qualified" 
-           version="2.3">
+           version="2.4">
 
   <xs:annotation>
-    <xs:documentation>Copyright (c) railML.org; All Rights Reserved.</xs:documentation>
+    <xs:documentation>Copyright (c) railML.org e.V. Dresden/Germany; All Rights Reserved.</xs:documentation>
     <xs:documentation>This work is licensed under the restricted CreativeCommons Attribution-NonCommercial-NoDerivs 3.0 Unported License with additional license conditions of railML.org.</xs:documentation>
-    <xs:documentation>For further information see: https://www.railml.org/en/user/licence.html</xs:documentation>
-    <xs:documentation>Content of this file: XML Schema for railML(R) 2.3 Definition of elements (partially hidden as complex type) for infrastructure sub schema (IS), uses infrastructure types and attribute groups from "xs:include" path</xs:documentation>
+    <xs:documentation>For further information see: https://www.railml.org/licence</xs:documentation>
+    <xs:documentation>Content of this file: XML Schema for railML(R) 2.4 Definition of elements (partially hidden as complex type) for infrastructure sub schema (IS), uses infrastructure types and attribute groups from "xs:include" path</xs:documentation>
   </xs:annotation>
 
   <xs:include schemaLocation="infrastructureTypes.xsd" />
@@ -56,6 +56,11 @@
                 <xs:documentation source="https://wiki2.railml.org/wiki/IS:speedProfiles" />
               </xs:annotation>
             </xs:element>
+            <xs:element name="states" type="rail:tStates" minOccurs="0">
+              <xs:annotation>
+                <xs:documentation>Container to define disabled/enabled status of infrastructure</xs:documentation>
+              </xs:annotation>
+          </xs:element>
           </xs:sequence>
         </xs:extension>
       </xs:complexContent>
@@ -290,6 +295,11 @@
               <xs:documentation>Deprecated for next major release, use "additionalName" in "ocp" instead.</xs:documentation>
             </xs:annotation>
           </xs:element>
+          <xs:element name="states" type="rail:tStates" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>container for states of OCP; use this element to define the status of the OCP in terms of availability for operation</xs:documentation>
+            </xs:annotation>
+          </xs:element>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
@@ -349,6 +359,11 @@
               <xs:documentation source="https://wiki2.railml.org/wiki/IS:trackRef_locallyControlledArea" />
             </xs:annotation>
           </xs:element>
+          <xs:element name="controllerRef" type="rail:tElementRefInGroup" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>reference from locally controlled area to a controller</xs:documentation>
+            </xs:annotation>
+          </xs:element>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
@@ -360,6 +375,7 @@
         <xs:sequence>
           <xs:element name="lineDescr" type="xs:string" minOccurs="0" maxOccurs="unbounded">
             <xs:annotation>
+              <xs:documentation>DEPRECATED with railML version 2.4</xs:documentation>
               <xs:documentation source="https://wiki2.railml.org/wiki/IS:lineDescr" />
             </xs:annotation>
           </xs:element>
@@ -409,6 +425,7 @@
         <xs:sequence>
           <xs:element name="trackDescr" type="xs:string" minOccurs="0" maxOccurs="unbounded">
             <xs:annotation>
+              <xs:documentation>DEPRECATED with railML version 2.4</xs:documentation>
               <xs:documentation source="https://wiki2.railml.org/wiki/IS:trackDescr" />
             </xs:annotation>
           </xs:element>
@@ -741,7 +758,7 @@
   
   <xs:complexType name="eCrossedElements">
     <xs:sequence>
-      <xs:element name="crossedElement" type="rail:tCrossedElement" minOccurs="1" maxOccurs="unbounded">
+      <xs:element name="crossedElement" type="rail:tCrossedElement" maxOccurs="unbounded">
         <xs:annotation>
           <xs:documentation source="https://wiki2.railml.org/wiki/IS:crossedElement" />
         </xs:annotation>
@@ -753,7 +770,7 @@
     <xs:complexContent>
       <xs:extension base="rail:tTunnel">
         <xs:sequence>
-          <xs:element name="crossedElements" type="rail:eCrossedElements" minOccurs="0" maxOccurs="1">
+          <xs:element name="crossedElements" type="rail:eCrossedElements" minOccurs="0">
             <xs:annotation>
               <xs:documentation>list the elements that are crossed by this element</xs:documentation>
             </xs:annotation>
@@ -777,7 +794,7 @@
     <xs:complexContent>
       <xs:extension base="rail:tBridge">
         <xs:sequence>
-          <xs:element name="crossedElements" type="rail:eCrossedElements" minOccurs="0" maxOccurs="1">
+          <xs:element name="crossedElements" type="rail:eCrossedElements" minOccurs="0">
             <xs:annotation>
               <xs:documentation>list the elements that are crossed by this element</xs:documentation>
             </xs:annotation>
@@ -801,7 +818,7 @@
     <xs:complexContent>
       <xs:extension base="rail:tLevelCrossing">
         <xs:sequence>
-          <xs:element name="crossedElements" type="rail:eCrossedElements" minOccurs="0" maxOccurs="1">
+          <xs:element name="crossedElements" type="rail:eCrossedElements" minOccurs="0">
             <xs:annotation>
               <xs:documentation>list the elements that are crossed by this element</xs:documentation>
             </xs:annotation>
@@ -978,6 +995,11 @@
           <xs:documentation source="https://wiki2.railml.org/wiki/IS:trainRadios" />
         </xs:annotation>
       </xs:element>
+      <xs:element name="locks" type="rail:eLocks" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation source="https://wiki2.railml.org/wiki/IS:locks" />
+        </xs:annotation>
+      </xs:element>
       <xs:any namespace="##other" processContents="strict" minOccurs="0" maxOccurs="unbounded">
         <xs:annotation>
           <xs:documentation>provide an extension point for non-railML elements in foreign namespace</xs:documentation>
@@ -1092,7 +1114,7 @@
   
   <xs:complexType name="eTrainRadioChanges">
     <xs:sequence>
-      <xs:element name="trainRadioChange" type="rail:tTrainRadioChange" minOccurs="1" maxOccurs="unbounded">
+      <xs:element name="trainRadioChange" type="rail:tTrainRadioChange" maxOccurs="unbounded">
         <xs:annotation>
           <xs:documentation>start of section with certain train radio system installed at the infrastructure</xs:documentation>
         </xs:annotation>
@@ -1100,12 +1122,22 @@
     </xs:sequence>
   </xs:complexType>
   
+  <xs:complexType name="eLocks">
+    <xs:sequence>
+      <xs:element name="lock" type="rail:tLock" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>Locks are physical railway infrastructure elements that are used for logical locking connections between switches, derailers, level crossings, or other signalling components.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
+  
   <xs:complexType name="eInfraAttrGroupRefs">
     <xs:sequence>
       <xs:element name="infraAttrGroupRef" type="rail:tElementWithReference" minOccurs="0" maxOccurs="unbounded">
         <xs:annotation>
-          <xs:documentation>sub-element for a reference to an infraAttrGroup</xs:documentation>
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:infraAttrGroupRef" />
+          <xs:documentation>sub-element for a reference to an infraAttributes instance</xs:documentation>
+          <xs:documentation source="https://wiki2.railml.org/wiki/IS:infraAttributes" />
         </xs:annotation>
       </xs:element>
     </xs:sequence>
@@ -1224,7 +1256,11 @@
   <xs:element name="infrastructureVisualizations">
     <xs:complexType>
       <xs:sequence>
-        <xs:element name="visualization" type="rail:eInfrastructureVisualization" minOccurs="0" maxOccurs="unbounded" />
+        <xs:element name="visualization" type="rail:eInfrastructureVisualization" minOccurs="0" maxOccurs="unbounded">
+          <xs:annotation>
+            <xs:documentation>container elements for all infrastructure visualizations</xs:documentation>
+          </xs:annotation>
+        </xs:element>
       </xs:sequence>
       <xs:attribute ref="xml:base" />
     </xs:complexType>
@@ -1234,8 +1270,16 @@
     <xs:complexContent>
       <xs:extension base="rail:tInfrastructureVisualization">
         <xs:sequence>
-          <xs:element name="lineVis" type="rail:eLineVis" minOccurs="0" maxOccurs="unbounded" />
-          <xs:element name="ocpVis" type="rail:eOcpVis" minOccurs="0" maxOccurs="unbounded" />
+          <xs:element name="lineVis" type="rail:eLineVis" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>visualization of a railway line</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="ocpVis" type="rail:eOcpVis" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>visualization of an OCP</xs:documentation>
+            </xs:annotation>
+          </xs:element>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
@@ -1245,7 +1289,11 @@
     <xs:complexContent>
       <xs:extension base="rail:tElementWithReference">
         <xs:sequence>
-          <xs:element name="trackVis" type="rail:eTrackVis" minOccurs="0" maxOccurs="unbounded" />
+          <xs:element name="trackVis" type="rail:eTrackVis" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>visualization of a railway track</xs:documentation>
+            </xs:annotation>
+          </xs:element>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
@@ -1255,7 +1303,11 @@
     <xs:complexContent>
       <xs:extension base="rail:tElementWithReference">
         <xs:sequence>
-          <xs:element name="trackElementVis" type="rail:eTrackElementVis" minOccurs="0" maxOccurs="unbounded" />
+          <xs:element name="trackElementVis" type="rail:eTrackElementVis" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>visualization of a railway track element</xs:documentation>
+            </xs:annotation>
+          </xs:element>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
@@ -1275,8 +1327,16 @@
     <xs:complexContent>
       <xs:extension base="rail:tElementWithReference">
         <xs:sequence>
-          <xs:element name="position" type="rail:tPoint" />
-          <xs:element name="size" type="rail:tSize" minOccurs="0" />
+          <xs:element name="position" type="rail:tPoint">
+            <xs:annotation>
+              <xs:documentation>position of the OCP visualization element in grid coordinates</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="size" type="rail:tSize" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>size of the OCP visualization element</xs:documentation>
+            </xs:annotation>
+          </xs:element>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
diff --git a/schema/infrastructureTypes.xsd b/schema/infrastructureTypes.xsd
index ec81ab1..ca2e16e 100644
--- a/schema/infrastructureTypes.xsd
+++ b/schema/infrastructureTypes.xsd
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
   <!-- $Id$ -->
-<xs:schema xmlns:rail="https://www.railml.org/schemas/2016" 
+<xs:schema xmlns:rail="https://www.railml.org/schemas/2018" 
            xmlns:xs="https://www.w3.org/2001/XMLSchema" 
            xmlns:xml="https://www.w3.org/XML/1998/namespace" 
-           targetNamespace="https://www.railml.org/schemas/2016" 
+           targetNamespace="https://www.railml.org/schemas/2018" 
            elementFormDefault="qualified" 
-           version="2.3">
+           version="2.4">
 
   <xs:annotation>
-    <xs:documentation>Copyright (c) railML.org; All Rights Reserved.</xs:documentation>
+    <xs:documentation>Copyright (c) railML.org e.V. Dresden/Germany; All Rights Reserved.</xs:documentation>
     <xs:documentation>This work is licensed under the restricted CreativeCommons Attribution-NonCommercial-NoDerivs 3.0 Unported License with additional license conditions of railML.org.</xs:documentation>
-    <xs:documentation>For further information see: https://www.railml.org/en/user/licence.html</xs:documentation>
-    <xs:documentation>Content of this file: XML Schema for railML(R) 2.3 Definition of attribute groups, simple and complex types, used by infrastructure sub schema (IS)</xs:documentation>
+    <xs:documentation>For further information see: https://www.railml.org/licence</xs:documentation>
+    <xs:documentation>Content of this file: XML Schema for railML(R) 2.4 Definition of attribute groups, simple and complex types, used by infrastructure sub schema (IS)</xs:documentation>
   </xs:annotation>
 
   <xs:include schemaLocation="railwayUnits.xsd" />
@@ -67,28 +67,7 @@
           <xs:element name="states" type="rail:tStates" minOccurs="0">
             <xs:annotation>
               <xs:documentation>Container to define disabled/enabled pieces of infrastructure.</xs:documentation>
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_switch" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_crossing" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_crossSection" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_border" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_speedChange" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_gradientChange" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_radiusChange" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_levelCrossing" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_ownerChange" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_operationModeChange" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_trainProtectionChange" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_electrificationChange" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_powerTransmissionChange" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_axleWeightChange" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_gaugeChange" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_geoMapping" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_trackCondition" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_signal" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_trainDetector" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_trackCircuitBorder" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_balise" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_trainProtectionElement" />
+              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states" />
             </xs:annotation>
           </xs:element>
         </xs:sequence>
@@ -103,10 +82,7 @@
           <xs:element name="states" type="rail:tStatesWithLength" minOccurs="0">
             <xs:annotation>
               <xs:documentation>Container to define disabled/enabled pieces of infrastructure with length values</xs:documentation>
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_tunnel" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_brigde" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_platformEdge" />
-              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_serviceSection" />
+              <xs:documentation source="https://wiki2.railml.org/wiki/IS:states" />
             </xs:annotation>
           </xs:element>
         </xs:sequence>
@@ -204,7 +180,7 @@
 
   <xs:attributeGroup name="aAbsPosition">
     <xs:attribute name="absPos" type="rail:tLengthM" />
-    <xs:attribute name="absPosOffset" type="rail:tLengthM" use="optional">
+    <xs:attribute name="absPosOffset" type="rail:tLengthM">
       <xs:annotation>
         <xs:documentation>DEPRECATED, not needed, not used</xs:documentation>
       </xs:annotation>
@@ -216,28 +192,7 @@
       <xs:element name="state" maxOccurs="unbounded" type="rail:tState">
         <xs:annotation>
           <xs:documentation>This is to define disabled/enabled infrastructure pieces with a given time frame.</xs:documentation>
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_switch" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_crossing" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_crossSection" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_border" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_speedChange" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_gradientChange" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_radiusChange" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_levelCrossing" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_ownerChange" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_operationModeChange" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_trainProtectionChange" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_electrificationChange" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_powerTransmissionChange" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_axleWeightChange" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_gaugeChange" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_geoMapping" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_trackCondition" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_signal" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_trainDetector" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_trackCircuitBorder" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_balise" />
-          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state_trainProtectionElement" />
+          <xs:documentation source="https://wiki2.railml.org/wiki/IS:state" />
         </xs:annotation>
       </xs:element>
     </xs:sequence>
@@ -256,11 +211,26 @@
         <xs:documentation>This attribute is 'true' if the infrastructure piece is somehow disabled.</xs:documentation>
       </xs:annotation>
     </xs:attribute>
+    <xs:attribute name="status" type="rail:tInfrastructureStatus">
+      <xs:annotation>
+        <xs:documentation>defines the status of the infrastructure element from perspective of its availability</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
     <xs:attribute name="operatingPeriodRef" type="rail:tGenericRef">
       <xs:annotation>
         <xs:documentation>The temporal frame of the 'state' should be defined in the 'timetable' part of the railML file, using the 'operatingPeriod' element.</xs:documentation>
       </xs:annotation>
     </xs:attribute>
+    <xs:attributeGroup ref="rail:aPeriodTimeSpan">
+      <xs:annotation>
+        <xs:documentation>Start and end time of the non-availability of the infrastructure element.</xs:documentation>
+      </xs:annotation>
+    </xs:attributeGroup>
+    <xs:attribute name="endDayOffset" type="xs:nonNegativeInteger">
+      <xs:annotation>
+        <xs:documentation>The number of midnight overruns over which non-availability persists.</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
     <xs:attribute name="remarks" type="rail:tElementDescription">
       <xs:annotation>
         <xs:documentation>This is to further explain the 'state' definition.</xs:documentation>
@@ -339,7 +309,7 @@
   <xs:complexType name="tOcpArea">
     <xs:attribute name="name" type="rail:tGenericName" />
     <xs:attribute name="number" type="rail:tPositiveCounter" />
-    <xs:attribute name="zip" type="xs:string" use="optional" />
+    <xs:attribute name="zip" type="xs:string"/>
   </xs:complexType>
 
   <xs:complexType name="tOcpPropOperational">
@@ -389,19 +359,52 @@
   </xs:complexType>
 
   <xs:complexType name="tOcpPropOther">
-    <xs:attribute name="frontier" type="xs:boolean" default="false" />
-    <xs:attribute name="chargeFrontier" type="xs:boolean" default="false" />
-    <xs:attribute name="status" type="rail:tOcpStatus" default="operational" />
+    <xs:attribute name="frontier" type="xs:boolean" default="false">
+      <xs:annotation>
+        <xs:documentation>DEPRECATED, because usage unclear.</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="chargeFrontier" type="xs:boolean" default="false">
+      <xs:annotation>
+        <xs:documentation>DEPRECATED, because usage unclear.</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="status" type="rail:tInfrastructureStatus" default="operational">
+      <xs:annotation>
+        <xs:documentation>DEPRECATED! Please use new optional child element "states" instead; defines the status of the OCP in terms of availability for operation</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
   </xs:complexType>
 
-  <xs:simpleType name="tOcpStatus">
+  <xs:simpleType name="tInfrastructureStatus">
     <xs:union>
       <xs:simpleType>
         <xs:restriction base="xs:string">
-          <xs:enumeration value="planned" />
-          <xs:enumeration value="operational" />
-          <xs:enumeration value="disabled" />
-          <xs:enumeration value="closed" />
+          <xs:enumeration value="conceptual">
+            <xs:annotation>
+              <xs:documentation>The construction or commissioning of the element is planned for the medium or long term. However, there are still no concrete (planning) activities for the construction of the element beyond the preliminary planning and cost estimation.</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="planned">
+            <xs:annotation>
+              <xs:documentation>The construction or commissioning of the element is planned concretely and at short notice or concrete planning activities for the construction take place, e.g. design, approval or implementation planning, cost calculation, award of contracts. It is not normally possible to use the element.</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="operational">
+            <xs:annotation>
+              <xs:documentation>The element is operational and can be used regularly.</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="disabled">
+            <xs:annotation>
+              <xs:documentation>The element is currently not usable, switched off or deactivated and therefore cannot be used regularly. However, it can be put back into operation at short notice without further construction, acceptance or approval activities.</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="closed">
+            <xs:annotation>
+              <xs:documentation>The element is no longer available, removed, dismantled, or no longer exists. Planning, construction or commissioning activities are absolutely necessary for recommissioning.</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
         </xs:restriction>
       </xs:simpleType>
       <xs:simpleType>
@@ -437,6 +440,7 @@
     <xs:attribute name="register" type="xs:string" use="required">
       <xs:annotation>
         <xs:documentation>name of the register, e.g. IBNR, DB640, RL100 or DIDOK</xs:documentation>
+        <xs:documentation>choose a value from the railML codelist Registers.xml</xs:documentation>
       </xs:annotation>
     </xs:attribute>
     <xs:attribute name="entry" type="xs:string" use="required">
@@ -459,6 +463,13 @@
   <xs:complexType name="tOperationControlPoint">
     <xs:complexContent>
       <xs:extension base="rail:tOcpWithIDAndName">
+        <xs:sequence>
+          <xs:element name="controllerRef" type="rail:tElementRefInGroup" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>reference from OCP to a Controller</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+        </xs:sequence>
         <xs:attribute name="number" type="xs:string">
           <xs:annotation>
             <xs:documentation>DEPRECATED: use the 'designator' with its parameters 'register' and 'entry' instead</xs:documentation>
@@ -470,7 +481,7 @@
           </xs:annotation>
         </xs:attribute>
         <xs:attribute name="timezone" type="rail:tTimeZone"> </xs:attribute>
-        <xs:attribute name="parentOcpRef" type="rail:tGenericRef" use="optional">
+        <xs:attribute name="parentOcpRef" type="rail:tGenericRef">
           <xs:annotation>
             <xs:documentation>references the one and only parent ocp of this ocp</xs:documentation>
           </xs:annotation>
@@ -564,13 +575,46 @@
     <xs:union>
       <xs:simpleType>
         <xs:restriction base="xs:string">
-          <xs:enumeration value="station" />
-          <xs:enumeration value="depot" />
-          <xs:enumeration value="stoppingPoint" />
-          <xs:enumeration value="crossover" />
-          <xs:enumeration value="junction" />
-          <xs:enumeration value="blockPost" />
-          <xs:enumeration value="blockSignal" />
+          <xs:enumeration value="station">
+            <xs:annotation>
+              <xs:documentation>a usual station for beginning, ending, overtaking of trains with passing tracks, ... </xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="depot">
+            <xs:annotation>
+              <xs:documentation>a train depot</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="stoppingPoint">
+            <xs:annotation>
+              <xs:documentation>an ocp without signals, switches, addtional tracks where trains start, stop or end e. g. for passenger exchange</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="crossover">
+            <xs:annotation>
+              <xs:documentation>a connection between two tracks of a double-track line </xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="junction">
+            <xs:annotation>
+              <xs:documentation>joining/splitting of two lines</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="blockPost">
+            <xs:annotation>
+              <xs:documentation>a (mainly staffed) ocp with signals where the train spacing is monitored</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="blockSignal">
+            <xs:annotation>
+              <xs:documentation>an ocp consisting of a block signal for train spacing only, mainly unstaffed and automated operating</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="siding">
+            <xs:annotation>
+              <xs:documentation>an ocp to collect and deliver of cargo waggons to build trains, but not for train operation</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
         </xs:restriction>
       </xs:simpleType>
       <xs:simpleType>
@@ -586,6 +630,7 @@
           <xs:enumeration value="passenger" />
           <xs:enumeration value="freight" />
           <xs:enumeration value="shunting" />
+          <xs:enumeration value="operational" />
         </xs:restriction>
       </xs:simpleType>
       <xs:simpleType>
@@ -614,6 +659,61 @@
       </xs:annotation>
     </xs:attribute>
   </xs:complexType>
+  
+  <xs:simpleType name="tControllerType">
+    <xs:union>
+      <xs:simpleType>
+        <xs:restriction base="xs:string">
+          <xs:enumeration value="none" />
+          <xs:enumeration value="singleElement" />
+          <xs:enumeration value="local" />
+          <xs:enumeration value="regional" />
+          <xs:enumeration value="crossRegional" />
+        </xs:restriction>
+      </xs:simpleType>
+      <xs:simpleType>
+        <xs:restriction base="rail:tOtherEnumerationValue" />
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+  
+  <xs:simpleType name="tControllerTechnologyType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="manual" />
+      <xs:enumeration value="mechanical" />
+      <xs:enumeration value="electro-mechanical" />
+      <xs:enumeration value="electrical" />
+      <xs:enumeration value="electronic" />
+    </xs:restriction>
+  </xs:simpleType>
+  
+  <xs:attributeGroup name="aController">
+    <xs:attribute name="parentControllerRef" type="rail:tGenericRef">
+      <xs:annotation>
+        <xs:documentation>reference to parent controller</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="model" type="xs:string">
+      <xs:annotation>
+        <xs:documentation>(product) name of the controller</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="type" type="rail:tControllerType">
+      <xs:annotation>
+        <xs:documentation>type of controller regarding its complexity and responsibility</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="technologyType" type="rail:tControllerTechnologyType">
+      <xs:annotation>
+        <xs:documentation>technology that the controller is based on</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="swVersion" type="xs:string">
+      <xs:annotation>
+        <xs:documentation>controller software version</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+  </xs:attributeGroup>
 
   <xs:complexType name="tController">
     <xs:complexContent>
@@ -628,8 +728,13 @@
               <xs:documentation source="https://wiki2.railml.org/wiki/IS:states_controller" />
             </xs:annotation>
           </xs:element>
+          <xs:element name="ocpRef" type="rail:tElementRefInGroup" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>reference from a controller to an OCP</xs:documentation>
+            </xs:annotation>
+          </xs:element>
         </xs:sequence>
-        <!--<xs:attribute name="type" type="xs:string" use="optional" />-->
+        <xs:attributeGroup ref="rail:aController"/>
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
@@ -648,7 +753,7 @@
   </xs:attributeGroup>
 
   <xs:attributeGroup name="aOwner">
-    <xs:attribute name="ownerName" type="xs:string" use="optional">
+    <xs:attribute name="ownerName" type="xs:string">
       <xs:annotation>
         <xs:documentation>DEPRECATED, use infrastructureManagerRef instead to refer to a listed infrastructureManager</xs:documentation>
       </xs:annotation>
@@ -758,11 +863,51 @@
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
+  
+  <xs:simpleType name="tMaxTrainCurrentType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="driving"/>
+      <xs:enumeration value="standstill"/>
+    </xs:restriction>
+  </xs:simpleType>
+  
+  <xs:simpleType name="tMaxTrainCurrentValidFor">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="train"/>
+      <xs:enumeration value="pantograph"/>
+    </xs:restriction>
+  </xs:simpleType>
 
   <xs:complexType name="tElectrification">
+    <xs:sequence>
+      <xs:element name="maxTrainCurrent" type="rail:tMaxTrainCurrent" minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>maximum allowed train current</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
     <xs:attributeGroup ref="rail:aElectrification" />
   </xs:complexType>
-
+  
+  <xs:complexType name="tMaxTrainCurrent">
+    <xs:attribute name="maxCurrent" type="rail:tCurrentAmpere">
+      <xs:annotation>
+        <xs:documentation>maximum allowed current for the train in Ampere</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="type" type="rail:tMaxTrainCurrentType">
+      <xs:annotation>
+        <xs:documentation>type of operation for maximum train current: standstill or driving</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="validFor" type="rail:tMaxTrainCurrentValidFor">
+      <xs:annotation>
+        <xs:documentation>application of maximum train current: train or pantograph</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attributeGroup ref="rail:anyAttribute" />
+  </xs:complexType>
+  
   <xs:simpleType name="tElectrificationType">
     <xs:union>
       <xs:simpleType>
@@ -788,6 +933,13 @@
   <xs:complexType name="tElectrificationChange">
     <xs:complexContent>
       <xs:extension base="rail:tStrictOrientedElement">
+        <xs:sequence>
+          <xs:element name="maxTrainCurrent" type="rail:tMaxTrainCurrent" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>maximum allowed train current</xs:documentation>
+            </xs:annotation>
+          </xs:element>
+        </xs:sequence>
         <xs:attributeGroup ref="rail:aElectrification" />
         <xs:attribute name="vMax" type="rail:tSpeedKmPerHour" />
         <xs:attribute name="isolatedSection" type="xs:boolean" default="false" />
@@ -901,7 +1053,7 @@
           </xs:element>
         </xs:sequence>
         <xs:attribute name="absPosIn" type="rail:tLengthM" use="required" />
-        <xs:attribute name="absPosInOffset" type="rail:tLengthM" use="optional">
+        <xs:attribute name="absPosInOffset" type="rail:tLengthM">
           <xs:annotation>
             <xs:documentation>DEPRECATED: not needed, not used</xs:documentation>
           </xs:annotation>
@@ -1012,11 +1164,31 @@
     <xs:union>
       <xs:simpleType>
         <xs:restriction base="xs:string">
-          <xs:enumeration value="mainTrack" />
-          <xs:enumeration value="secondaryTrack" />
-          <xs:enumeration value="connectingTrack" />
-          <xs:enumeration value="sidingTrack" />
-          <xs:enumeration value="stationTrack" />
+          <xs:enumeration value="mainTrack">
+            <xs:annotation>
+              <xs:documentation>regular track a of line used for frequent passenger and freight transport</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="secondaryTrack">
+            <xs:annotation>
+              <xs:documentation>a track not frequently used (e. g. loops for overtaking and/or crossing in stations)</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="connectingTrack">
+            <xs:annotation>
+              <xs:documentation>a transfer track from one to another track e. g. in branches, points or cross overs</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="sidingTrack">
+            <xs:annotation>
+              <xs:documentation>a siding</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="stationTrack">
+            <xs:annotation>
+              <xs:documentation>DEPRECATED; a track in a station, possibly with platforms</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
         </xs:restriction>
       </xs:simpleType>
       <xs:simpleType>
@@ -1037,7 +1209,11 @@
           </xs:element>
         </xs:sequence>
         <xs:attribute name="type" type="rail:tTrackType" />
-        <xs:attribute name="mainDir" type="rail:tExtendedDirection" />
+        <xs:attribute name="mainDir" type="rail:tExtendedDirection">
+          <xs:annotation>
+            <xs:documentation>main driving direction on the track</xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
         <xs:attribute name="infraAttrGroupRef" type="rail:tGenericRef">
           <xs:annotation>
             <xs:documentation>DEPRECATED: use sub-element infraAttrGroupRef instead.</xs:documentation>
@@ -1202,6 +1378,18 @@
       </xs:simpleType>
     </xs:union>
   </xs:simpleType>
+  
+  <xs:simpleType name="tOcpCenterSide">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="left"/>
+      <xs:enumeration value="right"/>
+      <xs:enumeration value="above"/>
+      <xs:enumeration value="below"/>
+      <xs:enumeration value="ahead"/>
+      <xs:enumeration value="behind"/>
+      <xs:enumeration value="none"/>
+    </xs:restriction>
+  </xs:simpleType>
 
   <xs:complexType name="tCrossSection">
     <xs:complexContent>
@@ -1218,6 +1406,11 @@
             <xs:documentation>DEPRECATED since it is not needed here.</xs:documentation>
           </xs:annotation>
         </xs:attribute>
+        <xs:attribute name="ocpCenterSide" type="rail:tOcpCenterSide">
+          <xs:annotation>
+            <xs:documentation>relative direction starting from the relevant track towards the "operational center" of the OCP</xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
@@ -1382,6 +1575,16 @@
             <xs:documentation>reference to an operatingPeriod element from the timetable sub-schema</xs:documentation>
           </xs:annotation>
         </xs:attribute>
+        <xs:attributeGroup ref="rail:aPeriodTimeSpan">
+          <xs:annotation>
+            <xs:documentation>Start and end time of the validity of the speed profile.</xs:documentation>
+          </xs:annotation>
+        </xs:attributeGroup>
+        <xs:attribute name="endDayOffset" type="xs:nonNegativeInteger">
+          <xs:annotation>
+            <xs:documentation>The number of midnight overruns over which the speed profile is valid.</xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
         <xs:attribute name="trainProtectionSystem" type="xs:string">
           <xs:annotation>
             <xs:documentation>defining the train protection system</xs:documentation>
@@ -1418,7 +1621,8 @@
         <xs:attributeGroup ref="rail:aSpeed" />
         <xs:attribute name="trainRelation" type="rail:tTrainRelation">
           <xs:annotation>
-            <xs:documentation>Reference to the part of the train from where on the speed change is valid. Normally, a speed restriction that is higher than the train's current speed will be valid when the end of the train has passed the speed change while a speed restriction that is lower than the train's current speed will be valid already when the head of train passes the speedChange. Only define this attribute if your train relation differs from this default value.</xs:documentation>
+            <xs:documentation>Reference to the part of the train from where on the speed change is valid. Normally, a speed restriction that is higher than the train's current speed will be valid when the end of the train has passed the speed change while a speed restriction that is lower than the train's current speed will be valid already when the head of train passes the speedChange.</xs:documentation>
+            <xs:documentation>If the attribute is not given, it means that the information is not known.</xs:documentation>
           </xs:annotation>
         </xs:attribute>
         <xs:attribute name="mandatoryStop" type="xs:boolean">
@@ -1527,9 +1731,21 @@
   <xs:complexType name="tLevelCrossing">
     <xs:complexContent>
       <xs:extension base="rail:tDelimitedOrientedElement">
-        <xs:attribute name="length" type="rail:tLengthM" default="0.000" />
-        <xs:attribute name="angle" type="rail:tAngleDegQuadrant" default="90" />
-        <xs:attribute name="protection" type="xs:string" default="none" />
+        <xs:attribute name="length" type="rail:tLengthM">
+          <xs:annotation>
+            <xs:documentation>length of the level crossing from railway point of view</xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="angle" type="rail:tAngleDegQuadrant">
+          <xs:annotation>
+            <xs:documentation>crossing angle between road and railway in degrees</xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="protection" type="xs:string">
+          <xs:annotation>
+            <xs:documentation>technical protection equipment at the level crossing</xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
         <xs:attributeGroup ref="rail:aOcpRef" />
       </xs:extension>
     </xs:complexContent>
@@ -1554,7 +1770,12 @@
   <xs:complexType name="tTunnel">
     <xs:complexContent>
       <xs:extension base="rail:tDelimitedOrientedElementWithLength">
-        <xs:attribute name="crossSection" type="rail:tLengthM" />
+        <xs:attribute name="crossSection" type="rail:tLengthM">
+          <xs:annotation>
+            <xs:documentation>The area of the tunnel cross section in square meters.</xs:documentation>
+            <xs:documentation>Attention: currently the units given for crossSection in railML is given in metres (tLengthM), but to be understood and used as square metres. This issue will be fixed in a future railML version.</xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
         <xs:attribute name="kind" type="rail:tTunnelType" />
       </xs:extension>
     </xs:complexContent>
@@ -1915,10 +2136,31 @@
     <xs:union>
       <xs:simpleType>
         <xs:restriction base="xs:string">
-          <xs:enumeration value="bell" />
-          <xs:enumeration value="whistle" />
-          <xs:enumeration value="announcing" />
-          <xs:enumeration value="activating" />
+          <xs:enumeration value="bell">
+            <xs:annotation>
+              <xs:documentation>signal for train driver to ring the locomotive's bell</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="whistle">
+            <xs:annotation>
+              <xs:documentation>signal for train driver to blow the locomotive's whistle</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="announcing">
+            <xs:annotation>
+              <xs:documentation>signal announcing the upcoming level crossing ("distant signal" for level crossing)</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="activating">
+            <xs:annotation>
+              <xs:documentation>signal that marks the position where the train detector for activating the level crossing is situated</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="supervision">
+            <xs:annotation>
+              <xs:documentation>signal supervising the level crossing</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
         </xs:restriction>
       </xs:simpleType>
       <xs:simpleType>
@@ -2050,17 +2292,33 @@
   </xs:simpleType>
 
   <xs:attributeGroup name="aSignal">
-    <xs:attribute name="sight" type="rail:tLengthM" />
+    <xs:attribute name="sight" type="rail:tLengthM">
+      <xs:annotation>
+        <xs:documentation>DEPRECATED with railML 2.4 since it is not being used</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
     <xs:attribute name="type" type="rail:tSignalType" />
     <xs:attribute name="function" type="rail:tSignalFunction" />
-    <xs:attribute name="sigSystem" type="xs:string" />
+    <xs:attribute name="sigSystem" type="xs:string">
+      <xs:annotation>
+        <xs:documentation>DEPRECATED since it is not needed and not used.</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
     <xs:attribute name="switchable" type="xs:boolean">
       <xs:annotation>
         <xs:documentation>DEPRECATED: use attribute 'switchable' in sub-elements instead</xs:documentation>
       </xs:annotation>
     </xs:attribute>
-    <xs:attribute name="maskableRoute" type="xs:boolean" />
-    <xs:attribute name="maskableATC" type="xs:boolean" />
+    <xs:attribute name="maskableRoute" type="xs:boolean">
+      <xs:annotation>
+        <xs:documentation>DEPRECATED with railML 2.4 since it is not being used; refers to interlocking content</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="maskableATC" type="xs:boolean">
+      <xs:annotation>
+        <xs:documentation>DEPRECATED with railML 2.4 since it is not being used; refers to interlocking content</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
     <xs:attribute name="virtual" type="xs:boolean" default="false" />
     <xs:attribute name="signalBoxOcpRef" type="rail:tGenericRef">
       <xs:annotation>
@@ -2072,7 +2330,11 @@
         <xs:documentation>DEPRECATED: use attribute 'ocpStationRef' instead</xs:documentation>
       </xs:annotation>
     </xs:attribute>
-    <xs:attribute name="distNearestDangerPoint" type="rail:tLengthM" />
+    <xs:attribute name="distNearestDangerPoint" type="rail:tLengthM">
+      <xs:annotation>
+        <xs:documentation>DEPRECATED with railML 2.4 since it is not being used; refers to interlocking content</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
     <xs:attribute name="trackDist" type="rail:tLengthM" />
     <xs:attribute name="height" type="rail:tLengthM" />
   </xs:attributeGroup>
@@ -2196,7 +2458,11 @@
     <xs:attribute name="linkingAccuracy" type="rail:tBaliseLinkingAcc" />
     <xs:attribute name="linkReactionAscending" type="rail:tBaliseLinkReaction" />
     <xs:attribute name="linkReactionDescending" type="rail:tBaliseLinkReaction" />
-    <xs:attribute name="staticTelegram" type="xs:string" />
+    <xs:attribute name="staticTelegram" type="rail:tHexString">
+      <xs:annotation>
+        <xs:documentation>telegram coded to the balise; representation of the binary as hex string</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
   </xs:attributeGroup>
 
   <xs:simpleType name="tBaliseLinkReaction">
@@ -2352,6 +2618,18 @@
     </xs:complexContent>
   </xs:complexType>
   
+  <xs:complexType name="tLock">
+    <xs:complexContent>
+      <xs:extension base="rail:tOrientedElement">
+        <xs:attributeGroup ref="rail:anyAttribute">
+          <xs:annotation>
+            <xs:documentation>provide an extension point for non-railML attributes in foreign namespace</xs:documentation>
+          </xs:annotation>
+        </xs:attributeGroup>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  
   <xs:simpleType name="tDerailKind">
     <xs:restriction base="xs:string">
       <xs:enumeration value="blockDerail">
diff --git a/schema/physicalUnits.xsd b/schema/physicalUnits.xsd
index 858e259..7f84748 100644
--- a/schema/physicalUnits.xsd
+++ b/schema/physicalUnits.xsd
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
   <!-- $Id$ -->
-<xs:schema xmlns:rail="https://www.railml.org/schemas/2016" 
+<xs:schema xmlns:rail="https://www.railml.org/schemas/2018" 
            xmlns:xs="https://www.w3.org/2001/XMLSchema" 
-           targetNamespace="https://www.railml.org/schemas/2016" 
+           targetNamespace="https://www.railml.org/schemas/2018" 
            elementFormDefault="qualified" 
-           version="2.3">
+           version="2.4">
 
   <xs:annotation>
-    <xs:documentation>Copyright (c) railML.org; All Rights Reserved.</xs:documentation>
+    <xs:documentation>Copyright (c) railML.org e.V. Dresden/Germany; All Rights Reserved.</xs:documentation>
     <xs:documentation>This work is licensed under the restricted CreativeCommons Attribution-NonCommercial-NoDerivs 3.0 Unported License with additional license conditions of railML.org.</xs:documentation>
-    <xs:documentation>For further information see: https://www.railml.org/en/user/licence.html</xs:documentation>
-    <xs:documentation>Content of this file: XML Schema for railML(R) 2.3 Definition of simple types, which represent general units of measure, used by all sub schemas</xs:documentation>
+    <xs:documentation>For further information see: https://www.railml.org/licence</xs:documentation>
+    <xs:documentation>Content of this file: XML Schema for railML(R) 2.4 Definition of simple types, which represent general units of measure, used by all sub schemas</xs:documentation>
   </xs:annotation>
 
   <xs:include schemaLocation="genericRailML.xsd" />
@@ -216,6 +216,15 @@
     </xs:annotation>
     <xs:restriction base="rail:tForce" />
   </xs:simpleType>
+  
+  <xs:simpleType name="tForceCoefficentNewton">
+  	<xs:annotation>
+  		<xs:documentation>generic type for coefficent values measured in newton</xs:documentation>
+  	</xs:annotation>
+    <xs:restriction base="xs:decimal">
+      <xs:fractionDigits value="6" />
+    </xs:restriction>
+  </xs:simpleType>
 
   <xs:simpleType name="tPower">
     <xs:annotation>
diff --git a/schema/railML.xsd b/schema/railML.xsd
index 03a324f..dd3cc63 100644
--- a/schema/railML.xsd
+++ b/schema/railML.xsd
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
   <!-- $Id$ -->
-<xs:schema xmlns:rail="https://www.railml.org/schemas/2016" 
+<xs:schema xmlns:rail="https://www.railml.org/schemas/2018" 
            xmlns:xs="https://www.w3.org/2001/XMLSchema" 
            xmlns:dc="https://purl.org/dc/elements/1.1/" 
-           targetNamespace="https://www.railml.org/schemas/2016" 
+           targetNamespace="https://www.railml.org/schemas/2018" 
            elementFormDefault="qualified" 
-           version="2.3">
+           version="2.4">
 
   <xs:annotation>
-    <xs:documentation>Copyright (c) railML.org; All Rights Reserved.</xs:documentation>
+    <xs:documentation>Copyright (c) railML.org e.V. Dresden/Germany; All Rights Reserved.</xs:documentation>
     <xs:documentation>This work is licensed under the restricted CreativeCommons Attribution-NonCommercial-NoDerivs 3.0 Unported License with additional license conditions of railML.org.</xs:documentation>
-    <xs:documentation>For further information see: https://www.railml.org/en/user/licence.html</xs:documentation>
-    <xs:documentation>Content of this file: XML Schema for railML(R) 2.3 Definition of root element "railml", refers to elements of all sub schemas from "xs:include" paths</xs:documentation>
+    <xs:documentation>For further information see: https://www.railml.org/licence</xs:documentation>
+    <xs:documentation>Content of this file: XML Schema for railML(R) 2.4 Definition of root element "railml", refers to elements of all sub schemas from "xs:include" paths</xs:documentation>
   </xs:annotation>
 
   <xs:include schemaLocation="infrastructure.xsd" />
@@ -36,7 +36,7 @@
         </xs:element>
         <xs:element ref="rail:infrastructureVisualizations" minOccurs="0">
           <xs:annotation>
-            <xs:documentation>DEPRECATED: moving as 'visualizations' inside 'infrastructure'</xs:documentation>
+            <xs:documentation>use this branch to model explicit visualizations of infrastructure data</xs:documentation>
           </xs:annotation>
         </xs:element>
         <xs:element ref="rail:rollingstock" minOccurs="0">
diff --git a/schema/railwayBaseTypes.xsd b/schema/railwayBaseTypes.xsd
index a3285c4..b4ce5cb 100644
--- a/schema/railwayBaseTypes.xsd
+++ b/schema/railwayBaseTypes.xsd
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- $Id$ -->
-<xs:schema xmlns:rail="https://www.railml.org/schemas/2016" 
+<xs:schema xmlns:rail="https://www.railml.org/schemas/2018" 
            xmlns:xs="https://www.w3.org/2001/XMLSchema" 
            xmlns:dc="https://purl.org/dc/elements/1.1/" 
-           targetNamespace="https://www.railml.org/schemas/2016" 
+           targetNamespace="https://www.railml.org/schemas/2018" 
            elementFormDefault="qualified" 
-           version="2.3">
+           version="2.4">
 
   <xs:annotation>
-    <xs:documentation>Copyright (c) railML.org; All Rights Reserved.</xs:documentation>
+    <xs:documentation>Copyright (c) railML.org e.V. Dresden/Germany; All Rights Reserved.</xs:documentation>
     <xs:documentation>This work is licensed under the restricted CreativeCommons Attribution-NonCommercial-NoDerivs 3.0 Unported License with additional license conditions of railML.org.</xs:documentation>
-    <xs:documentation>For further information see: https://www.railml.org/en/user/licence.html</xs:documentation>
-    <xs:documentation>Content of this file: XML Schema for railML(R) 2.3 Definition of attribute groups, simple and complex types, used by more than one sub schema</xs:documentation>
+    <xs:documentation>For further information see: https://www.railml.org/licence</xs:documentation>
+    <xs:documentation>Content of this file: XML Schema for railML(R) 2.4 Definition of attribute groups, simple and complex types, used by more than one sub schema</xs:documentation>
   </xs:annotation>
 
   <xs:include schemaLocation="genericRailML.xsd" />
@@ -267,6 +267,16 @@
       </xs:enumeration>
     </xs:restriction>
   </xs:simpleType>
+	
+  <xs:simpleType name="tPassengersPerSecond">
+    <xs:annotation>
+      <xs:documentation>number of passengers per second used for flow description</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:decimal">
+      <xs:fractionDigits value="3" />
+      <xs:minInclusive value="0" />
+    </xs:restriction>
+  </xs:simpleType>
 
   <xs:complexType name="ePassengerFacility">
     <xs:sequence>
@@ -323,6 +333,7 @@
           <xs:enumeration value="class2" />
           <xs:enumeration value="class3" />
           <xs:enumeration value="standing" />
+          <xs:enumeration value="standingArea" />
           <xs:enumeration value="wheelchair" />
           <xs:enumeration value="bicycle" />
           <xs:enumeration value="couchette" />
@@ -333,9 +344,14 @@
           <xs:enumeration value="foldingSeat" />
           <xs:enumeration value="impairedToilet" />
           <xs:enumeration value="toilet" />
+          <xs:enumeration value="business" />
           <xs:enumeration value="businessCompartment" />
+          <xs:enumeration value="family" />
           <xs:enumeration value="familyCompartment" />
+          <xs:enumeration value="stroller" />
+          <xs:enumeration value="toddler" />
           <xs:enumeration value="toddlerCompartment" />
+          <xs:enumeration value="sleepingCompartment" />
         </xs:restriction>
       </xs:simpleType>
       <xs:simpleType>
@@ -353,7 +369,7 @@
   </xs:complexType>
 
   <xs:attributeGroup name="aService">
-    <xs:attribute name="name" type="rail:tGenericName" use="required" />
+    <xs:attribute name="name" type="rail:tGenericName" />
     <xs:attribute name="tapTsiType7161Code">
       <xs:annotation>
         <xs:documentation>Code list for the special services based on the directory of passenger code lists for the ERA technical documents used in TAP TSI (B.4.7161)</xs:documentation>
@@ -366,7 +382,7 @@
         </xs:restriction>
       </xs:simpleType>
     </xs:attribute>
-    <xs:attribute name="count" type="rail:tCounter" use="required">
+    <xs:attribute name="count" type="rail:tCounter">
       <xs:annotation>
         <xs:documentation>count="0" means: there is not such a service</xs:documentation>
       </xs:annotation>
@@ -390,6 +406,16 @@
         <xs:restriction base="xs:string">
           <xs:enumeration value="mobileCatering" />
           <xs:enumeration value="WLAN" />
+          <xs:enumeration value="wheelchairLift" />
+          <xs:enumeration value="toiletClosed" />
+          <xs:enumeration value="toiletOpen" />
+          <xs:enumeration value="toiletHc" />
+          <xs:enumeration value="Snack" />
+          <xs:enumeration value="SelfService" />
+          <xs:enumeration value="PIS" />
+          <xs:enumeration value="HVAC" />
+          <xs:enumeration value="APC" />
+          <xs:enumeration value="SecurityCamera" />
         </xs:restriction>
       </xs:simpleType>
       <xs:simpleType>
@@ -552,6 +578,24 @@
       </xs:annotation>
     </xs:attribute>
   </xs:attributeGroup>
+  
+  <xs:simpleType name="tHexString">
+    <xs:annotation>
+      <xs:documentation>an arbitrary string consisting of hex digits from 0 to 9, a to f; not allowing white space, letters; no length restriction</xs:documentation>
+    </xs:annotation>
+    <xs:restriction base="xs:string">
+      <xs:pattern value="[0-9a-fA-F]*"/>
+    </xs:restriction>
+  </xs:simpleType>
+  
+  <xs:simpleType name="tUsageType">
+    <xs:restriction base="xs:string">
+      <xs:enumeration value="passenger" />
+      <xs:enumeration value="goods" />
+      <xs:enumeration value="mixed" />
+    </xs:restriction>
+  </xs:simpleType>
+  
 
   <xs:complexType name="tMetadata">
     <xs:complexContent>
diff --git a/schema/railwayUnits.xsd b/schema/railwayUnits.xsd
index 3c08f58..11c1905 100644
--- a/schema/railwayUnits.xsd
+++ b/schema/railwayUnits.xsd
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
   <!-- $Id$ -->
-<xs:schema xmlns:rail="https://www.railml.org/schemas/2016" 
+<xs:schema xmlns:rail="https://www.railml.org/schemas/2018" 
            xmlns:xs="https://www.w3.org/2001/XMLSchema" 
-           targetNamespace="https://www.railml.org/schemas/2016" 
+           targetNamespace="https://www.railml.org/schemas/2018" 
            elementFormDefault="qualified" 
-           version="2.3">
+           version="2.4">
 
   <xs:annotation>
-    <xs:documentation>Copyright (c) railML.org; All Rights Reserved.</xs:documentation>
+    <xs:documentation>Copyright (c) railML.org e.V. Dresden/Germany; All Rights Reserved.</xs:documentation>
     <xs:documentation>This work is licensed under the restricted CreativeCommons Attribution-NonCommercial-NoDerivs 3.0 Unported License with additional license conditions of railML.org.</xs:documentation>
-    <xs:documentation>For further information see: https://www.railml.org/en/user/licence.html</xs:documentation>
-    <xs:documentation>Content of this file: XML Schema for railML(R) 2.3 Definition of simple types, which represent railway specific units of measure and enumeration lists, used by all sub schemas</xs:documentation>
+    <xs:documentation>For further information see: https://www.railml.org/licence</xs:documentation>
+    <xs:documentation>Content of this file: XML Schema for railML(R) 2.4 Definition of simple types, which represent railway specific units of measure and enumeration lists, used by all sub schemas</xs:documentation>
   </xs:annotation>
 
   <xs:include schemaLocation="physicalUnits.xsd" />
@@ -136,7 +136,7 @@
 
   <xs:simpleType name="tEffortNewton">
     <xs:annotation>
-      <xs:documentation>generic type for effort values measured in newton</xs:documentation>
+      <xs:documentation>DEPRECATED: Use physical unit data type tForceNewton instead.</xs:documentation>
     </xs:annotation>
     <xs:restriction base="rail:tForceNewton" />
   </xs:simpleType>
diff --git a/schema/rollingstock.xsd b/schema/rollingstock.xsd
index 84f83cc..a9f79c8 100644
--- a/schema/rollingstock.xsd
+++ b/schema/rollingstock.xsd
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
   <!-- $Id$ -->
-<xs:schema xmlns:rail="https://www.railml.org/schemas/2016" 
+<xs:schema xmlns:rail="https://www.railml.org/schemas/2018" 
            xmlns:xs="https://www.w3.org/2001/XMLSchema" 
            xmlns:xml="https://www.w3.org/XML/1998/namespace" 
-           targetNamespace="https://www.railml.org/schemas/2016" 
+           targetNamespace="https://www.railml.org/schemas/2018" 
            elementFormDefault="qualified" 
-           version="2.3">
+           version="2.4">
   <xs:annotation>
-    <xs:documentation>Copyright (c) railML.org; All Rights Reserved.</xs:documentation>
+    <xs:documentation>Copyright (c) railML.org e.V. Dresden/Germany; All Rights Reserved.</xs:documentation>
     <xs:documentation>This work is licensed under the restricted CreativeCommons Attribution-NonCommercial-NoDerivs 3.0 Unported License with additional license conditions of railML.org.</xs:documentation>
-    <xs:documentation>For further information see: https://www.railml.org/en/user/licence.html</xs:documentation>
-    <xs:documentation>Content of this file: XML Schema for railML(R) 2.3 Definition of elements (partially hidden as complex type) for rollingstock sub schema (RS), uses rollingstock types and attribute groups from "xs:include" path</xs:documentation>
+    <xs:documentation>For further information see: https://www.railml.org/licence</xs:documentation>
+    <xs:documentation>Content of this file: XML Schema for railML(R) 2.4 Definition of elements (partially hidden as complex type) for rollingstock sub schema (RS), uses rollingstock types and attribute groups from "xs:include" path</xs:documentation>
   </xs:annotation>
 
   <xs:include schemaLocation="rollingstockTypes.xsd" />
@@ -161,7 +161,7 @@
   	<xs:complexContent>
   	  <xs:extension base="rail:tOperator">
   		<xs:sequence>
-  		  <xs:element name="vehicleIdentification" type="rail:tVehicleIdentification" minOccurs="0" maxOccurs="1">
+  		  <xs:element name="vehicleIdentification" type="rail:tVehicleIdentification" minOccurs="0">
   		    <xs:annotation>
   		      <xs:documentation>vehicle identification as described by EU paper DV51EN01 annex P or UIC 438</xs:documentation>
   		      <xs:documentation source="https://wiki2.railml.org/wiki/RS:vehicleIdentification" />
@@ -624,7 +624,7 @@
               <xs:documentation source="https://wiki2.railml.org/wiki/RS:gangway" />
             </xs:annotation>
           </xs:element>
-          <xs:element name="doors" type="rail:tDoors" minOccurs="0">
+          <xs:element name="doors" type="rail:eDoors" minOccurs="0">
             <xs:annotation>
               <xs:documentation>data about door dimensions</xs:documentation>
               <xs:documentation source="https://wiki2.railml.org/wiki/RS:doors" />
@@ -640,6 +640,21 @@
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
+	
+	<xs:complexType name="eDoors">
+		<xs:complexContent>
+			<xs:extension base="rail:tDoors">
+				<xs:sequence>
+					<xs:element name="passengerFlowSpeed" type="rail:tPassengerFlowSpeed" minOccurs="0" maxOccurs="unbounded">
+			            <xs:annotation>
+			              <xs:documentation>data about speed of passenger flow</xs:documentation>
+			              <xs:documentation source="https://wiki2.railml.org/wiki/RS:passengerFlowSpeed" />
+			            </xs:annotation>
+					</xs:element>
+				</xs:sequence>
+			</xs:extension>
+		</xs:complexContent>
+	</xs:complexType>
 
   <xs:complexType name="eGoods">
     <xs:complexContent>
@@ -721,6 +736,12 @@
           <xs:documentation source="https://wiki2.railml.org/wiki/RS:vehicleBrake" />
         </xs:annotation>
       </xs:element>
+      <xs:element name="vehicleBrakeOperation" type="rail:tBasicBrakeOperation" minOccurs="0" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation>operational braking rules according to specific supervision regime for single vehicle</xs:documentation>
+          <xs:documentation source="https://wiki2.railml.org/wiki/RS:vehicleBrakeOperation" />
+        </xs:annotation>
+      </xs:element>
       <xs:element name="mechanicalBrakeEffort" type="rail:tEffortCurve" minOccurs="0">
         <xs:annotation>
           <xs:documentation>mechanical brake effort at wheel vs. speed by brake systems without propulsion</xs:documentation>
@@ -746,7 +767,7 @@
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
-
+  
   <xs:complexType name="eCurvingLimitation">
     <xs:complexContent>
       <xs:extension base="rail:tCurvingLimitationType">
@@ -856,12 +877,29 @@
               <xs:documentation source="https://wiki2.railml.org/wiki/RS:trainBrakes" />
             </xs:annotation>
           </xs:element>
-          <xs:element name="trainResistance" type="rail:tTrainResistance" minOccurs="0">
+          <xs:element name="trainBrakeOperation" type="rail:tBasicBrakeOperation" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>operational braking rules according to specific supervision regime for entire formation</xs:documentation>
+              <xs:documentation source="https://wiki2.railml.org/wiki/RS:trainBrakeOperation" />
+            </xs:annotation>
+          </xs:element>
+           <xs:element name="trainResistance" type="rail:tTrainResistance" minOccurs="0">
             <xs:annotation>
               <xs:documentation>mechanical train resistance vs. speed</xs:documentation>
               <xs:documentation source="https://wiki2.railml.org/wiki/RS:trainResistance" />
             </xs:annotation>
           </xs:element>
+          <xs:element name="speedProfileRef" type="rail:tSpeedProfileRefRS" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation>reference to permissible speed profiles for entire formation</xs:documentation>
+              <xs:documentation source="https://wiki2.railml.org/wiki/RS:speedProfileRefRS" />
+            </xs:annotation>
+          </xs:element>
+          <xs:element name="technicalStopActivity" type="rail:tTechnicalStopActivity" minOccurs="0" maxOccurs="unbounded">
+          	<xs:annotation>
+          		<xs:documentation>list of stop activities with their related technical times</xs:documentation>
+          	</xs:annotation>
+          </xs:element>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
diff --git a/schema/rollingstockTypes.xsd b/schema/rollingstockTypes.xsd
index 9ed79ae..c8d1cf1 100644
--- a/schema/rollingstockTypes.xsd
+++ b/schema/rollingstockTypes.xsd
@@ -1,15 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
   <!-- $Id$ -->
-<xs:schema xmlns:rail="https://www.railml.org/schemas/2016" 
+<xs:schema xmlns:rail="https://www.railml.org/schemas/2018" 
            xmlns:xs="https://www.w3.org/2001/XMLSchema" 
-           targetNamespace="https://www.railml.org/schemas/2016" 
+           targetNamespace="https://www.railml.org/schemas/2018" 
            elementFormDefault="qualified" 
-           version="2.3">
+           version="2.4">
   <xs:annotation>
-    <xs:documentation>Copyright (c) railML.org; All Rights Reserved.</xs:documentation>
+    <xs:documentation>Copyright (c) railML.org e.V. Dresden/Germany; All Rights Reserved.</xs:documentation>
     <xs:documentation>This work is licensed under the restricted CreativeCommons Attribution-NonCommercial-NoDerivs 3.0 Unported License with additional license conditions of railML.org.</xs:documentation>
-    <xs:documentation>For further information see: https://www.railml.org/en/user/licence.html</xs:documentation>
-    <xs:documentation>Content of this file: XML Schema for railML(R) 2.3 Definition of attribute groups, simple and complex types, used by rollingstock sub schema (RS)</xs:documentation>
+    <xs:documentation>For further information see: https://www.railml.org/licence</xs:documentation>
+    <xs:documentation>Content of this file: XML Schema for railML(R) 2.4 Definition of attribute groups, simple and complex types, used by rollingstock sub schema (RS)</xs:documentation>
   </xs:annotation>
 
   <xs:include schemaLocation="railwayUnits.xsd" />
@@ -367,7 +367,7 @@
         <xs:documentation>type of control for propulsion system in the vehicle</xs:documentation>
       </xs:annotation>
     </xs:attribute>
-    <xs:attribute name="maxTractEffort" type="rail:tEffortNewton">
+    <xs:attribute name="maxTractEffort" type="rail:tForceNewton">
       <xs:annotation>
         <xs:documentation>maximum tractive effort per vehicle in Newton (to be used in conjunction with 'tractiveEffort' element)</xs:documentation>
       </xs:annotation>
@@ -402,7 +402,7 @@
         <xs:documentation>nominal diameter of driven wheels in m</xs:documentation>
       </xs:annotation>
     </xs:attribute>
-    <xs:attribute name="maxBrakeEffort" type="rail:tEffortNewton">
+    <xs:attribute name="maxBrakeEffort" type="rail:tForceNewton">
       <xs:annotation>
         <xs:documentation>maximum braking effort of propulsion system per vehicle in N (to be used in conjunction with 'brakeEffort' element)</xs:documentation>
       </xs:annotation>
@@ -1013,6 +1013,79 @@
       </xs:annotation>
     </xs:attribute>
   </xs:attributeGroup>
+  
+  <xs:complexType name="tSpeedProfileRefRS">
+	<xs:annotation>
+		<xs:documentation></xs:documentation>
+	</xs:annotation>
+	<xs:attributeGroup ref="rail:aSpeedProfileRefRS" />
+  </xs:complexType>
+  
+  <xs:attributeGroup name="aSpeedProfileRefRS">
+  	<xs:attribute name="ref" type="rail:tGenericRef">
+      <xs:annotation>
+        <xs:documentation>corresponding @id in 'infrastructure/speedProfile' in the same file</xs:documentation>
+      </xs:annotation>
+  	</xs:attribute>
+  	<xs:attribute name="name" type="rail:tGenericName">
+      <xs:annotation>
+        <xs:documentation>corresponding @name in 'infrastructure/speedProfile' in another file</xs:documentation>
+      </xs:annotation>
+  	</xs:attribute>
+  </xs:attributeGroup>
+
+  <xs:complexType name="tBasicBrakeOperation">
+    <xs:annotation>
+        <xs:documentation>data type for description of brake operation</xs:documentation>
+    </xs:annotation>
+    <xs:sequence>
+      <xs:element name="decelerationTable" type="rail:tDecelerationCurve" minOccurs="0">
+      </xs:element>
+    </xs:sequence>
+    <xs:attributeGroup ref="rail:aBasicBrakeOperation" />
+  </xs:complexType>
+  
+  <xs:attributeGroup name="aBasicBrakeOperation">
+    <xs:attribute name="brakeSupervision" type="rail:tSupervisionType">
+      <xs:annotation>
+        <xs:documentation>possible values for selection of different brake operation rules</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="decelerationDelay" type="xs:duration">
+      <xs:annotation>
+        <xs:documentation>average brake application time, typically in seconds</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="releaseSpeed" type="rail:tSpeedKmPerHour">
+      <xs:annotation>
+        <xs:documentation>below this speed limit in km/h generally the supervision regime of "none" shall apply</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="meanDeceleration" type="rail:tAccelerationMeterPerSquareSec">
+      <xs:annotation>
+        <xs:documentation>average deceleration value in this supervision regime in m/s^2</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+  </xs:attributeGroup>
+  
+  <xs:simpleType name="tSupervisionType">
+    <xs:annotation>
+      <xs:documentation>list of possible brake supervision regimes causing different operational behaviour during braking</xs:documentation>
+    </xs:annotation>  
+    <xs:union>
+      <xs:simpleType>
+        <xs:restriction base="xs:string">
+          <xs:enumeration value="none" />
+          <xs:enumeration value="ATP" />
+          <xs:enumeration value="ETCS" />
+          <xs:enumeration value="unknown" />
+        </xs:restriction>
+      </xs:simpleType>
+      <xs:simpleType>
+        <xs:restriction base="rail:tOtherEnumerationValue" />
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
 
   <xs:complexType name="tWagon">
     <xs:annotation>
@@ -1214,9 +1287,39 @@
         <xs:documentation>speed limit for locking the doors during train ride</xs:documentation>
       </xs:annotation>
     </xs:attribute>
+		<xs:attribute name="openingTime" type="xs:duration">
+      <xs:annotation>
+        <xs:documentation>Time from stand-still of the vehicle to the flow of passengers can start through the doors. This is estimated to be at a door gap of 80cm.</xs:documentation>
+      </xs:annotation>
+		</xs:attribute>
+		<xs:attribute name="closingTime" type="xs:duration">
+      <xs:annotation>
+        <xs:documentation>Time after closing signal is given on the last door to the vehicles can be put in motion.</xs:documentation>
+      </xs:annotation>
+		</xs:attribute>
   </xs:attributeGroup>
 
-  <xs:complexType name="tGoods">
+	<xs:complexType name="tPassengerFlowSpeed">
+		<xs:annotation>
+			<xs:documentation>data for passenger flow speed</xs:documentation>
+		</xs:annotation>
+		<xs:attributeGroup ref="rail:aPassengerFlowSpeed" />
+	</xs:complexType>
+	
+	<xs:attributeGroup name="aPassengerFlowSpeed">
+		<xs:attribute name="flowSpeed" type="rail:tPassengersPerSecond">
+			<xs:annotation>
+				<xs:documentation>average/planned number of passengers per second that can flow through the doors and vestibules of the vehicle at given platform heights</xs:documentation>
+			</xs:annotation>
+		</xs:attribute>
+		<xs:attribute name="platformHeight" type="rail:tLengthMM">
+			<xs:annotation>
+				<xs:documentation>platform height in millimetres for a given flow speed</xs:documentation>
+			</xs:annotation>
+		</xs:attribute>
+	</xs:attributeGroup>
+  
+	<xs:complexType name="tGoods">
     <xs:annotation>
       <xs:documentation>data for freight cars</xs:documentation>
     </xs:annotation>
@@ -1308,7 +1411,7 @@
         <xs:documentation>maximal power consumption in Watt</xs:documentation>
       </xs:annotation>
     </xs:attribute>
-    <xs:attribute name="maxEffort" type="rail:tEffortNewton" use="required">
+    <xs:attribute name="maxEffort" type="rail:tForceNewton" use="required">
       <xs:annotation>
         <xs:documentation>maximal braking effort achieved in Newton</xs:documentation>
       </xs:annotation>
@@ -1367,6 +1470,11 @@
         <xs:documentation>tare weight (empty vehicles) in metrical tons of the entire formation (shall be in accordance with the sum of single vehicles)</xs:documentation>
       </xs:annotation>
     </xs:attribute>
+    <xs:attribute name="etcsTrainCategory" type="rail:tEtcsTrainCategory">
+    	<xs:annotation>
+    		<xs:documentation>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</xs:documentation>
+    	</xs:annotation>
+    </xs:attribute>
   </xs:attributeGroup>
 
   <xs:complexType name="tVehicleRef">
@@ -1416,6 +1524,11 @@
         <xs:documentation>formation whole maximum acceleration in m/s^2</xs:documentation>
       </xs:annotation>
     </xs:attribute>
+    <xs:attribute name="trainMinTimeHoldSpeed" type="xs:duration">
+      <xs:annotation>
+        <xs:documentation>minimum time the train can maintain its speed before it must brake as flag for acceleration acceptance</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
   </xs:attributeGroup>
 
   <xs:complexType name="tTrainResistance">
@@ -1429,9 +1542,39 @@
             <xs:documentation>factor for increasing air resistance when running through tunnel</xs:documentation>
           </xs:annotation>
         </xs:attribute>
+        <xs:attributeGroup ref="rail:aResistanceFormula">
+        </xs:attributeGroup>
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
+  
+  <xs:attributeGroup name="aResistanceFormula">
+  	<xs:attribute name="strahlFactor" type="rail:tForceCoefficentNewton">
+  	  <xs:annotation>
+  	    <xs:documentation>coefficent used for calculation of train resistance according formula of Strahl/Sauthoff</xs:documentation>
+  	  </xs:annotation>
+  	</xs:attribute>
+  	<xs:attribute name="daviesMassDependent" type="xs:boolean">
+  	  <xs:annotation>
+  	    <xs:documentation>flag, whether the coefficents of Davies formula are to be considered mass dependent</xs:documentation>
+  	  </xs:annotation>
+  	</xs:attribute>
+  	<xs:attribute name="daviesFactorA" type="rail:tForceCoefficentNewton">
+  	  <xs:annotation>
+  	    <xs:documentation>constant coefficent A used for calculation of train resistance according formula of Davies</xs:documentation>
+  	  </xs:annotation>
+  	</xs:attribute>
+  	<xs:attribute name="daviesFactorB" type="rail:tForceCoefficentNewton">
+  	  <xs:annotation>
+  	    <xs:documentation>speed dependent coefficent B used for calculation of train resistance according formula of Davies</xs:documentation>
+  	  </xs:annotation>
+  	</xs:attribute>
+  	<xs:attribute name="daviesFactorC" type="rail:tForceCoefficentNewton">
+  	  <xs:annotation>
+  	    <xs:documentation>square speed dependent coefficent C used for calculation of train resistance according formula of Davies</xs:documentation>
+  	  </xs:annotation>
+  	</xs:attribute>
+  </xs:attributeGroup>
 
   <xs:attributeGroup name="aAssemblyNameNumber">
     <xs:attribute name="count" type="rail:tCounter" use="required">
@@ -1491,6 +1634,15 @@
     </xs:complexContent>
   </xs:complexType>
 
+  <xs:complexType name="tDecelerationCurve">
+    <xs:annotation>
+      <xs:documentation>deceleration curve vs. speed for brake operation</xs:documentation>
+    </xs:annotation>
+    <xs:complexContent>
+      <xs:extension base="rail:tCurve" />
+    </xs:complexContent>
+  </xs:complexType>
+
   <xs:complexType name="tCurve">
     <xs:annotation>
       <xs:documentation>generic curve of function y=f(x,z)</xs:documentation>
@@ -2197,4 +2349,56 @@
     </xs:union>
   </xs:simpleType>
 
+  <xs:complexType name="tTechnicalStopActivity">
+    <xs:annotation>
+      <xs:documentation>data about times technically required to perform for a particular formation</xs:documentation>
+    </xs:annotation>
+    <xs:attributeGroup ref="rail:aTechnicalStopActivity" />
+  </xs:complexType>
+  
+  <xs:attributeGroup name="aTechnicalStopActivity">
+  	<xs:attribute name="minimumTime" type="xs:duration">
+  		<xs:annotation>
+  			<xs:documentation>The time technically required for this formation to perform the activity</xs:documentation>
+  		</xs:annotation>
+  	</xs:attribute>
+  	<xs:attribute name="purpose" type="rail:tTechnicalStopActivityTypes">
+  		<xs:annotation>
+  			<xs:documentation>Selection of the particular activity</xs:documentation>
+  		</xs:annotation>
+  	</xs:attribute>
+  </xs:attributeGroup>
+
+  <xs:simpleType name="tTechnicalStopActivityTypes">
+    <xs:union>
+      <xs:simpleType>
+        <xs:restriction base="xs:string">
+          <xs:enumeration value="split">
+            <xs:annotation>
+              <xs:documentation>Technical process for uncouple formations / train parts - intended for self-propelling train parts.</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="join">
+            <xs:annotation>
+              <xs:documentation>Technical process for couple formations / train parts - intended for self-propelling train parts.</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="reversing-one_driver">
+            <xs:annotation>
+              <xs:documentation>Technical process for reversing the train direction with one driver who needs to go from one cab to the other</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="reversing-two_driver">
+            <xs:annotation>
+              <xs:documentation>Technical process for reversing train direction with two dirvers, thus without need to go from one cab to the other</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+        </xs:restriction>
+      </xs:simpleType>
+      <xs:simpleType>
+        <xs:restriction base="rail:tOtherEnumerationValue"/>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+
 </xs:schema>
diff --git a/schema/timetable.xsd b/schema/timetable.xsd
index 30d721b..f9aa11c 100644
--- a/schema/timetable.xsd
+++ b/schema/timetable.xsd
@@ -1,16 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- $Id$ -->
-<xs:schema xmlns:rail="https://www.railml.org/schemas/2016" 
+<xs:schema xmlns:rail="https://www.railml.org/schemas/2018" 
            xmlns:xs="https://www.w3.org/2001/XMLSchema" 
-           targetNamespace="https://www.railml.org/schemas/2016" 
+           targetNamespace="https://www.railml.org/schemas/2018" 
            elementFormDefault="qualified" 
-           version="2.3">
+           version="2.4">
 
   <xs:annotation>
-    <xs:documentation>Copyright (c) railML.org; All Rights Reserved.</xs:documentation>
+    <xs:documentation>Copyright (c) railML.org e.V. Dresden/Germany; All Rights Reserved.</xs:documentation>
     <xs:documentation>This work is licensed under the restricted CreativeCommons Attribution-NonCommercial-NoDerivs 3.0 Unported License with additional license conditions of railML.org.</xs:documentation>
-    <xs:documentation>For further information see: https://www.railml.org/en/user/licence.html</xs:documentation>
-    <xs:documentation>Content of this file: XML Schema for railML(R) 2.3 Definition of elements (partially hidden as complex type) for timetable sub schema (TT), uses timetable types and attribute groups from "xs:include" path</xs:documentation>
+    <xs:documentation>For further information see: https://www.railml.org/licence</xs:documentation>
+    <xs:documentation>Content of this file: XML Schema for railML(R) 2.4 Definition of elements (partially hidden as complex type) for timetable sub schema (TT), uses timetable types and attribute groups from "xs:include" path</xs:documentation>
   </xs:annotation>
 
   <xs:include schemaLocation="timetableTypes.xsd" />
@@ -274,7 +274,7 @@
     <xs:complexContent>
       <xs:extension base="rail:tEquipment">
         <xs:sequence>
-          <xs:element name="etcs" type="rail:tEtcsTT" minOccurs="0" maxOccurs="1">
+          <xs:element name="etcs" type="rail:tEtcsTT" minOccurs="0">
             <xs:annotation>
               <xs:documentation source="https://wiki2.railml.org/wiki/TT:etcs" />
             </xs:annotation>
@@ -598,6 +598,12 @@
               <xs:documentation source="https://wiki2.railml.org/wiki/TT:stopTimes" />
             </xs:annotation>
           </xs:element>
+          <xs:element name="stopActivities" type="rail:eStopActivities" minOccurs="0">
+            <xs:annotation>
+              <xs:documentation>Activities carried out at stop</xs:documentation>
+              <xs:documentation source="https://wiki2.railml.org/wiki/TT:stopActivities"/>
+            </xs:annotation>
+          </xs:element>
           <xs:element minOccurs="0" maxOccurs="unbounded" name="platformEdgeRef" type="rail:tPlatformEdgeRef">
             <xs:annotation>
               <xs:documentation>refers to the id attribute of the associated platform edge element, redundant if stopPostRef is given</xs:documentation>
@@ -610,6 +616,12 @@
               <xs:documentation source="https://wiki2.railml.org/wiki/TT:serviceSectionRef" />
             </xs:annotation>
           </xs:element>
+          <xs:element minOccurs="0" maxOccurs="unbounded" name="trackInfo" type="rail:tStationTrackInfo">
+            <xs:annotation>
+              <xs:documentation>allows definition operating day specific information for station tracks</xs:documentation>
+              <xs:documentation source="https://wiki2.railml.org/wiki/TT:trackInfo" />
+            </xs:annotation>
+          </xs:element>
           <xs:element minOccurs="0" maxOccurs="unbounded" name="annotationRef" type="rail:tAnnotationRef">
             <xs:annotation>
               <xs:documentation>refers to the id attribute of an annotation element</xs:documentation>
@@ -620,6 +632,16 @@
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
+  
+  <xs:complexType name="eStopActivities">
+    <xs:sequence>
+      <xs:element name="stopActivity" type="rail:tStopActivity" maxOccurs="unbounded">
+        <xs:annotation>
+          <xs:documentation source="https://wiki2.railml.org/wiki/TT:stopActivity"/>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+  </xs:complexType>
 
   <xs:complexType name="eOrganizationalUnitBinding">
     <xs:sequence>
@@ -676,17 +698,34 @@
               <xs:documentation source="https://wiki2.railml.org/wiki/TT:trainPartSequence" />
             </xs:annotation>
           </xs:element>
-          <xs:element name="tafTapTsiTrainID" type="rail:eTapTsiTransportOperationalIdentifier" minOccurs="0" maxOccurs="1">
+          <xs:element name="tafTapTsiTrainID" type="rail:eTapTsiTransportOperationalIdentifier" minOccurs="0">
             <xs:annotation>
               <xs:documentation>Optional information corresponding to the TAF/TAP TSI train ID.</xs:documentation>
               <xs:documentation source="https://wiki2.railml.org/wiki/TT:tafTapTsiTrainID" />
             </xs:annotation>
           </xs:element>
+		  <xs:element name="replacements" type="rail:eReplacedTrains" minOccurs="0"/>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
 
+  <xs:complexType name="eReplacedTrains">
+    <xs:sequence>
+      <xs:element name="replacementOf" type="rail:eReplacementOf" minOccurs="0" maxOccurs="unbounded"/>
+    </xs:sequence>
+  </xs:complexType>
+   
+  <xs:complexType name="eReplacementOf">
+	<xs:sequence>
+	  <xs:element name="operatingPeriodRef" type="rail:tOperatingPeriodRef" />
+      <xs:choice>
+        <xs:element name="tafTapTsiTrainID" type="rail:eTapTsiTransportOperationalIdentifier" />
+        <xs:element name="uniqueTrainKey" type="rail:tUniqueTrainKey" />
+      </xs:choice>
+	</xs:sequence>
+  </xs:complexType>
+      
   <xs:complexType name="eTrainPartSequence">
     <xs:complexContent>
       <xs:extension base="rail:tTrainPartSequence">
@@ -712,6 +751,11 @@
               <xs:documentation source="https://wiki2.railml.org/wiki/TT:brakeUsage" />
             </xs:annotation>
           </xs:element>
+          <xs:element name="topologyReference" type="rail:tTopologyReference" minOccurs="0" maxOccurs="unbounded">
+            <xs:annotation>
+              <xs:documentation source="https://wiki2.railml.org/wiki/TT:topologyReference"/>
+            </xs:annotation>
+          </xs:element>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
@@ -776,7 +820,7 @@
               <xs:documentation source="https://wiki2.railml.org/wiki/TT:blockParts" />
             </xs:annotation>
           </xs:element>
-          <xs:element name="blocks" type="rail:eBlocks">
+          <xs:element name="blocks" type="rail:eBlocks" minOccurs="0">
             <xs:annotation>
               <xs:documentation source="https://wiki2.railml.org/wiki/TT:blocks" />
             </xs:annotation>
diff --git a/schema/timetableTypes.xsd b/schema/timetableTypes.xsd
index 986c8aa..46508f1 100644
--- a/schema/timetableTypes.xsd
+++ b/schema/timetableTypes.xsd
@@ -1,17 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- $Id$ -->
-<xs:schema xmlns:rail="https://www.railml.org/schemas/2016" 
+<xs:schema xmlns:rail="https://www.railml.org/schemas/2018" 
            xmlns:xs="https://www.w3.org/2001/XMLSchema" 
            xmlns:xml="https://www.w3.org/XML/1998/namespace" 
-           targetNamespace="https://www.railml.org/schemas/2016" 
+           targetNamespace="https://www.railml.org/schemas/2018" 
            elementFormDefault="qualified" 
-           version="2.3">
+           version="2.4">
 
   <xs:annotation>
-    <xs:documentation>Copyright (c) railML.org; All Rights Reserved.</xs:documentation>
+    <xs:documentation>Copyright (c) railML.org e.V. Dresden/Germany; All Rights Reserved.</xs:documentation>
     <xs:documentation>This work is licensed under the restricted CreativeCommons Attribution-NonCommercial-NoDerivs 3.0 Unported License with additional license conditions of railML.org.</xs:documentation>
-    <xs:documentation>For further information see: https://www.railml.org/en/user/licence.html</xs:documentation>
-    <xs:documentation>Content of this file: XML Schema for railML(R) 2.3 Definition of attribute groups, simple and complex types, used by timetable sub schema (TT)</xs:documentation>
+    <xs:documentation>For further information see: https://www.railml.org/licence</xs:documentation>
+    <xs:documentation>Content of this file: XML Schema for railML(R) 2.4 Definition of attribute groups, simple and complex types, used by timetable sub schema (TT)</xs:documentation>
   </xs:annotation>
 
   <xs:include schemaLocation="railwayUnits.xsd" />
@@ -62,8 +62,21 @@
   <xs:attributeGroup name="aSpecialService">
     <xs:attribute name="type" type="rail:tSpecialServiceType" use="required" />
     <xs:attribute name="singleDate" type="xs:date" />
-    <xs:attributeGroup ref="rail:aTimePeriod" />
-    <xs:attributeGroup ref="rail:aPeriodTimeSpan" />
+    <xs:attribute name="startDate" type="xs:date" >
+      <xs:annotation>
+        <xs:documentation>DEPRECATED</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="endDate" type="xs:date">
+      <xs:annotation>
+        <xs:documentation>DEPRECATED</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attributeGroup ref="rail:aPeriodTimeSpan">
+      <xs:annotation>
+        <xs:documentation>DEPRECATED, not needed, not used</xs:documentation>
+      </xs:annotation>
+    </xs:attributeGroup>
   </xs:attributeGroup>
 
   <xs:complexType name="tOperatingDay">
@@ -647,6 +660,25 @@
     </xs:complexContent>
   </xs:complexType>
 
+  <xs:complexType name="tStationTrackInfo">
+    <xs:attribute name="operatingPeriodRef" type="rail:tGenericRef">
+      <xs:annotation>
+        <xs:documentation>reference to the operatingPeriod, which defines when the specified track information is valid</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="track" type="xs:string">
+      <xs:annotation>
+        <xs:documentation>information concerning the station track used by the train</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="platform" type="xs:string">
+      <xs:annotation>
+        <xs:documentation>information concerning the platform used by the train</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attributeGroup ref="rail:anyAttribute" />
+  </xs:complexType>
+
   <xs:complexType name="tAnnotationRef">
     <xs:complexContent>
       <xs:extension base="rail:tElementWithReference">
@@ -685,7 +717,18 @@
     <xs:attributeGroup ref="rail:aStopDescription" />
     <xs:attributeGroup ref="rail:anyAttribute" />
   </xs:complexType>
-
+  
+  <xs:complexType name="tStopActivity">
+    <xs:attributeGroup ref="rail:aStopActivity"/>
+  </xs:complexType>
+  <xs:attributeGroup name="aStopActivity">
+    <xs:attribute name="type" type="rail:tStopActivityTypes">
+      <xs:annotation>
+        <xs:documentation>describes the activity carried out at this stop</xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+  </xs:attributeGroup>
+  
   <xs:attributeGroup name="aStopDescription">
     <xs:attribute name="commercial" type="xs:boolean">
       <xs:annotation>
@@ -890,14 +933,6 @@
     </xs:attribute>
   </xs:attributeGroup>
 
-  <xs:simpleType name="tUsageType">
-    <xs:restriction base="xs:string">
-      <xs:enumeration value="passenger" />
-      <xs:enumeration value="goods" />
-      <xs:enumeration value="mixed" />
-    </xs:restriction>
-  </xs:simpleType>
-
   <xs:simpleType name="tMission">
     <xs:union>
       <xs:simpleType>
@@ -1055,6 +1090,16 @@
       <xs:enumeration value="commercial" />
     </xs:restriction>
   </xs:simpleType>
+  
+  <xs:attributeGroup name="aUniqueTrainKey">
+    <xs:attribute name="trainNumber" type="xs:string"/>
+    <xs:attribute name="additionalTrainNumber" type="xs:string"/>
+    <xs:attribute name="scope" type="rail:tTrainScope"/>
+  </xs:attributeGroup>
+  
+  <xs:complexType name="tUniqueTrainKey">
+    <xs:attributeGroup ref="rail:aUniqueTrainKey"/>
+  </xs:complexType>
 
   <xs:simpleType name="tOcpTTType">
     <xs:restriction base="xs:string">
@@ -1089,6 +1134,158 @@
     </xs:restriction>
   </xs:simpleType>
 
+  <xs:simpleType name="tStopActivityTypes">
+    <xs:union>
+      <xs:simpleType>
+        <xs:restriction base="xs:string">
+          <xs:enumeration value="collect">
+            <xs:annotation>
+              <xs:documentation>Couple vehicles / train parts - intended for non-self-propelling train parts. Please consider relation to formations (as far as used)</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="drop">
+            <xs:annotation>
+              <xs:documentation>Uncouple vehicles / train parts - intended for non-self-propelling train parts. Please consider relation to formations (as far as used)</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="split">
+            <xs:annotation>
+              <xs:documentation>Uncouple vehicles / train parts - intended for self-propelling train parts. Please consider relation to formations (as far as used)</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="join">
+            <xs:annotation>
+              <xs:documentation>Couple vehicles / train parts - intended for self-propelling train parts. Please consider relation to formations (as far as used)</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="shunting">
+            <xs:annotation>
+              <xs:documentation>Shunting movements are planned during stop (may also be used additionally to collect/drop/split/join/staple on demand)</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="crewChange">
+            <xs:annotation>
+              <xs:documentation>Stop to change engine or train crew</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="crewBreak">
+            <xs:annotation>
+              <xs:documentation>Stop for engine or train crew to pause</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="reverse">
+            <xs:annotation>
+              <xs:documentation>Stop to change driving direction of train. Consider relation to @formationReversed</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="runAround">
+            <xs:annotation>
+              <xs:documentation>Shunting of the engine to the other end of train (normally during change of driving direction). Normally combined with reverse</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="engineAttach">
+            <xs:annotation>
+              <xs:documentation>Receiving of pilot/pushing/double-heading engines - no train coupling</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="engineDetach">
+            <xs:annotation>
+              <xs:documentation>Dropping of pilot/pushing/double-heading engines - no train splitting</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="engineChange">
+            <xs:annotation>
+              <xs:documentation>Change of engine (no train coupling and sharing / splitting)</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="staple">
+            <xs:annotation>
+              <xs:documentation>Notes the necessity of staple track(s) during the stop time</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="occupation">
+            <xs:annotation>
+              <xs:documentation>Stop caused by occupation of lines, tracks, blocks incl. crossing without further specification</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="occupationBlock">
+            <xs:annotation>
+              <xs:documentation>Stop caused by occupation of route by another train running ahead</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="occupationCrossing">
+            <xs:annotation>
+              <xs:documentation>Stop caused by occupation of route by an oncoming train</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="occupationStation">
+            <xs:annotation>
+              <xs:documentation>Stop caused by occupation of station track(s)</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="powerSystemChange">
+            <xs:annotation>
+              <xs:documentation>Stop caused by a change of power supply (e.g. to change pantograph)</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="vehicleInspection">
+            <xs:annotation>
+              <xs:documentation>Stop for technical / technological vehicle inspections</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="gaugeChange">
+            <xs:annotation>
+              <xs:documentation>Stop caused by a change of gauge (e.g. to change or convert axles)</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="authorityCheck">
+            <xs:annotation>
+              <xs:documentation>Stop for purposes of passport or customs check or other authorities</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="photo">
+            <xs:annotation>
+              <xs:documentation/>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="catering">
+            <xs:annotation>
+              <xs:documentation>Supply or disposal of passengers or payload, e. g. catering</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="supplyOrDisposal">
+            <xs:annotation>
+              <xs:documentation>Supply of vehicles with operating supplies or materials or disposal of waste, including taking water for steam traction or steam heating</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="movementAuthority">
+            <xs:annotation>
+              <xs:documentation>Stop to receive the permission to proceed into the next route section</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="releaseLine">
+            <xs:annotation>
+              <xs:documentation>Stop to release the permission to proceed from the previous route section</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="shuntingPermission">
+            <xs:annotation>
+              <xs:documentation>Receive and/or release the permission to shunt inside ocp during stop time</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+          <xs:enumeration value="misc">
+            <xs:annotation>
+              <xs:documentation>Specification possible by using @purpose</xs:documentation>
+            </xs:annotation>
+          </xs:enumeration>
+        </xs:restriction>
+      </xs:simpleType>
+      <xs:simpleType>
+        <xs:restriction base="rail:tOtherEnumerationValue"/>
+      </xs:simpleType>
+    </xs:union>
+  </xs:simpleType>
+  
   <xs:simpleType name="tConnOperation">
     <xs:union>
       <xs:simpleType>
@@ -1242,4 +1439,26 @@
     </xs:restriction>
   </xs:simpleType>
 
+  <xs:complexType name="tTopologyReference">
+      <xs:attribute name="register" type="xs:string" use="required">
+          <xs:annotation>
+              <xs:documentation>name of the referenced topology register, e.g. UNO</xs:documentation>
+          </xs:annotation>
+      </xs:attribute>
+      <xs:attribute name="entry" type="xs:string" use="required">
+          <xs:annotation>
+              <xs:documentation>the reference in the specified topology register. The entry may be a version, name, date or any other string identifying a specific topology within the topology register.</xs:documentation>
+          </xs:annotation>
+      </xs:attribute>
+      <xs:attributeGroup ref="rail:aTimePeriod">
+        <xs:annotation>
+          <xs:documentation>the time period for which this topology reference applies</xs:documentation>
+        </xs:annotation>
+      </xs:attributeGroup>
+      <xs:attributeGroup ref="rail:anyAttribute">
+          <xs:annotation>
+              <xs:documentation>provide an extension point for non-railML attributes in foreign namespace</xs:documentation>
+          </xs:annotation>
+      </xs:attributeGroup>
+  </xs:complexType>
 </xs:schema>