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引擎。
本段暗示断言或替代的测试不必限于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'中尝试了以下每个XPath表达式。的测试 S:
<alternative test="@value='4567'" ... />
<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处理器已经没有效果,因为无论我是否包含或删除了PsychoPath,我都会看到完全相同的行为强>类路径即可。如果我只删除Eclipse(WST)XPath处理器,那么我会得到缺少类异常。
我看到old Apache issue引用了必须明确启用的 cta-full-xpath-checking 功能,但上面的引用清楚地表明
... Xerces-J 透明 [我的重点]切换到支持所有XPath 2.0的另一个处理器。
我想要一个XML Schema 1.1 替代元素来对父元素的属性或兄弟元素的属性执行测试。对我的方法进行哪些修改才能实现这一目标?