TT:operationalTrainVariant: Difference between revisions

From railML 3 Wiki
Jump to navigation Jump to search
[checked revision][checked revision]
(wording)
No edit summary
Line 11: Line 11:
{{semcon|When calculating which {{TT:Tag|operationalTrainVariant}} of an {{TT:Tag|operationalTrain}} is valid on a particular day always a maximum of one '''active''' {{TT:Tag|operationalTrainVariant}} shall be the result. If the result is more than one {{TT:Tag|operationalTrainVariant}}, all except one shall be marked as {{TT:Tag|isCancelled}} or {{TT:Tag|isOnRequest}}. Please see the invalid code below.|status=approved|proposed=2023-01-12|approved=2023-04-06|id=TT:002}}
{{semcon|When calculating which {{TT:Tag|operationalTrainVariant}} of an {{TT:Tag|operationalTrain}} is valid on a particular day always a maximum of one '''active''' {{TT:Tag|operationalTrainVariant}} shall be the result. If the result is more than one {{TT:Tag|operationalTrainVariant}}, all except one shall be marked as {{TT:Tag|isCancelled}} or {{TT:Tag|isOnRequest}}. Please see the invalid code below.|status=approved|proposed=2023-01-12|approved=2023-04-06|id=TT:002}}


Below is an example of the code violating the semantic constraint TT:002. Interpretation of the code given below results with a conflict, because both {{TT:Tag|operationalTrainVariant}}s "ov-1" and "ov-2" run on Monday 11:52:00 from "tk-2" of station Arnau.
=={{examples}}==


How to solve this issue?
=== Violation and fixes of semantic constraint TT:002 ===
* adding e.g. {{@|offset|TT:operationalTrainVariant}}="PT1H" will do, because then on Monday there is one train at 11:52:00 and the second one at 12:52:00. Both trains will run on Monday.
 
* cancelling one the trains by {{TT:Tag|isCancelled}}. Then again there is one train at 11:52:00, the second one is cancelled. As a result only one train will go on Monday.
==== Violation ====
* providing a child {{TT:Tag|isOnRequest}} to "ov-1" or "ov-2" would resolve a conflict meaning that one of the trains is not cancelled but will not run until further command of dispatcher is given. However, if this command is given, then a new timetable should be produced with no conflicts in it, i.e. no two trains departing from the same track to the same station at the same time. As a result still only one train will go on Monday within this timetable.
 
Below is an example of the code violating the semantic constraint TT:002. Interpretation of the code given below results in a conflict, because both {{TT:Tag|operationalTrainVariant}}s "ov-1" and "ov-2" run on Monday.


{{TT:Tag|operationalTrain}}:
{{scrollbox|
{{scrollbox|
<syntaxhighlight lang=xml line>
<syntaxhighlight lang=xml line>
Line 32: Line 32:
           </operationalTrainSection>
           </operationalTrainSection>
         </operationalTrainVariant>
         </operationalTrainVariant>
      </operationalTrain>
 
      <operationalTrain id="ot-2">
         <operationalTrainVariant id="ov-2" itineraryRef="it-1" validityRef="va-2">
         <operationalTrainVariant id="ov-2" itineraryRef="it-1" validityRef="va-2">
           <identifiers>
           <identifiers>
Line 48: Line 47:
|height=500px}}
|height=500px}}


{{TT:Tag|itinerary}}:
 
{{TT:Tag|validity}}:


{{scrollbox|
{{scrollbox|
<syntaxhighlight lang=xml>
<syntaxhighlight lang=xml>
       <itinerary id="it-1">
       <validity id="va-2">
        <range baseItineraryRef="bi-1" start="bp-1" end="bp-2" offset="-PT10M"/>
         <operatingDayValidity timetableScenarioRef="ts01" pattern="1111100"/>
         <range baseItineraryRef="bi-3" start="bp-5" end="bp-7" offset="-PT10M"/>
       </validity>
       </itinerary>
</syntaxhighlight>
</syntaxhighlight>
|height=150px}}
|height=150px}}


{{TT:Tag|baseItinerary}}:


