dom概览
作者: 常明 写作日期:2000-4-26
dom是对xml开发者相当重要的,对于xml应用开发来说就是一个对象化的xml数据接口。最基本的xml开发通常都要使用它。简单说,dom就是一组对象的集合,通过操纵这些对象,我们就能操纵xml和html数据。
dom全称是document object model,人如其名,dom就是一个文档对象组成的模型,它不光用于xml,最先是起于html的。对作过web开发的人,特别是写过动态dhtml的人,应该对html中的文档对象有一定概念,dom就是这样一个对象模型的标准。
dom另外又是一个接口,一个与语言无关的接口,应用通过这个接口来和xml或html内的数据打交道。无论是在浏览器里,还是在浏览器外,在服务器上,还是客户端,我们只要用xml就会碰到dom。
1. dom的来由
为什么要定义这样一个接口呢?这样讲吧,我们知道数据库有标准的odbc/jdbc这样的接口规范,那么我们使用xml数据如果没有一个统一的接口,我们写程序是不是要每个人都要自己去处理xml的语法细节,如果我们手头有xml的语法分析器(有人译为解析器),它也必然有一个接口让我们通过它访问xml数据,所有语法分析器的接口如果都不相同,我们开发就必须针对某一个分析器,如果换了分析器,程序就必须重写。到这里,又和数据库有可比性了,我们编数据库应用可以不管后面的数据库系统究竟是oracle还是sybase,或informix,是因为有了odbc,所以要是我们做xml应用开发,就应该有一个统一的xml数据接口,这个接口就是dom。
2. dom的三部分
目前的dom分为 核心(core)、html、xml三部分。
核心:
这部分是结构化文档比较底层的对象的集合,但他们就已经可以表达出任何html和xml文件了。
html和xml
这两部分是专为xml和html提供的另外的高级接口,使操纵者两类文件更方便。98年的只有html部分。
3.dom组成
这里有vance christiaanse给出的dom的一个整体的图,可以使大家有一个dom模型基本组成的概念。要看此图 请点这里(比较大哦)。
4 文件树
dom中的最基本对象应该就是node了。从它又派生出许多类型的node。所有这些node组成一棵文件树,它包含了xml或 html文档的几乎全部信息。
在结构化文档中,信息是按层次化的树形结构组织的。所以结构化文档的模型的组织也必然是树形的。
如一本书的组成是
书—-标题
|
—正文—第一章—–第一节—段
|
–第二章 …..
node简单的说,就是上面树形结构中的节点,但对xml来说还包括其他xml语法相关的节点,包括xml声明,文件类型声明,处理指令等等。
node提供一些基本属性和操作,各种类型的node则继承node的属性和操作,同时有各自特殊的属性和操作。比如elementnode
5 基本对象
上面已经讲了dom中最基本的对象就是节点,它的接口定义如下:
从node派生出的几个比较重要的节点类型有document element, attribute,text:
document是dom树的根,它代表一个完整的xml文档。它会有一些自己的子节点,至少应该有一个文档元素的子节点,这个节点类型为element,是xml文件最外层的根元素,此外他还可能有documenttype(唯一),processinginstruction,comment这几种作为子节点。
element代表xml元素,是最常用的节点,它可以组成以它为根的dom的子树。他还可以有element子节点,以及attribut,text,processinginstruction,cdatasection,comment子节点。
attribute是xml元素的属性,它的父节点必然是element,它的子节点有text和entityreference。
除了node,dom里还有两个比较重要的对象:
nodelist它实现的一个节点的序列,用于表示有顺序关系的一组节点,比如某个节点的孩子节点序列,它还出现在一些方法的返回值中,例如getnodebyname。
namednodemap它表示的是一组节点和其唯一的名字的对应关系,这个对象主要用在属性节点的表示上。
6 dom的版本
目前的dom level one是w3c1998年8月18日通过的,现在w3c正在进行dom2的制定。
dom2我们将在以后的文章中介绍。
7 编程
dom 的具体使用和编程不是很难,现在dom的实现主要是以部件的形式提供比如msxml,和java实现比如xml4j。这两种实现,对我们使用它的接口来说,大同小异,但许多实现都加了自己的扩展的接口,这也是我们选择时考虑比较多的。
dom接口的具体的使用,我会在相关的文章中讨论。
