Transcript Document

AIXM 5.1 – Business rules
AIXM 5.1 XML Developers' Seminar #2 – Dec 2009
The European Organisation for the Safety of Air Navigation
Content
• What are AIXM Business rules ?
• Presentation of Schematron
• Presentation of Eurocontrol AIXM Rules Checker – ARC
AIXM 5.1 – Business rules
2
Validation of AIXM 5.1
AIXM 5.1
UML
AIXM 5.1
XSD
- Does the data make sense?
- Is it compliant with
international standards ?
- Do I respect recommended
practices?
-…
=
Syntactic check
- Check the compliance of an
XML dataset with the XSD
grammar
- Performed by standard XML
parsers (e.g. xerxes, MSXML,
XMLSpy, etc.)
Semantic check
AIXM 5.1
XML
Rules
Airport
features
AIXM 5.1 – Business rules
3
Business Rules or Validation Rules ?
•
Definition of “business rules” has been standardized by OMG since Jan 2008
•
See Semantics of Business Vocabulary and Business Rules (SBVR), v1.0
• Chapter 12.1.2
• Annex A.2.3
AIXM 5.1 – Business rules
4
Business Rules vs Validation Rules ?
• OMG specification makes no difference based on validation
means
• It identifies two types of business rules
• Structural rules
• Operative rules
• AIXM 5 will adopt this terminology and identify the following
business rules:
• AIXM Structural rules: the enumerations of values
(datatypes)
• AIXM Operative rules: rules extracted from official
documents (ICAO Annexes), minimum data rules,
consistency rules, recommended practices, coding rules…
AIXM 5.1 – Business rules
5
AIXM Operative Business rules
• Scope:
• List of mandatory elements for AIXM 4.5 baseline
information
• A set of rules extracted from ICAO Annexes
• AIXM GML profile
• Arinc424-based rules for AIXM 5.0.
• EAD rules for Obstacle
• …
• Work on this subject is underway
AIXM 5.1 – Business rules
6
Validation of AIXM 5.1
AIXM 5.1
UML
AIXM 5.1
XSD
Structural
Rules
How to encode
these rules ?
Syntactic check
Semantic check
AIXM 5.1
XML
Operative
Rules
Airport
features
AIXM 5.1 – Business rules
7
Schematron
• Schematron (http://www.schematron.com/)
• is an open language for the validation of XML document…
• …whose specification is standardized (ISO/IEC 19757)
• There are 6 basic elements in ISO Schematron: assertion, rule,
pattern, schema, namespace and phase.
AIXM 5.1 – Business rules
8
Schematron
• <assert> and <report> elements
• Simple declarative sentences in natural language
• <assert> used to tag assertions positively
<!-- The assert element matches if test is false -->
<assert test="//designator">
An AirportHeliport shall have a designator.
</assert>
• <rule> element
• Used to group assertions
• Has a context: if the context matches, the assertions are
tested
AIXM 5.1 – Business rules
9
Schematron
• <pattern> elements
• Used to group rules having the same objective
• <phase> elements
• Used to group patterns
• <schema> and <namespace> elements
• Root Elements
AIXM 5.1 – Business rules
10
Schematron – Example #1 (simple)
A424: an AF leg requires a turn direction
Translation in AIXM: property turnDirection is
required for a SegmentLeg of type AF
Simplified Schematron example
<SegmentLeg>
<legTypeARINC>AF</legTypeARINC>
<turnDirection>L</turnDirection>
</SegmentLeg>
<rule id="1"
context="//SegmentLeg[@legTypeARINC='AF'] ">
<assert id="1_1"
test="boolean(@turnDirection)">
</assert>
</rule>
AIXM 5.1 – Business rules
<rule id="1"
-> unique identifier of the rule
context="// SegmentLeg[@legTypeARINC='AF'] "
->Defines the conditions of the rule (If attribute
SegmentLeg.legTypeARINC= “AF”).
->The rule will be tested if the context is true.
<assert id="1_1"
-> unique identifier of the assertion
test="boolean(@turnDirection)"
-> the logical test to be performed. The “assert” element
matches if the logical test returns false (in this case, if the
turnDirection is not provided).
11
Schematron – Example #2 (less simple)
• A424: The intercept angle of CI or VI in Loc based Approach
transition must be between 10 and 90 degrees.
not(./parent::*/parent::*/parent::*/parent::*/parent::*/aixm:codingStandard = 'ARINC_424_18')
or
not(saxon:evaluate(arcext:getXPath(@xlink:href))/*/*[aixm:legTypeARINC='CI' or aixm:legTypeARINC='VI'])
or
not(./aixm:type='FINAL' and ./parent::*/parent::aixm:InstrumentApproachProcedureTimeSlice[aixm:approachType='LOC_BC' or
aixm:approachType='LOC_DME_BC' or aixm:approachType='IGS' or aixm:approachType='ILS' or aixm:approachType='ILS_PRM' or
aixm:approachType='LOC' or aixm:approachType='LOC_DME' or aixm:approachType='SDF' or aixm:approachType='LDA' or aixm:approachType='LDA_DME'
or aixm:approachType='ILS_DME'])
or
not(./parent::*/parent::*/following-sibling::*//aixm:theSegmentLeg)
or
saxon:evaluate(arcext:getXPath((./parent::*/parent::*/following-sibling::*//aixm:theSegmentLeg)[1]/@xlink:href))/*/*[aixm:legTypeARINC = 'IF']
or
(if(saxon:evaluate(arcext:getXPath((./parent::*/parent::*/following-sibling::*//aixm:theSegmentLeg)[1]/@xlink:href))/*/*[aixm:legTypeARINC = 'AF'])
then (if(saxon:evaluate(arcext:getXPath((./parent::*/parent::*/following-sibling::*//aixm:theSegmentLeg)[1]/@xlink:href))/*/*[aixm:turnDirection = 'LEFT'])
then (arcext:courseDiff(saxon:evaluate(arcext:getXPath(@xlink:href))/*/*/aixm:course,
arcext:substractAngle(saxon:evaluate(arcext:getXPath((./parent::*/parent::*/following-sibling::*//aixm:theSegmentLeg)[1]/@xlink:href))/*/*/aixm:course ,
90.0)) &lt;= 90.0
and arcext:courseDiff(saxon:evaluate(arcext:getXPath(@xlink:href))/*/*/aixm:course,
arcext:substractAngle(saxon:evaluate(arcext:getXPath((./parent::*/parent::*/following-sibling::*//aixm:theSegmentLeg)[1]/@xlink:href))/*/*/aixm:course ,
90.0)) &gt;= 10.0)
else (arcext:courseDiff(saxon:evaluate(arcext:getXPath(@xlink:href))/*/*/aixm:course,
arcext:additionAngle(saxon:evaluate(arcext:getXPath((./parent::*/parent::*/following-sibling::*//aixm:theSegmentLeg)[1]/@xlink:href))/*/*/aixm:course ,
90.0)) &lt;= 90.0
and arcext:courseDiff(saxon:evaluate(arcext:getXPath(@xlink:href))/*/*/aixm:course,
arcext:additionAngle(saxon:evaluate(arcext:getXPath((./parent::*/parent::*/following-sibling::*//aixm:theSegmentLeg)[1]/@xlink:href))/*/*/aixm:course ,
90.0)) &gt;= 10.0))
else (arcext:courseDiff(saxon:evaluate(arcext:getXPath(@xlink:href))/*/*/aixm:course,
saxon:evaluate(arcext:getXPath((./parent::*/parent::*/following-sibling::*//aixm:theSegmentLeg)[1]/@xlink:href))/*/*/aixm:course) &lt;= 90.0
and arcext:courseDiff(saxon:evaluate(arcext:getXPath(@xlink:href))/*/*/aixm:course,
saxon:evaluate(arcext:getXPath((./parent::*/parent::*/following-sibling::*//aixm:theSegmentLeg)[1]/@xlink:href))/*/*/aixm:course) &gt;= 10.0))
AIXM 5.1 – Business rules
12
ARC (AIXM Rules Checker)
• ARC is a proof-of-concept tool provided by Eurocontrol:
• Open source
• Compliant with Schematron standard
• Based on Java and Web technologies HTML, Javascript and
CSS
• Main features of ARC:
• Creation of profiles (Example of profiles: AIXM 4.5, AIXM 5.0)
• Schematron validation of XML data, according to the
selected profile
• Generation and display of a validation report with detected
errors
AIXM 5.1 – Business rules
13
ARC (AIXM Rules Checker)
• The result of the validation is an XML Report
• every item in the XML source data that does not comply with
a specific business rule is reported
• details of the incompliance detected is provided.
• It is possible to qualify the incompliance in a number of levels
(fatal error, error, warning).
AIXM 5.1 – Business rules
14
ARC (AIXM Rules Checker)
•
ARC was improved in 2009
• New Java engine to run the Schematron validation
• New Java extension:
• Support the XML namespaces
• ARC can now evaluate xlink:href
• Perform geographical computations in WGS84
AIXM 5.1 – Business rules
15