XML.orgXML.org
FOCUS AREAS |XML-DEV |XML.org DAILY NEWSLINK |REGISTRY |RESOURCES |ABOUT
OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]
Re: [xml-dev] Are there invariants in XML processing?

 

Terrific article Rick!

 

Two excerpts that I especially like (highlight is my own):

 

In order to get good quality-in-use out of a system, some way of providing process improvement and continuous quality improvement can be implemented. In this case, when some problem in the system or markup is detected and addressed by developers and data entry staff, then a corresponding Schematron rule is put into place.  This allows the quality of the fix to be confirmed, and for information about the problem to be captured. 

 

Diffing tools are more appropriate than Schematron for efficiency and detection; however, they do not have any ability to explain the fault and they need customization to not report differences that may be irrelevant (order differences of semantically unordered elements, dropped obsolete elements, etc.). 

 

From: Rick Jelliffe <rjelliffe@allette.com.au>
Sent: Sunday, May 1, 2022 12:08 AM
To: xml-dev <xml-dev@lists.xml.org>
Subject: [EXT] Re: [xml-dev] Are there invariants in XML processing?

 

For a Schematron introduction to this, including document invariants (fixed and co-occurrence) and input/output invariants, and round-trip invariants, see Six Kinds of Validation using Schematron at https://www.schematron.com/document/279.html

 

For people interest in the practical theory of invariants, Bertam Meyers' work on Design by Contact still is a great place to start: he couches it in functional terms of pre-condition, invariant,  post-condition, which I think is more systematic than just "invariants".

 

For the example, the Schematron IO validation (output to input) might be (roughly)

 

<sch:pattern id="publicMilitaryIndicator-nullTransform" documents="'input.xml'">


     <sch:rule context="publicMilitaryIndicator">

             <sch:let name="matching-output" value="myFunc:findMatchingRow(., 'output.xml')" />

          

              <sch:assert test="TYPE = 'A' or TYPE = 'B' or TYPE = 'C'" role="pre-condition" >Every publicMilitaryIndicator input should have a TYPE  with value A, b, or C (i.e., Civil, Joint, Military)</sch:assert>

 

               <sch:assert test="$matching-output/TYPE = 'A' or $matching-output/TYPE = 'B' or $matching-output/TYPE = 'C'" role="post-condition" >Every publicMilitaryIndicator output should have a TYPE  with value A, b, or C (i.e., Civil, Joint, Military)</sch:assert>

 

             <sch:assert test="$matching-output" role="invariant">Every input publicMilitaryIndicator should have a matching output</sch:assert>

 

             <sch:assert test="$matching-output/TYPE= ./TYPE" role="invariant" >Every input publicMilitaryIndicator TYPE value should be carried through to the output</sch:assert>

 

</sch:rule></sch:pattern>

 

Rick



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 1993-2007 XML.org. This site is hosted by OASIS