ID:

AIXM-142

target version:

AIXM 5.2

version:

1.0

last updated:

17 OCT 2018

status:

APPROVED









Description

The discrepancy between the AIXM 5.1(.1) UML model and the XML schema on the multiplicity of the SafeAltitudeArea in the association with Procedure is corrected to allow 0..* in both.

Rationale for change

See https://aixmccb.atlassian.net/browse/AIXM-103

A bug was discovered in the script used to generate the XML schema from the Rational Rose UML model. The script did not support associations towards features that have a cardinality different than 0..1 or 0..*. A cardinality such as 0..2 was wrongly generated in the XSD schema without any “maxoccurs” attribute, which practically makes it a single occurrence property.

The element affected by this bug is the safeAltitude property of the Procedure (i.e. StandardInstrumentDeparture, StandardInstrumentArrival and InstrumentApproachProcedure) which represents the association with the SafeAltitudeArea feature.

There exist examples of procedures that have both MSA and ESA specified. Therefore, the multiplicity of the association is still justified to be more than one, as it was already the case in the AIXM 5.1 UML model. In order to avoid a unique case in the whole model where the maximum multiplicity is specified to something different than 1 or n, this maximum of “2” is modified to a maximum of “n”. This will ensure that the current UML to XSD script generates it correctly.

Impact assessment

[FWD_1:1] No data mapping is necessary and no data loss occurs when data is exchanged from a system (A) that uses AIXM 5.1.1 for output towards a system (B) that uses AIXM 5.2 for input.

[BWD_MAP_LOSS] Data mapping is possible, but some data would be lost (or converted into Notes) when data is exchanged from a system (B) that uses AIXM 5.2 for output towards a system (A) that uses AIXM 5.1.1 for input.

Note: As the script used for the application/xml schema is also used for generating extension schemas, cardinalities for associations towards features that are different from 0..1 or 0..* shall not be used. If it is envisaged that more than one instances of an association might occur, it is advised to model it with a cardinality 0..*. Never use a specific number such as 0..2, 0..3, etc.

Change Proposal details

The following change is done in the AIXM UML mode, on the class Procedure

  • the multiplicity of the SafeAltitudeArea in the association with Procedure is changed to 0..* in the UML model (instead of 0..2).

The UML class diagram below shows the modified association multiplicity on the SafeAltitudeArea side.

Mapping AIXM 5.1.1 to AIXM 5.2 (forward)

NIL (Not applicable).

Mapping AIXM 5.2 to AIXM 5.1.1 (backward)

[MAPC-05] From the three backward mapping options available in this case, the first two (discard the additional occurrences or use an extension) are straightforward and do not need any further details. The 3rd option (backward mapping of the additional occurrences into a Note) is detailed in order to provide a complete description of this case and its conversion option. The following mapping into Note algorithm is proposed:

For each SID, STAR or InstrumentApproachProcedure that has two or more safeAltitude elements:

  • Preserve the safeAltitude element that refers  to a SafeAltitudeArea having safeAreaType equal-to ‘MSA’; If it does not exist or if more than one exists, then do not preserve anything;
  • For each of the safeAltitude element that is not preserved according to the rule above, remove the element and add an annotationNote with:
    • propertyName=safeAltitude
    • purpose=“OTHER:BACKWARD_MAPPING”;
    • translatedNote.LinguisticNote.note=”safeAltitude[1].SafeAltitudeArea: <safeAltitude.xlink:href>;  safeAltitude[2].SafeAltitudeArea: <safeAltitude.xlink:href>; etc.”
      • “[1]”, “[2]” indicate that this needs to be repeated as many times as necessary to cover all occurrences that are not preserved;

Mapping example

