The Schematron Schema is compiled into an XSLT using a customized version of the Schematron skeleton implementation [10]. The sekeleton implementation needed to be adjusted for two reasons:
We also wanted to use attributes as rule context.[11]
We wanted to provide a more human readable version of the location where the error occurs.
Given the the following XML file…
<passenger> <name>Jane Grant</name> <cabin-bag> <weight>11</weight> </cabin-bag> </passenger>
…the target output of the compiled Schematron XSLT is an XML document that follows the structure of the Schematron Validation Report Language. A failed Schematron assert would result in the following SVRL:
<svrl:failed-assert test="$bag-weight le 8" id="assert-c1-1" see="http://www.cabin-bag.info/c1" location="/passenger[1]/cabin-bag[1]/weight[1]" subcheck:alternativeLocation="/passenger/cabin-bag/weight"> <svrl:text> The weight of cabin luggage is 8kg or less. </svrl:text> <svrl:diagnostic-reference diagnostic="diag-weight-8"> The cabin luggage of Jane Grant exceeded the maximum weight allowance by 3kg. Pack lighter! </svrl:diagnostic-reference> </svrl:failed-assert>
The reference to the documentation of the constraint in the constraint.xml is kept
in a @see
attribute.