验证 XML 代码并对其字符进行编码
使用 XML 文档的主要困难在于检查其内部有效性(文档逻辑的内聚性)。需要执行语法检查以了解是否所有的标记和定义都是正确的并且被正确地调用。只有语法检查通过之后,才能确认 XML 文档格式良好并可以解析文档的逻辑结构。XML 文档由 XML 解析器验证。
所有以下描述的 Eclipse XML 插件都能够执行 XML 验证,指出代码中的警告和错误。如果试图打开一个 XML 文档,XML 解析器可能会生成一个错误。可以检索精确的错误代码、错误文本甚至导致错误的那一行。可以在需要时验证 XML 文档,或在保存文档时自动验证。可以将验证错误任务作为一组进行清除。XMLBuddy 插件使用系统范围的 XML 解析器,不过,请记住 Eclipse 平台带有最好的 XML 解析器之一:Xerces(XML4J)。请参阅参考资料以获得下载信息。但并不限于 Xerces 或系统解析器,因为可使用 Run => External Tools => Configure 指向其它 XML 解析器。
另一个重要的 XMLBuddy 功能是支持不同的字符编码。这迟早会有用,例如,当需要使用以不同语言(如波兰语和英语)编写的 XML 可移植文档时。这不是一项简单的任务,因为编码波兰语字符主要有三种方法:其一是由 Windows 9x/2000 使用的 Windows Latin-2(CP1250);其二是在因特网中使用以及由 UNIX 与类 UNIX 系统(如 Linux)使用的 ISO Latin-2(ISO8859-2);其三是 MacOS 和 MacOS X,它们对波兰语使用不同的字符编码标准。
通常,XMLBuddy 为字符编码提供两种解决方案:根据文件内容自动检测 XML 文档编码,或将其设置为缺省的编码。缺省的编码可以在工作空间范围,也可特定于资源。要打开 XML 编码首选项,可选择 Window => Preferences => XML => Encoding。
这些针对字符编码的解决方案的问题在于:对 XML 而言,一种编码(每个工作台一种)不能适应全部情况。XML 文档可能来自世界各地任意数量的来源。在许多情况下,用户不能控制其他人对文档的编码,而且可能没有办法按编码界限划分工作。同一编码首选项将很难同时适合(比方说) Java 源文件和 XML 文档。当一组全局首选项不能满足需要时,XMLBuddy 为每个文档提供属性。指定项目中每个文件的属性是一项繁重的任务。但是,当要处理的某一文档使用了不常用的编码(不能自动检测该编码,并且没有在文档中指定)时,则属性是唯一的解决方案。要打开特定文件的编码属性,可在文件上单击鼠标右键并选择 Properties = > XML => Encoding。图 4 显示了如何设置全局字符编码。
图 4. 在 Eclipse 中设置 XML 文档的全局字符编码
DTD vs. XML Schema
XML Schema 指定 XML Schema 定义语言,该语言提供了描述 XML 1.0 文档结构和限制其内容的工具,其中包括那些利用 XML Namespace 的工具。模式语言自身用 XML 1.0 表示并使用名称空间,它在很大程度上重构了 XML 1.0 DTD 具有的能力,并在一定程度上扩展了这些能力。请记住 DTD 有许多局限:
对于复杂需求通常很难使用内容模型。
不支持名称空间。
对模块化和重用的支持非常有限。
不支持对声明扩展或继承。
编写、维护和读取大型 DTD 以及定义系列相关模式都很困难。
没有嵌入式、结构化自我文档编制(self-documentation)(只有 <!-- comments --> 可用)。
内容和属性声明不能依靠属性或元素上下文(许多 XML 语言用到这一点,但它们的 DTD 必须“允许过多东西”)。
只能使用一个简单的标识属性机制(换句话说,没有唯一性作用域)。
但 XML Schema 也有不足:
XML Schema 比较复杂;只需要偶尔使用 XML 的程序员可能觉得它难得有些过头。
XML Schema 不能请求特定的根元素(因此,即使验证最简单的文档也要求额外的信息)。
当描述混合内容时,根本无法约束字符数据。
内容和属性声明不能依靠属性或元素上下文(这也是 DTD 的主要问题)。
不能离开声明指定缺省值。
元素缺省值只能是字符数据(不包含标记)。
XMLBuddy 对 DTD 和 Schema 都提供了足够的支持,但如果您需要真正优秀的 XML Schema 支持,应该使用 XSD-XML Infoset Browser for Java 插件(请参阅参考资料以获得链接)。它是按照 W3C XML Schema 规范中描述的那样实现 XML Schema Infoset Model 的 Java 参考库。它对于任何检查、创建或修改 XML Schema 的代码都非常有用。XML Infoset Browser 提供操作 XML Schema 组件的 API,以及操作以一系列 XML 文档的 XML Schema 的(DOM 可访问的)表示的 API。XML Infoset 基本上允许两个或两个以上的程序员同时使用 Java 和 XML,因此提供了识别和创建基于 XML 的模式的标准方法。
图 5. 安装 IBM XML SQC 之后 XML Schema 验证变得可用
XML Infoset Browser 的必要补充是 IBM XML Schema Quality Checker,简称 SQC(请参阅图 5 和参考资料以获得链接)。SQC 是 Java 程序,它获取以 W3C XML 模式语言编写的 XML Schema 作为输入,然后诊断 Schema 语言不正确的使用。SQC 读取符合最新 XML Schema 规范的 Schema,并尝试确定它们在应用于 Schema 的各种约束下是否有效。当 SQC 遇到不符合规范的元素时,它给出诊断消息,其中可能包含关于如何修正问题的建议。对于由许多 Schema 文档(这些文档间通过 <include>、<import> 或 <redefine> 元素信息项连接)组成的 Schema,执行完整的 Schema 检查。SQC 还可以以批处理方式运行,通过一次运行检查多个 XML 模式。
其它 Eclipse XML 插件
其它有用的 XML 插件有 Transclipse 和 Eclipse Tidy(请参阅参考资料以获得链接)。Transclipse 是 XML 转换插件。它用任何符合 JAXP 的 XSL 样式表处理器通过 XSLT 处理 XML 文档,并使用 Apache 格式化对象处理器(Formatting Objects Processor,FOP)处理 XSL-FO 文档。Transclipse 是 j2h(Java 至 HTML,Java to HTML)插件的一部分,j2h 将 Java 源代码转换成带语法突出显示的 HTML、XHTML 和 LaTeX。Eclipse Tidy 项目提供了格式化和打印 XML/HTML 文档的插件。请访问已分类的 Eclipse 插件注册表以获得更多信息(请参阅参考资料)。
参考资料
加入 Eclipse 平台社区并请通过 eclipse.org 下载该平台。Eclipse 平台源代码在 Common Public License 下授权使用。在 eclipse.org,还可以找到有关 Eclipse 项目的术语词汇表和描述,以及技术文章和新闻组。Eclipse 平台白皮书详细介绍 Eclipse 的主要组件和功能。
在 Bocaloco Software 的 XMLBuddy 网站下载 XMLBuddy 并了解有关它的更多信息。
在 eclipse project downloads 页面下载 Eclipse 平台 Plug-in SDK。
有关 Apache XML 项目(包括 Xerces 解析器)的信息,请参阅 Apache.org。
在 eclipse.org 下载 XSD-XML Infoset Browser for Java。
在 IBM 的 alphaWorks 站点下载 XML Schema Quality Checker。
有关 Eclipse 平台及其工作原理的介绍性文章,请参阅 Greg Adams 和 Marc Erickson 撰写的 developerWorks 文章“Working the Eclipse Platform”。
要开始使用 Eclipse 平台开发应用程序,请参阅 David Gallardo 撰写的 developerWorks 文章“Getting started with the Eclipse Platform”。
如果对创建自己的 Eclipse 插件感兴趣,请参阅 David Gallardo 撰写的 developerWorks 文章“开发 Eclipse 插件”。
要了解一位开发人员如何集成 XM(一个基于 XML 和 XSLT 的简单内容管理和发布解决方案)和 Eclipse,请参阅 Benoit Marchal 撰写的 developerWorks 文章“Integrating XM and Eclipse”。
请参阅 W3C 联盟网站上有用的丰富 XML 参考资源。
在 SourceForge.net 下载 Transclipse 插件。
同样在 SourceForge.net 获取 Eclipse Tidy 项目。
了解 j2h(Java 至 HTML,Java to HTML)插件。
浏览 Eclipse 插件注册表。
在 developerWorks 上找到更多适合 Eclipse 用户和 XML 开发人员的参考资料。
关于作者
Pawel Leszek 是 Studio B 的作者,他是独立软件顾问和作家,擅长 Linux/Win/Mac OS 系统体系结构和管理。他对许多操作系统、编程语言和网络协议(特别是 Lotus Domino 和 DB2)有丰富经验。Pawel 还是 LinuxWorld 系列文章的作者,并且是波兰语版 PC World 的 Linux 专栏作家。Pawel 和他的妻子以及可爱的小女儿居住在华沙。欢迎您提出问题和意见;可通过 pawel.leszek@ipgate.pl 与 Pawel 联系。