gpt4 book ai didi

java - 如何在 Java 中编译 schematron 条件 (XPaths/XSLT 2.0)

转载 作者:行者123 更新时间:2023-11-30 06:32:17 24 4
gpt4 key购买 nike

我想从 Java 代码中验证 schematron 条件(最终是 xslt boolean 求值),以了解它在语法上是否正确。我们的用户可以提供额外的验证规则,我们将其转换为 schematron 来验证给定的 XML 文件,但我们想知道这些规则最终是否有意义。

我尝试过从 javax.xml.xpath.XPath 编译方法,但似乎缺少“castable as”和其他默认 xslt2.0 函数/运算符之类的东西。我尝试提供默认的 XPathFuntionResolver 来告诉 XPath 忽略这些函数,但似乎没有成功。

XPath xpath = XPathFactory.newInstance().newXPath();
xpath.setXPathFunctionResolver(new XPathFunctionResolver() {
@Override
public XPathFunction resolveFunction(QName functionName, int arity) {
return new XPathFunction() {
@Override
public Object evaluate(List args) throws XPathFunctionException {
return null;
}
};
}
});

验证这些用户定义的规则的最佳方法是什么?

最佳答案

JDK 中 javax.xml.xpath.XPath 的默认实现仅支持 XPath 1.0,但您的特定 XPath 表达式是 XPath 2.0(或更高版本)。有多个可用于 Java 平台的 XPath 2.0 第三方实现,其中 Saxon 产品(我的)是最著名的。

您可以使用标准 javax.xml.xpath.XPath API 来使用 Saxon 的 XPath 引擎,正如 Martin Honnen 所建议的那样;然而,该 API 是围绕 XPath 1.0 设计的,因此利用 XPath 2.0 的全部功能可能会很棘手(例如,您无法轻松地计算返回日期的表达式)。所以 Saxon 有一个名为 s9api 的替代 API,它可能更容易使用。有关 Saxon 文档的详细信息,请访问 www.saxonica.com。

您使用自定义函数解析器的方法不会帮助 XPath 1.0 引擎理解“X 可转换为 Y”之类的语法结构 - 它仅用于解析函数调用。

关于java - 如何在 Java 中编译 schematron 条件 (XPaths/XSLT 2.0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45855704/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com