[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] Are there invariants in XML processing?
- From: "G. Ken Holman" <gkholman@CraneSoftwrights.com>
- To: Rick Jelliffe <rjelliffe@allette.com.au>,xml-dev <xml-dev@lists.xml.org>
- Date: Sun, 01 May 2022 09:44:47 -0400
Forgive me, but I'm trying to understand the use
of the noun "invariant". This is the first I've
seen it used, and it is being bandied about.
Rick's post using it extensively is dated 2016,
so I feel very much out of the loop.
Is an invariant any different than a constraint?
Does the use of this noun come from another discipline where the use is common?
When does it help the listener/reader to use the
noun "invariant" rather than "constraint" or some other word?
Thanks for your patience with my questions ... I'm just curious.
. . . . . Ken
At 2022-05-01 14:08 +1000, Rick Jelliffe wrote:
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>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
--
Contact info, blog, articles, etc. http://www.CraneSoftwrights.com/x/ |
Check our site for free XML, XSLT, XSL-FO and UBL developer resources |
Streaming hands-on XSLT/XPath 2 training class @US$125 (5 hours free) |
Essays (UBL, XML, etc.) http://www.linkedin.com/today/author/gkholman |
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]