到目前为止,我们这个XML系列专栏文章已经涵盖了基本语法、采用DTD 以及XML Schema的强制性文档结构等两个方面的内容。现在我们就该讨论所谓的文档对象模型DOM(Document Object Model)了,DOM通过对象的树状集合轻松访问XML文档。由于很多编程语言都实现了DOM,所以我在本文中会尽力采取一种同具体语言无关的态度,其宗旨集中于介绍DOM的规范。也就是说不涉及具体的示例代码。
DOM事实上就是采用树状对象集合的方式访问给定文档内容的抽象规范。请你记住这一点:给定的文档不一定非得是XML文档。
DOM规范与Web世界的其他标准一样受到W3C组织的管理,在其控制下为多重平台和语言使用DOM提供一致的API,W3C把DOM定义为一套抽象的类而非正式实现DOM。因此,正是独立的开发商实际上提供具体平台和开发语言下规范接口的实现。
DOM的接口定义是采用对象管理组织的 接口定义语言(IDL)创建的。即便你对IDL并不太了解也没有多大关系,因为IDL的自我描述非常得当,你直接查阅这些定义不会受到理解上的困难。在本文中我给每一个谈到的接口都设置了对应的IDL定义的链接,这样你就可以在必要的情况下引用它阅读相应的文档。
DOM的功能分为3个级别:
由于W3c的规范只是最低要求的建议,产品供应商在大多数情况下还会对DOM规范进行专有性的技术扩展。比方说,这就是为什么许多可用DOM的实现已经内建XPath支持的原因。在使用这些扩展的时候你可得小心谨慎,尤其是那些采用第3级别的功能。那些对象的接口还在经常性的变动之中,最终,正式版本可能与你根据工作版本编写的代码不兼容。
DOM把文档表示为节点(Node)对象树。如果你还记起的话,“树”这种结构定义为一套互相联系的对象的集合,或者说节点,其中一个节点作为树结构的根(root)。节点被冠以相应的名称以对应它们在树里相对其他节点的位置。例如,某一节点的父节点就是树层次内比它高一级别的节点(更靠近根元素),而其子节点则比它低一级别;兄弟节点显然就是树结构中与它同级的节点了——不在它的左边就在它的右边。图A给这些术语提供了图形化的解释,如果你被这个节点的大家庭弄糊涂了的话,看看这张家谱图能给你开窍不少。
图A
节点对象不但表示了文档中的XML元素而且代表了在一个文档之内的其他所有内容,从最顶端的文档元素自身到单独的内容要素,比如属性、注释以及数据等等都包括在内。每一个节点都有其专门的接口,这些接口对应于节点所代表的XML内容,但这些接口其实在本质上也是节点。面向对象的支持者会说所有的DOM对象都继承于节点。而节点(node)接口则是用来导航文档树、增加新节点以修改一个文档结构的主要方法。