← Prev in month ← Prev in thread

Re: [xml-dev] Are there invariants in XML processing?

From
Rick Jelliffe <>
To
xml-dev <>
Date
2022-05-01T04:08:12Z
ID
<CADUdYQVj7CZqfyLXOaFKTEazgt0_mGRyGPHj6f90B=>
Thread
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
← Prev in month ← Prev in thread