我想在抽象的schematron规则中输出一些上下文。
XML示例
...
<xpath>
<to>
<search>Content</search>
</to>
</xpath>
Schematron
<sch:rule context="$element">
<sch:report test="true()">
<sch:value-of select="$element"/>
</sch:report>
</sch:rule>
<sch:pattern id="tests-1" is-a="test">
<sch:param name="element" value="//xpath//to//search"/>
</sch:pattern>
...
输出
Content
,是否有传递xpath值//xpath//to//search
的条件? 最佳答案
如果您使用的是Schematron的基于XSLT的参考实现来生成SVRL输出,那么SVRL将包括成功报告的上下文的XPath,如下所示:
<svrl:successful-report ... location="[this is where the XPath will be]">
如果那不能满足您的需求,并且您仍然需要获取节点的XPath,并且您正在使用基于XSLT的引用实现,则可以利用实现中定义的XSL模板,如下所示:
<sch:pattern>
<sch:rule context="//xpath//to//search">
<sch:report test="true()">
<xsl:apply-templates select="." mode="schematron-get-full-path"/>
</sch:report>
</sch:rule>
</sch:pattern>
为此,在将Schematron架构编译为XSLT时必须使用
allow-foreign
参数,如果使用的是Saxon,则必须使用以下参数:[path/to/saxon/]Transform
–xsl:iso-schematron-xslt2\iso_svrl_for_xslt2.xsl
–s:[SchematronFile2.sch]
–o:[SchematronFile.xsl]
allow-foreign=true
这种方法将使您的Schematron模式依赖于基于XSLT的Schematron参考实现。其他实现可能没有必要的XSL模板。