How to solve this issue? Setting {{@|offset|TT:operationalTrainVariant}} of whatever length to e.g. "os-2" does not fix the conflict as it arises because of 2 or more {{TT:Tag|operationalTrainVariant}}s referring to the same {{TT:Tag|validity}}.
==== Fix by cancelling ====
Invalid code above can be fixed by cancelling one the trains by {{TT:Tag|isCancelled}}.
{{scrollbox|
{{scrollbox|
<syntaxhighlight lang=xml>
<syntaxhighlight lang=xml line>
       <baseItinerary id="bi-1">
       <operationalTrain id="ot-1">
         <baseItineraryPoint id="bp-1" locationRef="op-1">
         <operationalTrainVariant id="ov-1" itineraryRef="it-1" validityRef="va-2">
          <times scope="commercial">
           <identifiers>
            <departure time="11:52:00"/>
             <identifier number="OT1066" type="OperationalTrainNumber"/>
           </times>
           </identifiers>
          <times scope="operational">
           <operationalTrainSection>
             <departure time="11:52:30"/>
             <operationalTrainSectionPart id="os-1">
          </times>
               <formationInformation formationRef="fm-1"/>
          <followupSections>
             </operationalTrainSectionPart>
            <followupSection>
           </operationalTrainSection>
              <minimalTime runTime="PT4M"/>
         </operationalTrainVariant>
              <reserves>
 
                <reserve reserve="PT1M" type="qualityByRailwayUndertaking">
        <operationalTrainVariant id="ov-2" itineraryRef="it-1" validityRef="va-2">
                  <rule>
           <identifiers>
                    <timeBasedRule supplementInPercent="25"/>
             <identifier number="OT1067" type="OperationalTrainNumber"/>
                  </rule>
           </identifiers>
                </reserve>
           <isCancelled/>
                <reserve reserve="PT1M" type="trackworkByInfrastructureManager"/>
           <operationalTrainSection>
              </reserves>
             <operationalTrainSectionPart id="os-2">
            </followupSection>
               <formationInformation formationRef="fm-1"/>
           </followupSections>
             </operationalTrainSectionPart>
           <trackRef ref="tk-2"/>
           </operationalTrainSection>
          <stop>
         </operationalTrainVariant>
             <platformEdgeRefs>
       </operationalTrain>
              <platformEdgeRef ref="pe-3"/>
            </platformEdgeRefs>
            <stoppingPlaceRef ref="sp-3"/>
            <isCommercial/>
          </stop>
        </baseItineraryPoint>
        <baseItineraryPoint id="bp-2" locationRef="op-3">
          <times scope="commercial">
            <arrival time="11:59:00"/>
          </times>
          <times scope="operational">
            <arrival time="11:58:30"/>
          </times>
          <trackRef ref="tk-5"/>
          <stop>
            <platformEdgeRefs>
               <platformEdgeRef ref="pe-15"/>
            </platformEdgeRefs>
            <stoppingPlaceRef ref="sp-7"/>
             <isCommercial/>
           </stop>
         </baseItineraryPoint>
      </baseItinerary>
      <baseItinerary id="bi-3">
        <baseItineraryPoint id="bp-5" locationRef="op-3">
           <times scope="commercial">
             <departure time="12:01:00"/>
          </times>
          <times scope="operational">
            <departure time="12:01:30"/>
          </times>
          <followupSections>
            <followupSection>
              <minimalTime runTime="PT2M15S"/>
              <reserves>
                <reserve reserve="PT45S" type="qualityByRailwayUndertaking">
                  <rule>
                    <timeBasedRule supplementInPercent="25"/>
                  </rule>
                </reserve>
              </reserves>
            </followupSection>
           </followupSections>
           <trackRef ref="tk-5"/>
           <stop>
             <platformEdgeRefs>
              <platformEdgeRef ref="pe-15"/>
            </platformEdgeRefs>
            <stoppingPlaceRef ref="sp-7"/>
            <isCommercial/>
          </stop>
        </baseItineraryPoint>
        <baseItineraryPoint id="bp-6" locationRef="op-4">
          <times scope="commercial">
            <arrival time="12:05:00"/>
            <departure time="12:05:00"/>
          </times>
          <times scope="operational">
            <arrival time="12:04:30"/>
            <departure time="12:05:30"/>
          </times>
          <followupSections>
            <followupSection>
              <minimalTime runTime="PT7M30S"/>
              <reserves>
                <reserve reserve="PT2M30S" type="qualityByRailwayUndertaking">
                  <rule>
                    <timeBasedRule supplementInPercent="25"/>
                  </rule>
                </reserve>
               </reserves>
            </followupSection>
          </followupSections>
          <trackRef ref="tk-5"/>
          <stop minDwellTime="PT1M30S">
            <platformEdgeRefs>
              <platformEdgeRef ref="pe-8" onOff="on"/>
              <platformEdgeRef ref="pe-9" onOff="off"/>
            </platformEdgeRefs>
            <stoppingPlaceRef ref="sp-6"/>
            <isCommercial onRequest="true" onOff="both"/>
          </stop>
        </baseItineraryPoint>
        <baseItineraryPoint id="bp-7" locationRef="op-5">
          <times scope="commercial">
            <arrival time="12:16:00"/>
          </times>
          <times scope="operational">
            <arrival time="12:15:30"/>
          </times>
          <stop>
             <isCommercial/>
           </stop>
         </baseItineraryPoint>
       </baseItinerary>
</syntaxhighlight>
</syntaxhighlight>
|height=500px}}
|height=500px}}


