站内搜索:     
站点首页破釜学院编程开发XML/WML → 关于XML Parser的资料综述(二,DOM)
正在加载相关信息.....
Web 站内搜索
关于XML Parser的资料综述(二,DOM)
】【打印】【加入收藏】【关闭收藏到新浪ViVi】【收藏到365KEY】 浏览字号:
日期:2004-08-02 人气: 出处:饮水思源站
2.DOM
    DOM乃由W3C定义,全称为Document Object Model。和DOM有关
的主要有DOM规范和基于DOM的XML Parser。
    DOM规范指的一份文档,在这份文档根据"基于树"的思想中定
义了一种对象模型(UML图见[16]),这种对象模型将一份结构化
文档用对象树的形式表达出来。
    按照DOM规范提供二次开发接口的XML Parser软件包称为基于
DOM的XML Parser,区别于基于SAX的XML Parser。
    DOM的思想也称为"基于树的(tree based)",因为其主要想
法是一次性将一篇结构化文档全部解析,然后生成一个对象树
(object tree)用以描述该文档。之后对于该文档的所有操作(如修
改、查询等),均在该对象树上进行。从"基于树"这点上看,DOM
和动态HTML(Dymanic HTML)非常相象,而且DOM受到DHTML的影响
非常深。
 
2.1 关于DOM规范
    DOM的规范(specification)现有两层。Level One的草案于
1997年10月公布,正式文档于1998年10月发布(published as
W3C candidate recommendation)。Level Two于1998年12月提出草
案,1999年12月定稿,今年3月审核期(review period)结束,5
月发布正式文档。新的Level Three已于今年9月1日发布第一份草
案(draft)。DOM新发布的每一层都对以前DOM进行了内容上的扩
充和更新。
    DOM Level One在结构上分为两段,其中DOM(Core)定义了用于
描述XML的DOM接口,DOM HTML描述了用于HTML的DOM。
    DOM Level One主要描述了三部分内容,它们分别是:
    1)定义了用于表达和操作(represent and manipulate)一份
结构化文档的接口(interface)和对象(object)。
    2)这些接口和对象的语法,包括其行为和属性(behavior and
attributes)。
    3)这些接口和对象之间的关系与协同关系(relationships and
collaborations)。
    DOM Level Two在Level One的基础上增加的内容包括:文档的
抽象视(abstract view)、对象树的遍历(traversal)、文档中
的块(Range)、风格页(generic stylesheets)、层叠式风格页
(Cascading Style Sheets)等内容。另外,更重要的是,Level
Two增加了对事件机制(event)的支持。事件机制在Level One中
完全没有被定义。
    需要注意的是,DOM Level Two中所说的事件(event)和SAX
的事件驱动(event driven)中的事件,虽然名称相同,但涵义完
全不同。DOM2中的事件,指的是结构化文档内部所定义的事件,比
如页面被加载时的OnLoad事件等,和Parser无关。而SAX中的事件
,指的是XML Parser在解析XML文档时产生的回调(callback)事
件,和文档本身无关。
    Level Three在写这份资料综述时刚刚发布草稿,故未及细究
。从W3C公布的草案来看,第三层的主要目标(goal)是进一步加
强和扩充Level Two新出现的事件机制。

2.2 DOM类XML Parser的使用
    遵循DOM规范开发的XML Parser的使用是自然的:首先初始化
一个Parser,然后将一篇文档提交处理,Parser处理后返回一颗对
象树(示意图见[11])。然后所有对文档的操作均对这颗树进行。
在这个过程中,对象树和其操作等,均遵循DOM规范的规定。因此
,遵循标准DOM接口的XML Parser是具有良好的重用特性的。
    由于含有对象的概念,DOM天生就是为面向对象的程序语言指
定的。其规范中也以Java语言作为示例语言。
    需要指出的是,DOM并不是一个二进制的规范(a binary spe
cification),所以,只有对于特定的编程语言才有意义。例如,
对于C++程序员来说,用Java写的XML Parser只有参考价值。
 
2.3 DOM的缺点
    DOM的最大问题在于性能,无论是在运行的速度上,还是运行
所需要的内存上,都对资源提出了很高的要求。
    在运行速度方面,DOM程序在解析整个文档时至少需要扫描整
个文档两遍,而SAX只需扫描一遍(注:此断语出自[15],具体原
因尚未搞清)。
    在运行所需要的内存方面,由于DOM程序一次性将整个文档都
成生一颗树存放于内存中,故对于一些大型的文档,可能会在内存
上遇到麻烦。另外,即使是处理一些不那么大的文档时,DOM程序
也会建立一大堆小对象。频繁的建立对象可能会导致很大的开销。
例如,在Java中,用new建立的每一个对象最终都必须由JVM的垃圾
收集器负责释放,大量的new操作可能会导致JVM的崩溃。

>>>> 进入论坛交流 <<<<