首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XDM和DOM模型有什么区别?

XDM和DOM模型有什么区别?
EN

Stack Overflow用户
提问于 2013-09-14 21:18:41
回答 3查看 1K关注 0票数 2

我必须说明这些模型的不同之处。我知道在类型和目的上有区别,还有什么别的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-18 03:57:14

Michael已经很好地总结了数据级别的差异;我将尝试在我的回答中给出一些设计级别的差异。

在最基本的层次上,XDM建模一个“条目序列”,而DOM建模一个“节点层次结构”。这种区别影响到它们设计的所有其他方面,从可以表示什么数据,到访问和操作数据的方式。例如,在XQuery (甚至多个文档)中同时处理文档中不同部分的节点是非常简单的,而DOM则使这变得更加困难。

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

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

票数 4
EN

Stack Overflow用户

发布于 2013-09-15 07:21:32

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

票数 3
EN

Stack Overflow用户

发布于 2018-02-16 23:42:56

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

因此,XDM更适合于许多类型的数据转换,无论是基于XPath、XSLT、XQuery或其他类似的类型,这些转换将原始数据转换为新的表单或从给定的文档集中提取数据。后一种工作在许多类型的“后端”数据处理中非常常见(比如在不同系统之间交换数据,每个系统都有自己的XML格式)或“大数据”处理(比如聚合和其他分析)。

作为一个具有讽刺意味的历史转折,尽管Java和JVM通常作为语言和平台来与大量XML转换进行系统集成,因此在Java中使用标准XDM是有意义的,但不幸的是,事实恰恰相反: JDK提供了DOM的接口(org.w3c.dom.*),甚至在DOM的基础上指定了XPath,尽管XDM更适合这样做!请参阅"XPath.evaluate performance slows down absurdly"以获得一个导致麻烦的示例。而且,Java有许多不安全的方法(因为所有东西都是可变的)。由于XDM的不可变性,它更适合于并行处理数据。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18806488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档