• 热门标签

当前位置: 主页 > 航空资料 > 计算机 >

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

处理指令来创建数据结构。这些“交易对象”可能只是和X M L文件内容有一点关系;例如它们
可能只是组合X M L文件和其他数据源的数据。在这种情况下,如果想在内存中创建面向应用的
数据结构,首先创建一个低级D O M结构然后毁坏它是很不合算的。可以仅在每个事件发生时处
理它,这样保证商务对象模型合理地增加变动。
(3) 适合小信息子集
如果仅对计算本周图书馆购进的书籍数量或确定它们的平均价s格感兴趣,那么把不需要的
全部数据和需要的少量数据一起读入内存是非常低效和不必要的。SAX 一个非常好的特点就是
可以非常容易地忽略不感兴趣的数据信息。
(4) 简单
如题所示, S A X非常易于使用。
(5) 快速
如果可以从经由文档的简单序列中获取你需要的信息, S A X几乎一定是最快的方法。
2. SAX的缺点
在论述完其优点之后应该指出使用S A X时可能遇到的不足之处。
(1) 不能对文档做随机存取
因为文档并不加载到内存,所以必须按照数据提交的次序进行处理。对于文档中包含许多
内部交叉引用如使用I D和I D R E F属性的情况,S A X使用起来会困难一些。
(2) 难以实现复杂的查询
复杂的查询对程序而言是非常凌乱的,因为必须自己维护含有你所需要保留信息的数据结
构,如当前元素祖先的属性。
(3) 不能使用文档类型定义( D T D)
S A X 1 . 0不会告知D T D的任何内容。实际上D O M也不会告知太多内容什么,尽管有些提供商
已经扩展了D O M接口以支持这种功能。这对大多数应用程序来说并不是个问题: D T D主要是解
析器感兴趣的问题;而且在本章末尾可以看到这个问题在SAX 2.0中得到了解决。
(4) 不可获取词法信息
S A X的设计原理是它不提供词法信息。S A X设法告知文档作者想要说明什么,而不是让你
忙于研究他们说明方式的细节。例如:
第6章SAX 1.0: XML简易API使用147 下载
• 你不能查明原始文档中是否包含“& # x a ; ”或“& # 1 0 或; ”它是否包含一个换行字符:所有这
三种情况以相同的方式报告给应用程序。
• 你不会被告知文档中的注释说明: S A X假设注释是为方便作者而不是读者设计的。
• 你不会得知属性书写的顺序:这被认为是无关紧要的。
只有当你考虑到以后可能会需要编辑文档,想按照文档原先书写的方式重新创建它时,这
些限制才会导致一些问题。例如你需要编写这样一个应用程序,它用来在完整无缺地保留文档
原有内容的基础上,从另外一个文档添加某些额外信息到原文档中。这样如果你随意改变了属
性的顺序或丢弃了所有的注释,原文档作者会不满意的。实际上,大多数限制和D O M是一样的,
尽管D O M的确在某些方面提供了稍多一些的信息:例如它保留了注释。此外,很多这样的限制
在SAX 2.0里得到改进;尽管没有完全解决,例如属性的顺序和分割符(单引号或双引号)的选
取一样仍然是个难题。
(5) SAX是只读的
D O M可以从X M L原文件中读取文档,也可以创建和修改内存中的文档。相比较而言, S A X
是用来读取X M L文档而不是书写文档。
实际结果是S A X接口可以很容易地和读取X M L文档一样书写文档。稍后可以看到,解析器
读取X M L文档时发送给应用程序的事件流同样可以被应用程序发送到文档生成器以创建文档。
(6) 当前的浏览器不支持S A X
尽管有许多支持S A X接口的X M L解析器。在编写本书时还没有一个主流的We b浏览器内置
X M L解析器以支持S A X接口。你当然可以把兼容S A X的解析器合成到一个Java applet程序中去,
但是从服务器下载a p p l e t的开销会使低速接入Internet 的用户失去耐心。实际上客户端X M L编程
可选择的接口是相当有限的。
6.2 SAX的由来
较少文档提及S A X的历史,因为所有讨论是通过X M L - D E V公共邮件列表实现的,邮件列表
的文本可以从h t t p : / / w w w. l i s t . i c . a c . u k / h y p e r m a i l / x m l - d e v /获取。David Megginson 也在
h t t p : / / w w w. m e g g i n s o n . c o m / S A X / h i s t o r y. h t m l中概述了S A X的历史。
整个过程始于1 9 9 7年底,作为像Peter Murray-Rust这样一些开发X M L应用程序并致力于解
决不同解析器间不能无缝兼容问题的X M L用户施加压力的结果。早期X M L解析器的提供者,包
括Tim Bray, David Megginson和James Clark对讨论也做出了贡献,许多其他邮件列表成员对不同
的草稿也提出一些见解。David Megginson发明了一种讨论方法,当然是依照I n t e r n e t初始的“征
求意见稿”精神,由此意见和建议可以被迅速而公平地处理,最后他于1 9 9 8年5月11日发布了规
范终稿。
S A X成功的一个主要原因是初始的规范, M e g g i n s o n为许多流行的X M L解析器—包括他自
己的AEl f r e d , Tim Bray的L a r k和M i c r o s o f t的M S X M L提供了前端驱动。一旦S A X以这种方式建立,
其他解析器提供商如I B M , S u n和O r a c l e很快在它们的解析器中集成了最早的S A X接口,这样它们
的产品就可以和现有的应用程序一起运行。
最终的S A X规范是根据J a v a接口书写的。它已经被改写成其他语言,尽管我们只知道用
148使用XML 高级编程
下载
P y t h o n语言编写的接口得到积极支持, P y t h o n是Lars Marius Garshol 创立的( 参见
h t t p : / / w w w.stud.ifi.uio.no/~larsga/download/python/xml/saxlib.html )。当然, J a v a接口可以在其
他可以和J a v a交互操作的语言中使用,例如通过使用M i c r o s o f t的J a v a虚拟机提供的从J a v a到C O M
的接口。不过在本章里将只使用初始的J a v a。
S A X的结构
S A X是由许多Java 接口构建而成的。了解接口和类之间的区别是很重要的:
• 接口表示它们是什么方法和它们需要的参数种类。接口完全是一个规范;当方法被调用时
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(57)