【发布时间】:2017-08-24 07:41:58
【问题描述】:
我想从 Java 代码中验证一个 schematron 条件(最终是一个 xslt 布尔评估),以了解它在语法上是否正确。我们的用户可以提供额外的验证规则,我们将这些规则转换为 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;
}
};
}
});
验证这些用户定义规则的最佳方法是什么?
【问题讨论】:
-
假设您在 XSLT/XPath/Schematron 中使用某个版本的 Saxon 9,那么您可以在代码中使用例如
XPath xpath = new net.sf.saxon.xpath.XPathFactoryImpl().newXPath();使用 XPath 的 Saxon 实现。 -
是的,我使用的是 Saxon8 实现,这也适用于这个版本:D 我必须添加的唯一额外内容是一个空的 XPathVariableResolver,例如
xpath.setXPathVariableResolver(new XPathVariableResolver() { public Object resolveVariable(QName arg0) { return ""; } });
标签: java xml xslt xpath schematron