{{TT:Tag|validity}}:
==== Fix by request of dispatcher ====
 
Invalid code above can be also fixed by providing a child {{TT:Tag|isOnRequest}} to "ov-1" or "ov-2" would resolve a conflict meaning that one of the trains is not cancelled but will not run until further command of dispatcher is given. However, if this command is given, then a new timetable should be produced with no conflicts in it, i.e. no two trains departing from the same track to the same station at the same time. As a result still only one train will go on Monday within this timetable.


{{scrollbox|
{{scrollbox|
<syntaxhighlight lang=xml>
<syntaxhighlight lang=xml line>
       <validity id="va-2">
       <operationalTrain id="ot-1">
        <operatingDayValidity timetableScenarioRef="ts01" pattern="1111100"/>
        <operationalTrainVariant id="ov-1" itineraryRef="it-1" validityRef="va-2">
      </validity>
          <identifiers>
</syntaxhighlight>
            <identifier number="OT1066" type="OperationalTrainNumber"/>
|height=150px}}
          </identifiers>
          <operationalTrainSection>
            <operationalTrainSectionPart id="os-1">
              <formationInformation formationRef="fm-1"/>
            </operationalTrainSectionPart>
          </operationalTrainSection>
        </operationalTrainVariant>


{{IS:Tag|operationalPoint}}:
         <operationalTrainVariant id="ov-2" itineraryRef="it-1" validityRef="va-2">
 
           <identifiers>
{{scrollbox|
            <identifier number="OT1067" type="OperationalTrainNumber"/>
<syntaxhighlight lang=xml>
           </identifiers>
         <operationalPoint id="op-1">
          <isOnRequest/>
          <name language="de" name="Arnau"/>
          <operationalTrainSection>
           <designator entry="OAR" register="_RML"/>
             <operationalTrainSectionPart id="os-2">
           <opEquipment>
              <formationInformation formationRef="fm-1"/>
            <ownsInfrastructureElement ref="pf-1"/>
             </operationalTrainSectionPart>
            <ownsInfrastructureElement ref="sp-1"/>
          </operationalTrainSection>
             <ownsInfrastructureElement ref="sp-2"/>
        </operationalTrainVariant>
            <ownsInfrastructureElement ref="sp-3"/>
      </operationalTrain>
             <ownsInfrastructureElement ref="sp-4"/>
            <ownsInfrastructureElement ref="tk-1"/>
            <ownsInfrastructureElement ref="tk-2"/>
          </opEquipment>
        </operationalPoint>
</syntaxhighlight>
</syntaxhighlight>
|height=150px}}
|height=500px}}


=={{examples}}==
{{importComment}}
{{importComment}}
=={{Additional Information}}==
=={{Additional Information}}==

Revision as of 11:58, 14 August 2024

Introduction

Documentation

Syntax

Autoexport from the XML-Schema for element TT:operationalTrainVariant of railML® version 3.2
Documentation An operational train variant is a specific variant of a train that is operated in this way on all operating days indicated by the provided validity. It is expected that the validities of all operational train variants within an operational train do not overlap. The difference between one variant and the next of an operational train is that the trains path may differ to some degree.
Subschema timetable
Parents* operationalTrain
Children identifiers (0..1), isCancelled (0..1), isOnRequest (0..1), operationalTrainSection (1..*)
Attributes:
  • itineraryRef: References the itinerary of the operational train variant. The operational train variant is expected to stop or passthrough all of the OPs specified by the base itinerary points that are referenced by this itinerary. (obligatory; xs:string; patterns: (urn:uuid:)?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}|{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}}),

  • offset: Allows to specify a temporal offset to the times provided with the itinerary.
    This means that the resulting arrival and departure times of the individual base itinerary points are calculated by adding the offset of the itinerary AND the offset of the operational train variant to them. Of course the offset may also be negative. (optional; xs:duration),

  • validityRef: Reference to a validity. This validity specifies if the operational train variant is operated on a certain day, or if it is not. (obligatory; xs:string; patterns: (urn:uuid:)?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}|{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}}),

  • id: unique identifier (obligatory; xs:string; patterns: (urn:uuid:)?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}|{[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}}); compare: Dev:Identities
*Notice:
Elements may have different parent elements. As a consequence they may be used in different contexts.
Please, consider this as well as a user of this wiki as when developing this documentation further.
Aspects that are only relevant with respect to one of several parents should be explained exclusively in the documentation of the respective parent element.


 

This element does not appear in railML® 3.1 within the TT subschema. It is available only in railML® 3.2. Do not hesitate to contact railML.org for further questions.


Changes 3.1→3.2

Introduced with version 3.2.

