Firefox 3.0 与 XML的重大改进

Mozilla® 一直在改进其旗舰浏览器,并且最新的主要发行版 Firefox® 3.0 几乎为每个人都提供了某种特性。肯定不会忽略 XML 开发人员 — 新版本改进了基本解析、DOM、XSLT、SVG 等等。在本文中,了解 Firefox 3.0 提供的用于 XML 处理的新特性;关注添加的 EXSLT 扩展如何在浏览器中使用 XSLT。

对于目前存在的成百上千个 XML 处理工具,Web 浏览器仍然是操作的中心 — XML 开发人员十分幸运,操作似乎永远不会减慢。过去的几年里,我撰写了关于开发人员喜爱的 Firefox 浏览器中与 XML 相关的特性的一系列文章(请参阅 参考资料);我已经从 Firefox 1.5 介绍到了 2.0。最近,Firefox 升级到 3.0 版,其中有很多全面改进以及大量用于 XML 处理的新的出色开发。许多改进都来自核心 Web 处理引擎 Gecko 从 1.8.1 到 1.9 的升级。

3.0 版中的 XML 基本原理

常用缩写词
  • CSS:层叠样式表(Cascading Style Sheet)
  • DOM:文档对象模型(Document Object Model)
  • DTD:文档类型定义(Document Type Definition)
  • HTML:超文本标记语言(HyperText Markup Language)
  • SVG:可伸缩矢量图形(Scalable Vector Graphics)
  • URI:统一资源标识符(Uniform Resource Identifier)
  • URL:统一资源定位符(Uniform Resource Locator)
  • W3C:万维网联盟(World Wide Web Consortium)
  • XSLT:可扩展样式表转换(Extensible Stylesheet Transformation)
  • XML:可扩展标记语言(Extensible Markup Language)

XML 领域包含大量技术,但是全部内容的起点都是解析器;Firefox 3 引入了对基本 XML 解析的一项巨大改进。在过去的 Mozilla 浏览器中,解析 XML 文档是同步的,将阻止对文档执行的所有操作,直至完全载入该文档。对比 XML 解析与 HTML 解析,后者一直都是异步的,这样文档的各个部分在解析后就可以使用了。对于用户,这意味着他将开始看到在浏览器处理完页面之前 Web 页面是如何形成的;另一方面,使用 XML 文档,在完成解析前,用户根本看不到任何内容。这是一个可用性问题,不利于处理大型的 XML 文档。

在 Firefox 3.0 中,XML 内容模型是逐步构造的,类似于 HTML。这将使 XML 在 Web 上的实际应用产生重大变化。有一些例外 — 最明显的是 XSLT 不是逐步处理的。理论上,您可以使用 XPath 的有限子集,逐步应用 XSLT 的子集,但是这样做本身就需要花费巨大精力,并且超出 Firefox 3.0 的范围。

我曾经希望 Firefox 3.0 中的改进之一是提供 xml:id 支持。关于是否支持 xml:id 曾存在一些争议,但是如果可以出现在将来的发行版中,那么就可以使用一个补丁。一般而言,Firefox JavaScript 为在 XML 文档中使用 getElementById 而提供的惟一方法是内部 DTD 子集(无外部子集,并且没有 xml:id)。如果确实需要 xml:id,请从 JavaScript 中使用 XPath 查询 XML 名称空间和 “id” 本地名称中的属性。

未能实现的另一个期望的核心改进是允许用户请求浏览器装入外部 DTD 子集。看上去好像补丁程序已就绪,但是没有足够可用的开发人员资源完成 Q&A 过程,因此未能在 Firefox 3.0 发行版中实现。

XSLT 的重大改进

希望在 Firefox 中使用 XSLT 的人们获得的最大胜利是支持 EXSLT,这是一组由 XSLT 社区开发和支持的 XSLT 扩展,并且受到许多其他 XSLT 处理器的支持。Firefox 3.0 添加了对于大型 EXSLT 子集的支持,首先从 node-set 函数开始,这是解决 XSLT 1.0 中最严重的限制的重要方法。EXSLT 被组织到各个模块中,每个模块都定义若干个扩展函数和元素。Firefox 3.0 在一组模块中实现了一组扩展,如下所示:

  • Common:Firefox 3.0 实现了通用函数的基本集合:
    • exsl:node-set 允许您将结果树片段转换为节点集,这样便可以对其应用 XPath。
    • exsl:object-type 是一个内省工具,用于报告对象类型,例如字符串、节点集、数字或者布尔值。
  • Sets:Firefox 3.0 实现了一些使用节点集的有用扩展:
    • set:difference 将计算两个集合之间的差异,返回一个节点集,该节点集的节点位于其中一个实参,而不在其他实参中。
    • set:distinct 将检验节点集以查找拥有相同字符串值的节点,并且只保留每个节点的一个实例,而将其余都删除。
    • 如果返回的节点集中的节点在两个集合中都有,则 set:intersection 将计算交集。
    • set:has-same-node 将确定两个节点集是否有任何公共节点(例如,它们是不是共享实际的同一个节点,而不只是具有相同字符串值的不同节点,与 XPath = 运算符一样)。
    • set:leading 将返回一个节点集,其中的节点按照文档顺序要比另一个节点集中的第一个节点早出现。
    • set:trailing 将返回一个节点集,其中的节点按照文档顺序要比另一个节点集中的第一个节点晚出现。
  • Strings:Firefox 3.0 实现了一些使用字符串的有用扩展:


本文转自IBM Developerworks中国

      请点击此处查看全文


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值