IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  XML  >

技巧: 利用 DOM 进行自举的基础知识,第 3 部分

将来的自举

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

Brett McLaughlin (brett@oreilly.com), 作家兼编辑, O'Reilly and Associates

2002 年 12 月 01 日

这篇技巧文章说明了 DOM 级别 3 中有关自举方面的更改,以及它们是如何改进 DOM 级别 1 和级别 2 的。

在上两篇技巧文章中,我向您展示了在 DOM 级别 1 和级别 2 下进行自举需要了解的几乎所有内容。除了自举中所涉及到的基本概念之外,您还应该知道使用 DOMImplementation 类的原因以及 DOM 级别 1 和 2 如何容易地将您与特定供应商的 DOM 实现联系起来。而且,在 上一篇技巧文章 中,我向您展示了一个简单的实用程序类可以如何使处理解析器的更改更容易。

虽然所有这些都很好,但仍需要花费许多精力(或者至少需要在 google.com 上进行一番搜索)来进行工作,而这些事情应该可以简单些。难道 DOM 规范就不能解决这些自举方面难题呢?好的,我很高兴地告诉您,在 DOM 级别 3 中,以一种改进的、与供应商无关的方式对自举进行了最终的检查和重写。

:在做进一步讨论之前,我想强调 DOM 级别 3 处于即将发布的状态,您还很难找到完全支持 DOM 级别 3 的解析器。也就是说,它处于即将发布状态,一旦它最终完成,就可以利用它的所有新特性,包括这里所讨论的自举。

DOM 级别 3 引入了新的自举方式,用该方式可以避免恼人的特定于供应商的问题,在 DOM 前两个级别中会碰到这种问题。另外,还不需要如上一篇技巧文章所设计的助手类。通过引入新的 DOM 类 org.w3c.dom.DOMImplementationRegistry ,使得用与供应商无关的方式来获得 DOM 实现成为可能。

首先,您(或者您的解析器供应商)需要设置系统特性 org.w3c.dom.DOMImplementationSourceList 。该特性值应该是以空格隔开的类名列表,这些类实现了 org.w3c.dom.DOMImplementationSource 接口。这是 DOM 实现解析器的关键机制。例如,清单 1 显示了 Apache Xerces 解析器可能会如何实现该接口。


清单 1. 样本 Xerces DOMImplementationSource
package org.apache.xerces.dom;
import org.w3c.dom.DOMImplementationSource;
public class XercesDOMImplementationSource implements DOMImplementationSource {
    public DOMImplementation getDOMImplementation(String features) {
        return new DOMImplementationImpl();
    }
}

:这不是真正的 Xerces 实现类;实际上, getDOMImplementation() 方法需要验证 feature 字符串,确保 Xerces 实现能够满足需要,并且在返回 DOMImplementation 实现之前执行其它错误检查。

然后,可以将系统特性设置成值 org.apache.xerces.dom.XercesDOMImplementationSource 。通常,通过解析器自己的代码,或者在应用程序启动时通过批处理文件或 shell 脚本设置该特性,如清单 2 所示。


清单 2. 设置系统特性
java -Dorg.w3c.dom.DOMImplementationSourceList\
=org.apache.xerces.dom.XercesDOMImplementationSource \
  some.application.class

适当地使用这种方法,那么就可以使用如清单 3 所示的那行代码来方便地自举 DOM 实现。


清单 3. DOM 级别 3 中的自举
DOMImplementation domImpl = 
    DOMImplementationRegistry.getDOMImplementation("XML 1.0");

这样,创建新的 DOM 树以及执行其它标准 DOM 操作就很简单。因为系统特性负责处理装入特定于解析器和供应商的细节问题,所以您的代码将摆脱特定于供应商这种传统观念。

至此您已经了解了自举― 这三篇技巧文章详细地讨论了(用多种方式而不是一种方式讨论了该问题!)DOM 自举问题。我非常高兴地告诉您,我现在将继续下去,探讨一些更有趣的编程任务。所以,到下一篇技巧文章时,我们网上见!



参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 本系列文章(有关对 DOM 进行自举的技巧文章)的 第 1 部分解释了自举是什么,并探讨了与之相关的问题,以及在 DOM 级别 1 和 2 中使用自举的一些基本知识( developerWorks,2002 年 11 月)。 第 2 部分建立在前一篇技巧文章的基础之上,向您展示了在 DOM 应用程序中一种更好的自举方式( developerWorks,2002 年 12 月)。

  • 请在 W3C.org 上了解有关 DOM API

  • 关注 IBM 的 XML 新闻组: NewbiesJava Tools



  • 在 Nicholas Chase 的教程“ Understanding DOM”( developerWorks,2001 年 8 月)中了解 DOM 文档的结构,并了解如何使用 Java 技术从 XML 文件创建文档,对文档进行更改以及检索输出。



  • 请在 developerWorks XML 专区查找更多有关 XML 参考资料。

  • 请了解一下 IBM WebSphere Studio Application Developer,这是一个易于使用的集成开发环境,用于构建、测试和部署 J2EE 应用程序,包括从 DTD 和模式生成 XML 文档。

  • 了解如何成为一名 XML 及其相关技术的 IBM 认证开发人员

  • 希望我们每周为您发送与此类似的有用的 XML 技巧文章吗?请注册订阅 developerWorks XML 技巧文章时事通讯


关于作者

Brett McLaughlin 的照片

Brett McLaughlin从 Logo 时代(还记得那个小三角形么?)就开始从事计算机工作了。他现在专门研究用 Java 和 Java 相关技术构建应用程序基础设施。过去几年他一直在 Nextel Communications 和 Allegiance Telecom, Inc. 致力于实现这些基础设施。Brett 是 Java Apache 项目 Turbine 的共同创始人之一,该项目用 Java servlet 为 Web 应用程序开发构建可重用的组件体系架构。他还是 EJBoss 项目(一个开放源码的 EJB 应用程序服务器)和 Cocoon(一个开放源码的 XML Web 发布引擎)的参与者。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款