是否对用于创建 DominoTree 的 DOM 有任何要求,例如具有命名空间感知能力或使用二级 dom 构建器创建?

Is there any requirement for DOM used to create a DominoTree, such as being namespaceaware or created with level 2 dom builder?

提问人:jmashalk 提问时间:11/3/2022 更新时间:11/10/2022 访问量:36

问:

在调用 saxon 库来处理 xquery 表达式之前,我们正在添加代码以将 DOM 转换为 Domino,这涉及构造一个 xml 文档作为输出。 对于使用某些 DOM 构建器创建的 DOM,可以看到以下异常:

java.lang.NullPointerException
    at net.sf.saxon.om.NameOfNode.equals(NameOfNode.java:177)
    at net.sf.saxon.om.SingletonAttributeMap.put(SingletonAttributeMap.java:69)
    at net.sf.saxon.om.NodeInfo.attributes(NodeInfo.java:528)
    at net.sf.saxon.tree.util.Navigator.copy(Navigator.java:673)
    at net.sf.saxon.om.NodeInfo.copy(NodeInfo.java:568)
    at net.sf.saxon.tree.util.Navigator.copy(Navigator.java:679)
    at net.sf.saxon.om.NodeInfo.copy(NodeInfo.java:568)
    at net.sf.saxon.event.ComplexContentOutputter.decompose(ComplexContentOutputter.java:860)
    at net.sf.saxon.event.ComplexContentOutputter.append(ComplexContentOutputter.java:656)

原因似乎是节点属性类型的node.getLocalName()为Domino返回null。如果将 DOM 转换为 Tiny Tree 或使用 DOMWrapper 传递给 Saxon,则相同的设置也有效。

使用 domino 的 Xquery 预期可以工作,但抛出了 Exception。

Dom Domdocument 撒克逊 Domparser

评论

0赞 Martin Honnen 11/3/2022
我认为就 DOM 而言,Saxon 需要一个命名空间感知 DOM。
0赞 jmashalk 11/3/2022
但相同的模型,在使用 TinyTree 和 DOM 时有效。多米诺骨牌有什么不同吗?
0赞 Martin Honnen 11/3/2022
我认为只有 Michael Kay 才能回答这个问题,所以你必须等到他出现在这里,或者,如果情况紧急,也许可以删除你的 StackOverflow 问题并尝试在 saxonica.plan.io/projects/saxon/issues 提出问题。
0赞 jmashalk 11/4/2022
是的,会这样做,谢谢你的帮助!

答:

0赞 Michael Kay 11/10/2022 #1

您在 Saxonica 支持论坛上提出了这个问题 https://saxonica.plan.io/issues/5727

总结一下:

(a) 无论是使用 Saxon 中的 DOM 包装器,还是使用 Domino 结构(添加额外的索引),DOM 都应该是命名空间感知的,并且应该使用命名空间感知(即 2 级)接口来构造。

(b) 如果您不遵守该规则,我们不应该崩溃(因此我们将修复您观察到的崩溃),但我们不能保证提供符合 XPath 的结果。从非命名空间感知DOM到有效XDM实例的映射是未定义且不可预测的,因此XPath处理的结果是未定义的。例如,这可能意味着,当序列化结果时,它不是格式正确的 XML(例如,它可能在元素或属性名称中包含未声明的前缀。