Semantics

Private-cloud-icon.png Semantic Constraint "TT:002":
 
When calculating which <operationalTrainVariant> of an <operationalTrain> is valid on a particular day always a maximum of one active <operationalTrainVariant> shall be the result. If the result is more than one <operationalTrainVariant>, all except one shall be marked as <isCancelled> or <isOnRequest>. Please see the invalid code below.
 
Proposed on January 12th 2023
Approved on April 06th 2023
FIXME: add Link to discussion!
Please, recognize our guidelines on semantic constraints

Best Practice / Examples

Violation and fixes of semantic constraint TT:002

Violation

Below is an example of the code violating the semantic constraint TT:002. Interpretation of the code given below results in a conflict, because both <operationalTrainVariant>s "ov-1" and "ov-2" run on Monday.

      <operationalTrain id="ot-1">
        <operationalTrainVariant id="ov-1" itineraryRef="it-1" validityRef="va-2">
          <identifiers>
            <identifier number="OT1066" type="OperationalTrainNumber"/>
          </identifiers>
          <operationalTrainSection>
            <operationalTrainSectionPart id="os-1">
              <formationInformation formationRef="fm-1"/>
            </operationalTrainSectionPart>
          </operationalTrainSection>
        </operationalTrainVariant>

        <operationalTrainVariant id="ov-2" itineraryRef="it-1" validityRef="va-2">
          <identifiers>
            <identifier number="OT1067" type="OperationalTrainNumber"/>
          </identifiers>
          <operationalTrainSection>
            <operationalTrainSectionPart id="os-2">
              <formationInformation formationRef="fm-1"/>
            </operationalTrainSectionPart>
          </operationalTrainSection>
        </operationalTrainVariant>
      </operationalTrain>


<validity>:

      <validity id="va-2">
        <operatingDayValidity timetableScenarioRef="ts01" pattern="1111100"/>
      </validity>


How to solve this issue? Setting @offset of whatever length to e.g. "os-2" does not fix the conflict as it arises because of 2 or more <operationalTrainVariant>s referring to the same <validity>.

Fix by cancelling

Invalid code above can be fixed by cancelling one the trains by <isCancelled>.

      <operationalTrain id="ot-1">
        <operationalTrainVariant id="ov-1" itineraryRef="it-1" validityRef="va-2">
          <identifiers>
            <identifier number="OT1066" type="OperationalTrainNumber"/>
          </identifiers>
          <operationalTrainSection>
            <operationalTrainSectionPart id="os-1">
              <formationInformation formationRef="fm-1"/>
            </operationalTrainSectionPart>
          </operationalTrainSection>
        </operationalTrainVariant>

        <operationalTrainVariant id="ov-2" itineraryRef="it-1" validityRef="va-2">
          <identifiers>
            <identifier number="OT1067" type="OperationalTrainNumber"/>
          </identifiers>
          <isCancelled/>
          <operationalTrainSection>
            <operationalTrainSectionPart id="os-2">
              <formationInformation formationRef="fm-1"/>
            </operationalTrainSectionPart>
          </operationalTrainSection>
        </operationalTrainVariant>
      </operationalTrain>

Fix by request of dispatcher

Invalid code above can be also fixed by providing a child <isOnRequest> to "ov-1" or "ov-2" would resolve a conflict meaning that one of the trains is not cancelled but will not run until further command of dispatcher is given. However, if this command is given, then a new timetable should be produced with no conflicts in it, i.e. no two trains departing from the same track to the same station at the same time. As a result still only one train will go on Monday within this timetable.

      <operationalTrain id="ot-1">
        <operationalTrainVariant id="ov-1" itineraryRef="it-1" validityRef="va-2">
          <identifiers>
            <identifier number="OT1066" type="OperationalTrainNumber"/>
          </identifiers>
          <operationalTrainSection>
            <operationalTrainSectionPart id="os-1">
              <formationInformation formationRef="fm-1"/>
            </operationalTrainSectionPart>
          </operationalTrainSection>
        </operationalTrainVariant>

        <operationalTrainVariant id="ov-2" itineraryRef="it-1" validityRef="va-2">
          <identifiers>
            <identifier number="OT1067" type="OperationalTrainNumber"/>
          </identifiers>
          <isOnRequest/>
          <operationalTrainSection>
            <operationalTrainSectionPart id="os-2">
              <formationInformation formationRef="fm-1"/>
            </operationalTrainSectionPart>
          </operationalTrainSection>
        </operationalTrainVariant>
      </operationalTrain>


Additional Information

Notes

An <operationalTrainVariant> is specific for a certain day. It shall not be used to describe different alternative train paths of a microscopic infrastructure model [1] a train may go on a certain day, e.g. use track A or B to get from OP 1 to OP 2.

Open Issues