我想在抽象的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模板。

10-04 19:16