站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Eclipse 专题用 Eclipse 进行 XML 开发

用 Eclipse 进行 XML 开发

摘要: 本文概述了 Eclipse 平台如何支持 XML(可扩展标记语言,Extensible Markup Language)开发。Eclipse 并不直接支持 XML 代码编辑。然而,因为 Eclipse 是一个用于构建开发人员工具的与平台无关的框架,因此可以相对容易地添加对新语言的支持。

已经开发出了许多 XML 插件,新的插件也不断得以创建。本文主要讨论名为 XMLBuddy 的插件,因为它丰富的功能集合包含 XML 文档开发所需的大多数功能。我们也会提到其它插件,这些插件能为特定任务提供更丰富的用户选项集。本文将使您熟悉基本的 XML 编辑功能,但要记住:Eclipse 是一个可以让无数工具和功能为您所用的动态框架集。

Eclipse XML 编辑器

Eclipse 已经包括一个非常简单的 XML 编辑器的源代码,这个编辑器只提供 XML 语法的突出显示。它继承 org.eclipse.ui.editors 包中包括的类,这个包为 Eclipse 平台提供一个标准文本编辑器和基于文件的文档提供程序。这个简单的 XML 编辑器起着代码示例的作用,您可以把它作为自己的 Eclipse XML 插件的基础。它的源代码只能通过 Eclipse 项目向导生成,您需要按下面所描述的自己编译它。

要构建这个基本 XML 编辑器,转至菜单 File => New,然后选择 Project。在项目向导中,选择 Plug-in Development => Plug-in Project

如果看不到 Plug-in Development 选项,则表示 Eclipse 平台 Runtime Binary 没有 Plug-in 开发环境。请到 eclipse.org 下载页面(请参阅本文后面的 参考资料以获得链接)下载 Eclipse 平台 Plug-in SDK。

单击 Next。给项目命名(如 org.my.eclipse.xmleditor ),单击 Next,然后接受屏幕 Plug-in Project Structure上的缺省值。接下来选择 Create a plug-in project using a code generation向导,然后选择 Plug-in with an editor选项。向导会自动生成该 XML 编辑器的源代码。

但仍需编译它。单击 Next,然后在下一屏幕 Simple Plug-in Content上单击 Finish选项;转至 Project 菜单并选择 Rebuild All来构建该项目。

接下来需要使用 File => Export 菜单创建 editor.jar 文件。请退出 Eclipse,然后复制整个 org.my.eclipse.xmleditor plugin 目录。当您再次运行 Eclipse 时,可将一个 XML 文件添加到您的项目中,了解 XML 语法突出显示是如何工作的(请参阅 图 1)。请记住这个样本 XML 编辑器未提供任何一种验证或语法检查。



<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

用 XMLBuddy 编写 XML


最受欢迎且最高级的 Eclipse XML 编辑器插件是由 Bocaloco Software 开发的 XMLBuddy(请参阅 参考资料以获得链接)。XMLBuddy 是免费插件,它为 Eclipse 增添了 XML 编辑能力,其中包括对用户可配置的语法着色、DTD 驱动的代码辅助、验证以及同步的提纲视图。XML Buddy 还为 Workspace 添加 XML 透视图,为 XML 文档和 DTD 添加新的项目模板。您可以象安装任何其它 Eclipse 插件那样安装 XMLBuddy:只需将插件压缩文件解压缩至主 Eclipse 安装目录下的 \eclipse\plugins 子目录即可。记住要重新启动 Eclipse。 图 2显示操作中的 XMLBuddy。


XML 是元标记语言。XML 元素由起始标记、结束标记和二者之间的数据组成,因此有了语法突出显示还需要好的编辑功能。XMLBuddy(目前是版本 0.2)用以下 XML 编辑功能扩展 Eclipse:



<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

验证 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显示了如何设置全局字符编码。



<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

DTD vs. XML Schema

XML Schema 指定 XML Schema 定义语言,该语言提供了描述 XML 1.0 文档结构和限制其内容的工具,其中包括那些利用 XML Namespace 的工具。模式语言自身用 XML 1.0 表示并使用名称空间,它在很大程度上重构了 XML 1.0 DTD 具有的能力,并在一定程度上扩展了这些能力。请记住 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 的模式的标准方法。


XML Infoset Browser 的必要补充是 IBM XML Schema Quality Checker,简称 SQC(请参阅 图 5和 参考资料以获得链接)。SQC 是 Java 程序,它获取以 W3C XML 模式语言编写的 XML Schema 作为输入,然后诊断 Schema 语言不正确的使用。SQC 读取符合最新 XML Schema 规范的 Schema,并尝试确定它们在应用于 Schema 的各种约束下是否有效。当 SQC 遇到不符合规范的元素时,它给出诊断消息,其中可能包含关于如何修正问题的建议。对于由许多 Schema 文档(这些文档间通过 元素信息项连接)组成的 Schema,执行完整的 Schema 检查。SQC 还可以以批处理方式运行,通过一次运行检查多个 XML 模式。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

其它 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 插件注册表以获得更多信息(请参阅 参考资料)。


<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>


<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>

关于作者<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td colspan="3"></td></tr><tr align="left" valign="top"><td>

</td><td></td><td width="100%">

Pawel Leszek 是 Studio B的作者,他是独立软件顾问和作家,擅长 Linux/Win/Mac OS 系统体系结构和管理。他对许多操作系统、编程语言和网络协议(特别是 Lotus Domino 和 DB2)有丰富经验。Pawel 还是 LinuxWorld系列文章的作者,并且是波兰语版 PC World的 Linux 专栏作家。Pawel 和他的妻子以及可爱的小女儿居住在华沙。欢迎您提出问题和意见;可通过 pawel.leszek@ipgate.pl与 Pawel 联系。

</td></tr></table>

<table border="0" cellspacing="0" cellpadding="0" width="100%"><tr><td>
</td></tr></table><table class="no-print" cellspacing="0" cellpadding="0" align="right"><tr align="right"><td>
<table border="0" cellpadding="0" cellspacing="0"><tr><td valign="middle">
</td><td valign="top" align="right"></td></tr></table></td></tr></table>


↑返回目录
前一篇: 扩展 Eclipse 的 Java 开发工具
后一篇: 将 JUnit 插件集成到 WebSphere Studio 中