XDM和DOM模型之间有什么区别?

时间:2013-09-14 21:18:41

标签: xml dom xml-parsing xquery

我必须描述这些模型之间的差异。我知道其他任何类型和用途都有区别吗?

3 个答案:

答案 0 :(得分:3)

主要区别:DOM保留了XDM不保留的一些内容,例如DOCTYPE,CDATA部分,实体和实体引用; DOM允许以编程方式构造树,这些树不满足格式良好的XML的所有约束(例如,具有无效名称的节点); DOM将名称空间视为属性而不是单独的节点类型,并允许名称空间不一致; DOM允许相邻的文本节点。

答案 1 :(得分:3)

迈克尔凯已经对数据级差异做了很好的总结;我会尝试在答案中给你一些设计级差异。

在最基础的层面上,XDM模拟“项目序列”,而DOM模拟“节点层次结构”。这种区别会影响其设计的其他方面,从可以表示的数据到访问和操作的方式。例如,在XQuery(甚至多个文档)中同时处理来自文档的不同部分的节点非常简单,而DOM使这更加困难。

其次,这两种模型使用的类型系统具有非常不同的目标和方法。 XDM实例中的每个对象都有一个“类型注释”,而DOM中的每个对象都实现一个或多个接口,或者是“基本类型”的实例(DOMString之一,DOMTimeStampDOMUserDataDOMObject)。 XDM具有广泛且可扩展的类型系统,包括从xs:unsignedBytexs:language标识符到类似DOM attribute的所有类型的类型,并且需要使用它的任何语言来完全理解此类型系统。另一方面,DOM类型系统的范围仅限于指定其API的绝对必要条件(主要是Node的各种扩展),并尝试尽可能与语言无关。

第三,DOM是一个读/写数据模型,由使用和操作它的API定义。 XDM是一种只读模型,主要用更抽象的术语定义“表达式的允许值”,用最小的API来描述节点数据访问器。由于这些不同的方法,XDM非常适合用于函数式编程语言,而DOM则设计用于命令式语言。而且,XDM本身并不是很有用;实际访问和操作数据需要额外的语言层(例如XPath / XQuery函数和操作符规范)。相比之下,DOM API是处理DOM数据所需的全部内容。

答案 2 :(得分:0)

我想强调XDM和DOM之间的只读 vs 读写差异。虽然DOM的设计是为了操纵"文档(就像现代JavaScripts创建和修改浏览器中显示的元素一样),XDM旨在"转换"从现有文档创建新文档(未修改)的数据。

因此,

XDM 更适合于多种数据转换,无论是基于XPath,XSLT,XQuery还是类似的,它们将原始内容转换为新形式或从给定集合中提取数据的文件。后者的工作在很多种类的后端"中很常见。数据处理(如在不同系统之间交换数据,每个系统都有自己的XML格式)或者#34;大数据"处理(如聚合和其他分析)。

作为历史的具有讽刺意味的转折,而Java和JVM通常作为与大量XML转换进行系统集成的语言和平台,因此在Java中使用标准XDM是有意义的,不幸的是,情况恰恰相反: JDK带有DOM的接口(org.w3c.dom。*),甚至在DOM之上指定XPath,尽管XDM会更适合它!有关导致问题的示例,请参阅"XPath.evaluate performance slows down absurdly"。此外,Java DOM有许多不是线程安全的方法(因为一切都是如此可变)。由于其不变性,XDM更适合并行处理数据。

如果您想知道如何在Java中使用 XDM ,我会快速提及 JSR 255 ,它将其指定为XQuery提案的一部分它似乎主要用于XML数据库,并且有 Saxon ,它是(截至2018年)Java世界中最活跃的XPath和XSLT处理器。

相关问题