[AIXM-142] Correct association cardinalities
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.2 | AIXM 5.1(.1) |
---|---|
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 = safeAltitude = urn:uuid:cd14580d-adec-48cc-832d-376988518f45 safeAltitude = urn:uuid:aed55020-707f-4b50-b012-308736484620 | 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 = annotation Note propertyName = safeAltitude purpose = OTHER:BACKWARD_MAPPING translatedNote LinguisticNote note = safeAltitude.SafeAltitudeArea: urn:uuid:aed55020-707f-4b50-b012-308736484620 safeAltitude = urn:uuid:cd14580d-adec-48cc-832d-376988518f45 |