我试图在通过 eXist-db 运行时抑制 Saxon 中的歧义匹配警告。我可以使用
-warnings:silent
通过命令行抑制它们,并尝试通过 eXist-db conf.xml 配置它
<transformer class="net.sf.saxon.TransformerFactoryImpl" caching="yes">
<attribute name="http://saxon.sf.net/feature/version-warning" value="false" type="boolean"/>
<attribute name="http://saxon.sf.net/feature/recoveryPolicyName" value="recoverSilently" type="string"/>
</transformer>
但是通过 eXist-db 运行 Saxon 时仍然会出现警告。 eXist-db 人员向我建议,Saxon 配置选项和 Transformer 属性之间存在差异(即使 Transformer 是 Saxon)。因此,您是否可以通过 Transformer Attributes 控制它取决于 Saxon 是否允许您这样做,或者它是否仅在其配置中期望这样做。您设置为 Transformer 属性的任何内容都会直接传递给底层的 Transformer 实现,在本例中为 Saxon,因此如果它似乎不起作用,那么我怀疑 Saxon 让您以这种方式设置它。
通过 eXist-db 配置 Saxon 的正确方法是什么?
Saxon-PE 9.9.1.8J,eXist-db 6.0.1
XSLT 3.0 允许您使用
<xsl:mode warning-on-multiple-match="yes|no"/>
在样式表本身中启用或禁用警告,它声明默认值是实现定义的。您可能会发现这比任何外部配置设置都更容易使用。
配置选项 recoveryPolicyName 在 Saxon 12 中无效:文档说明
曾几何时,此属性控制可恢复错误的方式 已处理(致命错误、警告或忽略)。 XSLT 3.0 已经消除 规范中的所有可恢复错误,因此该属性现在 已弃用。
9.9 版的文档更加矛盾:它说
指示 XSLT 处理动态错误的策略 规范定义为可恢复。 "recoverSilently" 表示恢复 默默; “recoverWithWarnings”表示在发出信号后恢复 向 ErrorListener 发出警告; “doNotRecover”表示将错误视为 致命的。可恢复错误的一个示例是当两个模板规则 匹配同一个节点。请注意,XSLT 3.0 已经消除了所有 规范中的“可恢复错误”。
现在这是一个相当老的版本,所以我需要做一些认真的挖掘来确定代码的实际作用。
当然,消除警告的最好方法可能是通过为模板规则附加明确的优先级来消除歧义。