1

使用XML 模式页面(在 Apache XML 项目网站上)指出:

在类型替代实现中,Xerces-J 首先尝试使用本地 Xerces“XPath 子集”解析器编译 XPath 表达式。如果使用本机 Xerces“XPath 子集”解析器解析失败,Xerces-J 会透明地切换到另一个支持所有 XPath 2.0 的处理器。Xerces-J 中的本机处理器是为提高效率而编写的,因此如果您的 XPath 表达式落在 XML Schema 1.1 规范定义的最小子集内,您可能会获得更好的性能。对于完整的 XPath 2.0 评估(对于 XSD 1.1 的“断言”,以及可选的“类型替代”),Xerces-J 使用 Eclipse/PsychoPath XPath 2.0 引擎。

本段暗示断言替代测试不必受限于 XSD 1.1 标准强加的 XPath 限制,只要可执行文件包含 PyschoPath XPath 处理器。

使用以下命令行: $ export XERCESJ=$HOME/xerces-j/xerces-2_11_0-xml-schema-1.1-beta $ java -classpath $XERCESJ/cupv10k-runtime.jar:$PSYCHOPATH/psychopath.jar:/usr/share/java/org.eclipse.wst.xml.xpath2.processor-2.1.100.jar:/usr/share/java/xercesImpl-xsd11-2.12-beta-r1667115.jar:$XERCESJ/xml-apis.jar:$XERCESJ/xercesSamples.jar jaxp.SourceValidator -xsd11 -i my_instance.xml

我在我的替代s' test s 中尝试了以下每个 XPath 表达式:

  1. <alternative test="@value='4567'" ... />
  2. <alternative test="../Sibling/@value='1234'" ... />

第一个(平凡)测试表达式成功,但第二个(非平凡)测试表达式失败

c-cta-xpath: The XPath expression '../Sibling/@value='1234'' couldn't compile successfully in 'cta-subset' mode, during CTA evaluation.

此外,我相信我包含 PsychoPath XPath 处理器没有任何效果,因为无论我在classpath中包含还是删除 PsychoPath ,我都看到完全相同的行为。如果我只删除 Eclipse (WST) XPath 处理器,那么我会得到一个缺失类异常。

我看到了一个旧的 Apache 问题,它引用了必须显式启用的cta-full-xpath-checking功能,但上面的引用清楚地表明

... Xerces-J透明地[我的重点] 切换到另一个支持所有 XPath 2.0 的处理器。

我想要一个 XML Schema 1.1替代元素来对父元素的属性或兄弟元素的属性执行测试。对我的方法进行哪些修改将实现这一目标?

4

0 回答 0