(Note: for mapping test data see: https://github.com/aixm/mapping_52_511/tree/master/AIXM-142)

AIXM 5.2AIXM 5.1(.1)
<pre>message:AIXMBasicMessage
  message:hasMember
    InstrumentApproachProcedure
      gml:identifier = c8fe1e3f-0dd0-4dd5-af34-7930c60fad7f
      timeSlice
        InstrumentApproachProcedureTimeSlice
          gml:validTime
            gml:TimePeriod
              gml:beginPosition = 2009-01-01T00:00:00Z
              gml:endPosition = 
          interpretation = BASELINE
          sequenceNumber = 1
          featureLifetime
            gml:TimePeriod
              gml:beginPosition = 2009-01-01T00:00:00Z
              gml:endPosition = 
          <font color="blue">safeAltitude =  urn:uuid:cd14580d-adec-48cc-832d-376988518f45</font>
          <font color="brown">safeAltitude =  urn:uuid:aed55020-707f-4b50-b012-308736484620</font>





  message:hasMember
    SafeAltitudeArea
      gml:identifier = cd14580d-adec-48cc-832d-376988518f45
      timeSlice
        SafeAltitudeAreaTimeSlice
          gml:validTime
            gml:TimePeriod
              gml:beginPosition = 2009-01-01T00:00:00Z
              gml:endPosition = 
          interpretation = BASELINE
          sequenceNumber = 1
          featureLifetime
            gml:TimePeriod
              gml:beginPosition = 2009-01-01T00:00:00Z
              gml:endPosition = 
          safeAreaType = MSA
  message:hasMember
    SafeAltitudeArea
      gml:identifier = aed55020-707f-4b50-b012-308736484620
      timeSlice
        SafeAltitudeAreaTimeSlice
          gml:validTime
            gml:TimePeriod
              gml:beginPosition = 2009-01-01T00:00:00Z
              gml:endPosition = 
          interpretation = BASELINE
          sequenceNumber = 1
          featureLifetime
            gml:TimePeriod
              gml:beginPosition = 2009-01-01T00:00:00Z
              gml:endPosition = 
          safeAreaType = ESA</pre>





<pre>message:AIXMBasicMessage
  message:hasMember
    InstrumentApproachProcedure
      gml:identifier = c8fe1e3f-0dd0-4dd5-af34-7930c60fad7f
      timeSlice
        InstrumentApproachProcedureTimeSlice
          gml:validTime
            gml:TimePeriod
              gml:beginPosition = 2009-01-01T00:00:00Z
              gml:endPosition = 
          interpretation = BASELINE
          sequenceNumber = 1
          featureLifetime
            gml:TimePeriod
              gml:beginPosition = 2009-01-01T00:00:00Z
              gml:endPosition = 
          <font color="green">annotation
            Note
              propertyName = safeAltitude
              purpose = OTHER:BACKWARD_MAPPING
              translatedNote
                LinguisticNote
                  note = </font><font color="brown">safeAltitude.SafeAltitudeArea: urn:uuid:aed55020-707f-4b50-b012-308736484620</font>
          <font color="blue">safeAltitude =  urn:uuid:cd14580d-adec-48cc-832d-376988518f45</font>
  message:hasMember
    SafeAltitudeArea
      gml:identifier = cd14580d-adec-48cc-832d-376988518f45
      timeSlice
        SafeAltitudeAreaTimeSlice
          gml:validTime
            gml:TimePeriod
              gml:beginPosition = 2009-01-01T00:00:00Z
              gml:endPosition = 
          interpretation = BASELINE
          sequenceNumber = 1
          featureLifetime
            gml:TimePeriod
              gml:beginPosition = 2009-01-01T00:00:00Z
              gml:endPosition = 
          safeAreaType = MSA
  message:hasMember
    SafeAltitudeArea
      gml:identifier = aed55020-707f-4b50-b012-308736484620
      timeSlice
        SafeAltitudeAreaTimeSlice
          gml:validTime
            gml:TimePeriod
              gml:beginPosition = 2009-01-01T00:00:00Z
              gml:endPosition = 
          interpretation = BASELINE
          sequenceNumber = 1
          featureLifetime
            gml:TimePeriod
              gml:beginPosition = 2009-01-01T00:00:00Z
              gml:endPosition = 
          safeAreaType = ESA</pre>