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

XML高级编程上(20)

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin 点击:
  
开发了一个基于事件的X M L解析的标准接口,即所谓的SAX 1.0: The Simple API for XML
(S A X),现在已经用J a v a、P e r l和P y t h o n实现,而且支持大量不同的X M L解析器。S A X是P e t e r
M u r r a y - R u s t将三个不同的X M L解析器(每个都有专用的A P I)集成到J U M B O的结果—他计划
为解析X M L创造一个通用的、基于事件的Java API。他开始与Tim Bray和David Megginson进行
了设计上的讨论,而后者在1 9 9 8年初用了近一个月的时间编写了最初的J a v a实现。此后, S A X
通过许多人的努力得到了扩充,成为了一种强大的X M L数据处理办法(大多数事件驱动的解析
器现在都支持/使用这种A P I)。我们将在第6章详细讨论S A X。
2.13.2 基于树的解析器
软件工程中使用最为广泛的一种结构就是简单的层次树。所有格式正规的X M L数据都被定
义为类似的树,这样一来,不论是普通的还是成熟的算法都可以用来遍历X M L文档的节点、搜
索内容、编辑文档树。这些树的算法得益于数年的理论研究和商业开发。使用这种方法的X M L
解析器通常遵守W 3 C的文档对象模型(Document Object Model,D O M)。D O M是一种独立于平
台、语言的接口,它能够对树结构的文档进行操作。另一方面, D O M树在文档能够被操作之前
必需在内存中生成—所以高性能的虚拟内存支持对于大型文档来说是非常必要的。一旦树被生
成,应用程序就可以通过相关的A P I访问D O M。我们将在第5章详细讨论D O M。许多这类解析器
事件都建立在事件驱动的X M L解析器的基础之上,它们提供了为构建D O M树需要的所有信息。
M i c r o s o f t曾经开发出一个被称作M S X M L的基于J a v a的早期X M L解析器。之后, I n t e r n e t
Explorer 5(I E 5)包含了对X M L的支持,但使用的是另一套解析器。微软推荐将D a t a C h a n n e l
(它吸收了I E 5的解析器的功能特性)提供的X J P a r s e r作为I E 4的更新组件。此外, M i c r o s o f t的
O ffice 2000还把X M L当作自己的数据交换格式使用,这极大地促进了X M L的推广。同时,要明
确的是,虽然X M L的许多方面与推荐标准的最终要求还有一定差距,但M i c r o s o f t正在走到这些
标准的前面,而且在M i c r o s o f t的实现形式与正式的W 3 C标准之间存在不少差异。
N e t s c a p e承诺在下一代浏览器中将完全支持XML 1.0和X S L,这正在作为一个开放资源项目
由M o z i l l a组织着手进行。该浏览器当前的代号为“ S e a M o n k e y”(使用N G L a y o u t / G e c k o布局引
擎)。目前,它正在处于开发当中(尚未进入b e t a 测试阶段),而且最近的公司变动也给
A O L / N e t s c a p e的浏览器的未来蒙上了阴影。
Fujitsu Laboratories曾经开发出一种高级S G M L / X M L浏览器H y B r i c k。它支持高级的链接和
格式功能,它使用的是D S S S L(ISO 10719)显示法和X L i n k / X P o i n t e r引擎。该浏览器基于J a m e s
C l a r k的S P和J a d e,能够处理有效的和格式正规的X M L文档。大家可能想象得到,这个浏览器对
日文的处理和英文一样优秀。
2.13.3 解析器基准测试
两位开发者最近完成了X M L解析器的基准测试,它检验了L i n u x和S o l a r i s系统上几种不同的解
46使用XML 高级编程
下载
析器。结果(可能正如大家预料的一样)表明用C语言编写的产品(尤其是James Clark的e x p a t)仍
然是最快的,然后是J a v a,最后是脚本语言(P e r l和P y t h o n,两个实际上都是e x p a t解析器的变种)。
L i n u x基准测试是由Clark Cooper执行和汇总的,他测试了6种解析器:
• Expat(James Clark用C语言编写)
• RXP(Richard To b i n用C语言编写)
• XP(James Clark用J a v a语言编写)
• XML4J(I B M用J a v a语言编写)
• XML::Parser(Clark Cooper用P e r l编写)
• Pyexpat(Jack Jansen用P y t h o n编写)
S o l a r i s基准测试是由Steven Marcus执行和汇总的,它测试了上面除去R X P的所有产品,再
加上S u n的“x m l - t r 2”解析器(J a v a s o f t用J a v a写成)。这些可以通过以下地址得到:
• Linux测试—h t t p : / / w w w. x m l . c o m / p u b / B e n c h m a r k / e x e c . h t m l
• Solaris测试—h t t p : / / w w w. a w a r e t e c h n o l o g i e s . c o m / X M L / x m l b e n c h / s o l a r i s . h t m l
下面我们看一看针对特定问题的X M L应用程序。
2.14 书籍目录应用程序
书籍目录应用程序是X M L如何用于传统文档标志和更为普通(和强大)的数据建模的简单
例子。这个X M L词汇表包括典型的书籍目录元数据,也为向用户的搜索要求发送结构化的价格
信息提供了基础,它实现了在W W W上进行书籍交易,能够为将书籍运送到商店生成包装清单和
运送标签,还可以在出版商和书店之间交换财务和订单数据。我们将在下一章花费更多的时间
来分析这个应用程序,最终设计出一个能够更加符合目录需要的D T D。而现在,我们能够以更
为简单的方式来解决问题。
让我们先从这个应用程序中的基本要素—书说起。根据本例的要求,我们忽略掉书本的
实际内容,但当然文本标记仍是S G M L和它的后继者(比如X M L)的传统用法。书籍包含一些
普通的目录元数据,例如作者、出版商、出版日期、版权等等。
一旦我们开发出书籍的合理结构,我们就会在另一个层次—目录对其进行修改。这一层
与其说是文本文档,到更不如说它像传统的数据库,因此也包括了X M L数据的一些建模能力。
<Book>元素
首先,我们只使用简单的子元素来创建< B o o k >元素:
程序清单2 - 1 4
第2章XML 语法使用47
下载
在上面的例子中有一个明显的错误:所有合作作者都被汇总到了一个元素中。
 
中国航空网 www.aero.cn
民航翻译 www.aviation.cn
本文链接地址:XML高级编程上(20)
 
------分隔线----------------------------