DOM、SAX、DTD和XML Schema易混概念解析
作者:雨水 日期:2007-03-21 转载请保留此处
刚开始学习XML有几个概念最容易混淆,弄不清楚是怎么回事。这里将XML的DOM、SAX、DTD、Schema四个重要概念分析一下,以解之惑。
DOM和SAX是应用中操纵XML文档的两种主要API,它们分别解释如下:
DOM,即Document Object Model,中文叫文档对象模型。DOM是W3C定义的标准文档对象模型,是一个与操作系统和编程语言无关的、用于内存存储和操作层次化文档的模型。当按照DOM模型解析XML文档时,就会在内存中构造一个对应的DOM树,它可以用于不同节点之间的遍历。然而,在遍历之前必须先完成DOM树的构造。因此,在处理规模较大的XML文档时就很耗内存,占用资源较多。尤其是只需要操作文档中一小部分时效率很低。
SAX,即Simple API for XML的简称,中文叫XML简单应用程序接口。它是一个事实上的标准。与DOM不同的是,它是用事件驱动模型。解析XMl文档时每遇到一个开始或者结束标签、或者属性、或者一条指令时,程序就产生一个事件来进行相应的处理。所以在操作文档之前不需要对整个文档进行解析。实际上,文档的各个部分可以在进行解析的同时进行操作。因此,SAX相对于DOM来说更适合操作大文档。
DTD和Schema是用于定义 XML文档结构的工具。它们一方面用于定义XML文档的结构,另一方面用于验证XML文档是否满足指定的结构。
DTD,即Document Type Define,中文称文档类型定义。它是标准通知标记语言(SGML)DTD的一个子集。一个XML DTD定义了XML文档的元素架构、元素标记和属性。建立XML文档时通常需要按照DTD规范来进行,反过来可以通过对文档进行DTD验证,检验XML文档建立的正确性。DTD不能定义一些必要的限制条件,如元素出现的次数、数据类型等,因此DTD更适于以文档为中心的XML内容。
Schema,中文称模式。与DTD不同,它本身也是基于XML。XML Schema同时还支持名称空间,能够定义比DTD更复杂的数据类型和结构。XML Schema内置支持一系列的简单数据类型,如字符串、小数和整数等,还可以定义元素出现的次数。因此XML Schema更适合以数据为中心的文档。
目前,越来越多的应用中偏向于采用XML Schema来定义和验证XML文档。