简介
IBM 的 WebSphere® Studio Application Developer是一个应用程序开发产品,它支持用 JSP™、servlet、HTML、XML、Web 服务、数据库和 EJB™ 等不同的技术来构建范围广泛的应用程序。
本文是关注随 WebSphere Studio Application Developer 一起提供的 XML 工具的系列文章的第 4 部分。 第 1 部分讨论了如何使用 Application Developer 开发 XML 模式; 第 2 部分演示了如何使用 Application Developer 的 SQL Builder 创建 SQL 查询;而 第 3 部分讨论了用于在应用程序中将数据访问和 XML 合并的 Application Developer 特性。本文是这个系列的第 4 部分,它探讨了 XML 编辑器这个用来创建和编辑 XML 文档的可视化工具。通过指导您完成一个简单的教程,我将演示 XML 编辑器提供的使 XML 文档编辑更容易和更高效的一些有用特性。
入门
在开始 XML 编辑器教程以前,我们需要在 Application Developer 中创建一个项目,然后导入一些示例文件。
首先,请下载 下面提供的 xml-tutorial.zip
文件,然后将其解压缩至一个临时文件夹中,例如 C:/temp/tutorial
。
接下来,启动 Application Developer,然后按照以下步骤创建项目。
- 选择 Perspective =>Open =>Other =>XML以切换至 XML 视图。
- 选择 File =>New =>Project =>Simple =>Project 以打开 New Project 向导来创建一个简单的项目,例如,
XMLProject
。 - 在项目名称域中输入
XMLProject
。 - 单击 Finish。
现在,按照以下步骤将样本文件导入到项目中。
- 选择 File =>Import。
- 选择 File System作为导入源。单击 Next。
- 单击 Browse 来定位
xml-tutorial.zip
文件解压缩后所在的临时文件夹。 - 单击 Select All,然后单击 Finish。
创建 XML 文档
要编辑 XML 文档,我们首先必须创建一个 XML 文档。创建 XML 文档有两种方法。第一种方法,也是显而易见的方法,您可以从头创建一个空白的 XML 文档。第二种方法,也是更有趣的方法,是从给定的 DTD 或 XML Schema 生成一个框架 XML 文档。我们将使用文件 University.xsd
来演示如何从 XML Schema 生成一个框架 XML 文档。
- 在 Navigator 视图中定位
University.xsd
文件。 - 在该文件图标上单击鼠标右键以调出上下文菜单。
- 选择 Generate =>XML File打开 New XML File 向导。
- 单击 Next 接受缺省文件名
University.xml
。 - 确保在 Root 元素组合框中选中了 university元素。
- 单击 Finish。此时会创建
University.xml
文件并且自动为您打开 XML Editor。 - 单击工具栏上的 Validate 查看生成的文件是否有效。
编辑 XML 文档
XML 编辑器有四个主视图:Source 视图、Design 视图、Outline 视图和 Task 视图。Source 视图是一个可以让用户直接编辑 XML 文档源代码的文本编辑器。Design 视图将 XML 文档作为树显示,使用户能通过添加、除去和编辑树节点来操纵文档。Outline 视图提供 XML 文档的概述,这在浏览大文档时很有用。Task 视图显示可能与 XML 文档相关的错误信息。
请注意编辑器右上方窗格底部的页选项卡:
这些选项卡是用来在 XML 编辑器的 Design 视图和 Source 视图之间切换的。这些视图是同步的,因此在一个视图中所做的更改会自动在另一个视图中反映出来。
受指导编辑
XML 编辑器将利用与 XML 文档相关联的所有语法规则来提供智能编辑特性。我们将这些支持语法的编辑特性共同命名为受指导编辑。当前,XML 编辑器支持 DTD 或 XML 模式以提供受指导编辑。重要的是请注意尽管本教程利用 XML 模式,XML 编辑器同样可以与 DTD 一起良好使用。
我们将在下面演示一些受指导编辑特性。
用 Source 视图编辑
单击 Source选项卡查看 Source 视图。在提供文本编辑器的典型特性的同时,Source 视图还提供 XML 特定的功能,如内容辅助。在编辑 XML 文档时,可以调用内容辅助,以用可能的元素或属性列表提示用户。这是 XML 编辑器如何利用语法规则提供受指导编辑的一个示例。
- 在 Source 视图中,将光标定位在
name
元素之后。 - 按 Ctrl和 空格键调用内容辅助。请注意可用元素列表与模式中指定的
university
元素的内容模型相对应。请参见下面的清单 1。 - 从列表中选择 student。
- 将光标刚好定位于
student
元素开始标记内该字符之前。 - 输入一个空格,然后按 Ctrl和 空格键调用内容辅助。请注意可用属性列表与模式中指定的
student
元素的内容模型相对应。请参见下面的图 3。 - 从列表中选择 id属性。
- 将光标定位在
student
元素的开始标记与结束标记之间。 - 按 Ctrl和 空格键调用内容辅助。请注意可用元素列表与模式中指定的
student
元素的内容模型相对应。请参见下面的清单 2。 - 从列表中选择 name元素。
此时源代码看起来应该和下面的图 4 相似。
清单 1. university
元素的模式类型定义
|
清单 2. student
元素的模式类型定义。
|
用 Design 视图编辑
单击 Design 选项卡查看 Design 视图。Design 视图呈现给用户的是一个 XML 文档的表格式树型视图。该视图分为两栏。在左边一栏中,我们可以看到 XML 文档树的元素、属性和其它节点。右边一栏用来显示与这些节点相关联的值,例如, id
属性的值为 00000
。右边一栏还用来显示与元素相关联的内容模型信息(用绿色文本显示)。
- 在 id 属性旁右边一栏中单击鼠标左键。
- 将值 12345输入到单元格,然后按 Enter。
- 在 student元素上单击鼠标右键,然后选择 Add Attribute=>type。
- 在 type 属性旁右边一栏中单击鼠标左键。
- 请注意在单元格右边出现的下拉菜单控制钮 。
- 单击下拉菜单控制钮。请注意这个值列表对应于在 type 元素的模式定义中所指定的枚举值。请参见下面的图 5。
- 从下拉列表中选择 part-time。
清单 3. student
元素 type
属性的模式类型定义
|
添加元素
如果我们在树中一个元素上单击鼠标右键,将会出现含有几个编辑选项的上下文菜单。请参见下面的图 3。根据 XML 文档的状态和相关联的语法,在上下文菜单中可用的选项将会有所不同。下面是 XML 编辑器如何利用语法规则提供受指导编辑的另一个示例。
- 在 student元素上单击鼠标右键。
- 选择 Add Child。请注意列表中可用的元素是:
faculty
、major
和minor
。 - 选择 major元素。
- 选择 Add Child。
- 请注意列表中的可用元素是:
faculty
和minor
。 - 选择 faculty元素。
请注意,在以上练习中,XML 编辑器考虑元素的当前内容和元素的语法规则(在 University.xsd
中定义)以产生一个受指导编辑选项的列表。在这里,Design 视图仅仅显示将维护 XML 文档有效性的那些选项。例如,在上面的步骤 3 中,元素 faculty
、 major
和 minor
是可用的。在添加 major
元素后,我们注意到在步骤 6 中 major
不再显示为可用的子元素。这是因为语法指定 student 元素最多只能有一个 major
元素。
同样,请注意 XML 编辑器自动将子元素插入到适当的位置。在本例中, faculty
元素被插入到 major
元素之前。在有多个可以合法插入元素的位置的情况下, Add Before和 Add After菜单选项显示为可用。
- 在 student 的 major元素上单击鼠标右键。
- 从弹出菜单中选择 Remove。
正如我们以上所述,Design 视图仅仅提供将维护 XML 文档有效性的编辑选项。下面我们将通过尝试除去一个语法所需要的元素来演示这一点。
- 在 student 的 name元素上单击鼠标右键。
- 请注意 Remove项在弹出菜单中是不可用的。
在本例中,语法规则指定 name
元素必须作为 student
元素的第一个子元素至少出现一次。因此,除去 name
元素的选项是不可用的。
编辑方式
在上面的示例中,我们演示了 Design 视图如何仅仅显示将维护 XML 文档有效性的编辑选项。换句话说,Design 视图根据语法规则来约束编辑选项。多数情况下,这是一个有用的特性,但有时用户可能需要更大的灵活性。XML 编辑器通过允许随时打开或关闭语法约束来提供这种灵活性。
直到现在,我们已使用了语法约束打开的(缺省值)Design 视图。现在我们将演示当语法约束关闭时,Design 视图的受指导编辑是如何工作的。
- 单击工具栏上的 Turn grammar constraints off按钮 。现在,语法约束在 Design 视图中关闭。
- 在 student 的 name元素上单击鼠标右键。
- 从弹出菜单中选择 Remove。
- 请注意现在已有一个错误提示添加到
student
元素 。 - 现在应该出现 Design 视图,如下面图 4 所示。
请注意尽管 name
元素是必需的,但仍可以进行 Remove 操作。关闭了语法约束之后,就允许我们编辑我们的文档以便它此时是无效的。
错误提示和验证
当我们除去 name
元素时,有一个黄色指示符出现在 student
元素图标旁。这个指示符是错误提示。XML 编辑器自动检测许多错误,然后在适当位置提供黄色错误指示符。通常,用户会立即识别错误并确切地知道如何修正它。在本例中,因为 student 元素丢失了必需的 name
元素,所以错误提示指出它含有无效内容。现在,让我们改正那个错误。
- 在 faculty元素上单击鼠标右键。
- 选择 Add Before =>name。
- 按工具栏上的 Validate按钮。
- 请注意那个错误提示指示符已经消失了。
要获得完整的错误列表和描述性错误消息,我们将需要按如下验证整个 XML 文档。
- 在 name元素上单击鼠标右键。
- 选择 Remove以再次引入错误。
- 按工具栏上的 Validate按钮 。
- 单击按钮 OK关闭消息对话框。
- 查看任务列表中的错误。
- 注意 Design 视图中
student
元素旁的红色指示符 。
该红色指示符表示一个实际错误(与提示相反),其相关消息在任务列表中列出。现在,我们来修正此错误并重新验证。
- 在 faculty元素上单击鼠标右键。
- 选择 Add Before =>name。
- 按 Validate工具栏按钮。
- 请注意任务列表现在为空白,而且错误指示符消失了。
编辑模式信息
XML 编辑器提供了用来编辑与 XML Schema 实例相关联的名称空间和模式信息的便利特性。这在编辑模式信息或添加新的名称空间和模式时通常有用。
如果转到 Design 视图并检查 misc
元素,我们会注意到元素的内容模型描述显示为绿色。请参见下面的图 5。这是显示由 Misc
类型在模式中指定的内容模型的一种简明方式。请参见下面的清单 4。
清单 4. 模式中的内容模型定义( University.xsd
)
|
内容模型指明 misc
元素包含一个可选的 LastUpdated
元素,该元素后跟着零或多个可以来自任一模式的“通配符”元素。要添加来自另一个模式的元素,XML 作者必须首先添加一个带有正确名称空间名称的名称空间声明,然后提供一个 schemaLocation。手工输入该信息会很辛苦而且容易出错。通过使用 Design 视图的编辑对话框,我们只需点击几下鼠标就可以完成任务!
- 在 University:university元素上单击鼠标右键。
- 选择 Edit Schema Information。
- 单击 New按钮。
- 单击 Browse定位将与该名称空间相关联的模式。
- 从 Select File 视图中选择文件
Misc.xsd
,然后单击 OK。 - 请注意:根据 XML Schema 文件(
Misc.xsd
)中的信息自动填写 URI 和 Prefix 域。
请注意 XML 文档的源代码已经由:
|
更改为以下内容,添加的部分以蓝色显示:
|
现在,要通过 Design 视图利用新的 XML Schema。
- 在 misc元素上单击鼠标右键以调用上下文菜单。
- 选择 Add Child =>Misc:Grant。
- 请注意现在可以将
Misc.xsd
中定义的元素添加到文档。
使用 XML Catalog
什么是 XML Catalog?描述 XML Catalog 最简单的方法是举例说明它旨在解决的问题。
问题
假如我正在开发一个最终将在 Web 上发布的 XML 文档。我在 PC 上编辑一个与下面相似的 XML 文档:
|
当我结束当天的工作时,我将该文件保存到便携式电脑,这样我可以稍后在家继续工作。吃完晚饭后,我打开便携式电脑再次开始工作。问题出现了!XML 编辑器无法找到 vending-machine 模式。快速浏览一下之后,我注意到 schemaLocation 引用系统标识 “file:///C:/project/sharedSchemas/vending-machine.xsd”
。当前,我的项目安装在 D:
驱动器上。现在我需要编辑模式位置以使它看起来如下:
|
几分钟后,我完成了 XML 文件的编辑,是将它发布到 Web 上的时候了。现在,我需要再次编辑 URI 以使它指向可在 Web 上访问的资源。schemaLocation 必须如下更新:
|
不过再等等,我还没有完成。在上班的列车上,我正在便携式电脑上复查那个 XML 文档,这时我发现了一个严重错误!遗憾的是,我没有连接到因特网,所以现在我需要将 URI 改回到指向本地副本。当我到达工作地,在重新发布改正的版本之前,我需要记得更新该文档,以使用在 Web 上可访问的 URI。
到目前为止,问题应该明显了。XML 文件内使用的 URI 不象我们期望的那么可移植。为了避免对 XML 文档做频繁的更改,我们可以利用 XML Catalog。
解决方案
在解析实体引用时,由 XML 处理器使用 XML Catalog。开发人员可以为目录提供规则以明确说明应该如何解析实体。如果我们考虑以上的示例,开发人员可以指定一条重定向因特网资源引用(例如, "http://www.ibm.com/published-schemas/vending-machine.xsd"
)的规则,以便它指向开发人员本地机器上的资源(例如, "file:///C:/project/sharedSchemas/vending-machine.xsd"
)。现在,不用再频繁地编辑 XML 文档以更新 URI(特别是在项目中可能有许多文档时),我们只需要更新 XML Catalog 中的一条规则即可。
实际运行的 Catalog
现在,让我们来研究 Application Developer 中提供的 XML Catalog 支持。
在 XML 编辑器中定位并打开 vending-machine.xml
文件。请注意这个文档指定了 URI 为 “http://www.ibm.com/published-schemas/vending-machine.xsd”
的 schemaLocation。由于我们仍处在开发阶段,我们还没有在 Web 服务器上发布模式,因此上面的 URI 对于 XML 编辑器就没有很大的用处。很明显 XML 编辑器不能定位此模式。
单击 Validate并注意任务列表中的 File not found错误。
我们不再编辑 URI 以指向我们的本地副本(我们知道这种方法有问题),而是利用 XML Catalog。按照以下步骤将新的 XML Catalog Entry 添加到 XML Catalog。
- 选择 Window =>Preferences调用 Preferences 对话框。
- 单击 Project to use to persist XML Catalog User Entries旁的 Change按钮,然后选择一个项目(例如, XMLProject)。
- 在 User Specified Entries 中,单击 New以创建一个新的 XML Catalog Entry。
- 单击 Browse,然后在您的项目中找到
vending-machine.xsd
文件。 - 单击 Key Type域然后选择值 Schema Location。
- 将值
http://www.ibm.com/published-schemas/vending-machine.xsd
输入到 Key 域中。现在,对话框看起来应该与下面的图 6 相似。 - 单击 OK关闭 New XML Catalog Entry 对话框。现在,XML Catalog 页面看起来应该与下面的图 7 相似。
- 单击 OK保存您更新的 XML Catalog 首选项。
图 6. 创建一个 New XML Catalog Entry
现在,我们已经将一项添加到 XML Catalog 中,以便解析引用 URI “http://www.ibm.com/published-schemas/vending-machine.xsd”
的模式位置,从而使用 vending-machine.xsd
的本地副本作为替代。让我们回过头编辑 vending-machine.xml
文件。执行以下步骤,并注意 XML 编辑器如何利用 XML Catalog 来正确地解析这一模式。
- 在 XML 编辑器中查看
vending-machine.xml
文件。 - 转向 Design 视图页。
- 单击 Reload Dependencies按钮以使用目录设置重新装入模式。
- 请注意在 Design 视图右侧出现的绿色内容模型描述。
- 单击 Validate。文件应该验证为无错误!
结束语
本文提供了 WebSphere Studio Application Developer 所包括的 XML 编辑器的简短概述。在未来的文章里,我们希望涵盖如下高级主题:
- 从复杂 XML Schema 生成 XML 文档。
- 对 XML Schema 本地元素限定规则的支持。
- 对 XML Schema“任何元素”的支持。
- XML Catalog 深入解释。
请让我们了解您的想法。
下载Name | Size | Download method | |||||||||
xml-tutorial.zip | 3 KB | HTTP | |||||||||