AIXM 5 1 Business rules AIXM 5 1
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 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), v 1. 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 • Arinc 424 -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 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 Airport. Heliport 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
Translation in AIXM: property turn. Direction is Schematron – Example (simple) required for #1 a Segment. Leg of type AF A 424: an AF leg requires a turn direction Simplified Schematron example <Segment. Leg> <leg. Type. ARINC>AF</leg. Type. ARINC> <turn. Direction>L</turn. Direction> </Segment. Leg> <rule id="1" context="//Segment. Leg[@leg. Type. ARINC='AF'] "> <assert id="1_1" test="boolean(@turn. Direction)"> </assert> </rule> AIXM 5. 1 – Business rules <rule id="1" -> unique identifier of the rule context="// Segment. Leg[@leg. Type. ARINC='AF'] " ->Defines the conditions of the rule (If attribute Segment. Leg. leg. Type. ARINC= “AF”). ->The rule will be tested if the context is true. <assert id="1_1" -> unique identifier of the assertion test="boolean(@turn. Direction)" -> the logical test to be performed. The “assert” element matches if the logical test returns false (in this case, if the turn. Direction is not provided). 11
Schematron – Example #2 (less simple) • A 424: The intercept angle of CI or VI in Loc based Approach transition must be between 10 and 90 degrees. not(. /parent: : */parent: : */ aixm: coding. Standard = 'ARINC_424_18') or not(saxon: evaluate(arcext: get. XPath(@xlink: href ))/*/*[aixm: leg. Type. ARINC='CI' or aixm: leg. Type. ARINC='VI']) or not(. /aixm: type='FINAL' and. /parent: : */parent: : aixm: Instrument. Approach. Procedure. Time. Slice[aixm: approach. Type ='LOC_BC' or aixm: approach. Type='LOC_DME_BC' or aixm: approach. Type='IGS' or aixm: approach. Type='ILS_PRM' or aixm: approach. Type='LOC_DME' or aixm: approach. Type='SDF' or aixm: approach. Type='LDA_DME' or aixm: approach. Type='ILS_DME']) or not(. /parent: : */following-sibling: : *// aixm: the. Segment. Leg) or saxon: evaluate(arcext: get. XPath ((. /parent: : */following-sibling: : *//aixm: the. Segment. Leg)[1]/@xlink: href))/*/*[ aixm: leg. Type. ARINC = 'IF'] or (if(saxon: evaluate(arcext: get. XPath ((. /parent: : */following-sibling: : *//aixm: the. Segment. Leg)[1]/@xlink: href))/*/*[ aixm: leg. Type. ARINC = 'AF']) then (if(saxon: evaluate(arcext: get. XPath ((. /parent: : */following-sibling: : *//aixm: the. Segment. Leg)[1]/@xlink: href))/*/*[ aixm: turn. Direction = 'LEFT']) then (arcext: course. Diff(saxon: evaluate(arcext: get. XPath(@xlink: href ))/*/*/aixm: course, arcext: substract. Angle(saxon: evaluate(arcext: get. XPath ((. /parent: : */following-sibling: : *//aixm: the. Segment. Leg)[1]/@xlink: href))/*/*/ aixm: course , 90. 0)) < = 90. 0 and arcext: course. Diff(saxon: evaluate(arcext: get. XPath(@xlink: href ))/*/*/aixm: course, arcext: substract. Angle(saxon: evaluate(arcext: get. XPath ((. /parent: : */following-sibling: : *//aixm: the. Segment. Leg)[1]/@xlink: href))/*/*/ aixm: course , 90. 0)) > = 10. 0) else (arcext: course. Diff(saxon: evaluate(arcext: get. XPath(@xlink: href ))/*/*/aixm: course, arcext: addition. Angle(saxon: evaluate(arcext: get. XPath ((. /parent: : */following-sibling: : *//aixm: the. Segment. Leg)[1]/@xlink: href))/*/*/ aixm: course , 90. 0)) < = 90. 0 and arcext: course. Diff(saxon: evaluate(arcext: get. XPath(@xlink: href ))/*/*/aixm: course, arcext: addition. Angle(saxon: evaluate(arcext: get. XPath ((. /parent: : */following-sibling: : *//aixm: the. Segment. Leg)[1]/@xlink: href))/*/*/ aixm: course , 90. 0)) > = 10. 0)) else (arcext: course. Diff(saxon: evaluate(arcext: get. XPath(@xlink: href ))/*/*/aixm: course, saxon: evaluate(arcext: get. XPath ((. /parent: : */following-sibling: : *//aixm: the. Segment. Leg)[1]/@xlink: href))/*/*/ aixm: course) < = 90. 0 and arcext: course. Diff(saxon: evaluate(arcext: get. XPath(@xlink: href ))/*/*/aixm: course, saxon: evaluate(arcext: get. XPath ((. /parent: : */following-sibling: : *//aixm: the. Segment. Leg)[1]/@xlink: href))/*/*/ aixm: course) > = 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, 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 WGS 84 AIXM 5. 1 – Business rules 15
- Slides: 15