Using XML Schemas页面(在Apache XML Project网站上)指出:

在类型替代实现中,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引擎 .

本段暗示 assertalternativetest 不必限于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

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

  • <alternative test="@value='4567'" ... />

  • <alternative test="../Sibling/@value='1234'" ... />

第1个(普通) test 表达式成功,但第2个(非平凡) test 表达式失败,其中:

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处理器,那么我会得到一个缺少的类异常 .

我看到old Apache issue引用了必须明确启用的 cta-full-xpath-checking 功能,但上面的引用清楚地表明

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

我想要一个XML Schema 1.1 alternative 元素来对父元素的属性或兄弟元素的属性执行 test . 对我的方法进行哪些修改才能实现这一目标?