XML 和 WebSphere Studio Application Developer — 第 4 部分: 研究 XML Editor

简介
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,然后按照以下步骤创建项目。

  1. 选择 Perspective =>Open =>Other =>XML以切换至 XML 视图。
  2. 选择 File =>New =>Project =>Simple =>Project 以打开 New Project 向导来创建一个简单的项目,例如, XMLProject
  3. 在项目名称域中输入 XMLProject
  4. 单击 Finish

现在,按照以下步骤将样本文件导入到项目中。

  1. 选择 File =>Import
  2. 选择 File System作为导入源。单击 Next
  3. 单击 Browse 来定位 xml-tutorial.zip 文件解压缩后所在的临时文件夹。
  4. 单击 Select All,然后单击 Finish

创建 XML 文档
要编辑 XML 文档,我们首先必须创建一个 XML 文档。创建 XML 文档有两种方法。第一种方法,也是显而易见的方法,您可以从头创建一个空白的 XML 文档。第二种方法,也是更有趣的方法,是从给定的 DTD 或 XML Schema 生成一个框架 XML 文档。我们将使用文件 University.xsd 来演示如何从 XML Schema 生成一个框架 XML 文档。

  1. 在 Navigator 视图中定位 University.xsd 文件。
  2. 在该文件图标上单击鼠标右键以调出上下文菜单。
  3. 选择 Generate =>XML File打开 New XML File 向导。
  4. 单击 Next 接受缺省文件名 University.xml
  5. 确保在 Root 元素组合框中选中了 university元素。
  6. 单击 Finish。此时会创建 University.xml 文件并且自动为您打开 XML Editor。
  7. 单击工具栏上的 Validate


    Validate 按钮图标

    查看生成的文件是否有效。

图 1. XML Editor
XML 编辑器的抓屏

编辑 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 编辑器如何利用语法规则提供受指导编辑的一个示例。

  1. 在 Source 视图中,将光标定位在 name 元素之后。
  2. Ctrl空格键调用内容辅助。请注意可用元素列表与模式中指定的 university 元素的内容模型相对应。请参见下面的清单 1。
  3. 从列表中选择 student
  4. 将光标刚好定位于 student 元素开始标记内该字符之前。
  5. 输入一个空格,然后按 Ctrl空格键调用内容辅助。请注意可用属性列表与模式中指定的 student 元素的内容模型相对应。请参见下面的图 3。
  6. 从列表中选择 id属性。
  7. 将光标定位在 student 元素的开始标记与结束标记之间。
  8. Ctrl空格键调用内容辅助。请注意可用元素列表与模式中指定的 student 元素的内容模型相对应。请参见下面的清单 2。
  9. 从列表中选择 name元素。

此时源代码看起来应该和下面的图 4 相似。

清单 1. university 元素的模式类型定义

<complexType name="University"> 
   <sequence> 
      <element name="name" type="string"></element> 
      <element name="student" type="University:Student" 
         minOccurs="0" maxOccurs="unbounded"></element> 
      <element name="misc" type="University:Misc"></element> 
   </sequence>

清单 2. student 元素的模式类型定义。

<complexType name="Student"> 
   <sequence> 
      <element name="name" type="string"></element> 
      <element name="faculty" type="University:Faculties" 
         minOccurs="0"></element> 
      <element name="major" type="string" minOccurs="0"></element> 
      <element name="minor" type="string" minOccurs="0"></element> 
   </sequence> 
   <attribute name="id" type="string" use="optional" 
      default="00000"></attribute> 
   <attribute name="type" type="University:StudentType"></attribute> 
</complexType>

图 2. 在 Source 视图中使用内容辅助
在 Source 视图中使用内容辅助

用 Design 视图编辑
单击 Design 选项卡查看 Design 视图。Design 视图呈现给用户的是一个 XML 文档的表格式树型视图。该视图分为两栏。在左边一栏中,我们可以看到 XML 文档树的元素、属性和其它节点。右边一栏用来显示与这些节点相关联的值,例如, id 属性的值为 00000 。右边一栏还用来显示与元素相关联的内容模型信息(用绿色文本显示)。

添加和编辑属性

  1. 在 id 属性旁右边一栏中单击鼠标左键。
  2. 将值 12345输入到单元格,然后按 Enter
  3. student元素上单击鼠标右键,然后选择 Add Attribute=>type
  4. 在 type 属性旁右边一栏中单击鼠标左键。
  5. 请注意在单元格右边出现的下拉菜单控制钮


    下拉菜单控制钮

  6. 单击下拉菜单控制钮。请注意这个值列表对应于在 type 元素的模式定义中所指定的枚举值。请参见下面的图 5。
  7. 从下拉列表中选择 part-time

清单 3. student 元素 type 属性的模式类型定义

<simpleType name="StudentType"> 
   <restriction base="string"> 
      <enumeration value="full-time"></enumeration> 
      <enumeration value="part-time"></enumeration> 
   </restriction> 
</simpleType>

添加元素
如果我们在树中一个元素上单击鼠标右键,将会出现含有几个编辑选项的上下文菜单。请参见下面的图 3。根据 XML 文档的状态和相关联的语法,在上下文菜单中可用的选项将会有所不同。下面是 XML 编辑器如何利用语法规则提供受指导编辑的另一个示例。

  1. student元素上单击鼠标右键。
  2. 选择 Add Child。请注意列表中可用的元素是: facultymajorminor
  3. 选择 major元素。
  4. 选择 Add Child
  5. 请注意列表中的可用元素是: facultyminor
  6. 选择 faculty元素。

请注意,在以上练习中,XML 编辑器考虑元素的当前内容和元素的语法规则(在 University.xsd 中定义)以产生一个受指导编辑选项的列表。在这里,Design 视图仅仅显示将维护 XML 文档有效性的那些选项。例如,在上面的步骤 3 中,元素 facultymajorminor 是可用的。在添加 major 元素后,我们注意到在步骤 6 中 major 不再显示为可用的子元素。这是因为语法指定 student 元素最多只能有一个 major 元素。

同样,请注意 XML 编辑器自动将子元素插入到适当的位置。在本例中, faculty 元素被插入到 major 元素之前。在有多个可以合法插入元素的位置的情况下, Add BeforeAdd After菜单选项显示为可用。

图 3. Design 视图中的上下文菜单
Design 视图中的上下文菜单的抓屏

除去元素

  1. 在 student 的 major元素上单击鼠标右键。
  2. 从弹出菜单中选择 Remove

正如我们以上所述,Design 视图仅仅提供将维护 XML 文档有效性的编辑选项。下面我们将通过尝试除去一个语法所需要的元素来演示这一点。

  1. 在 student 的 name元素上单击鼠标右键。
  2. 请注意 Remove项在弹出菜单中是不可用的。

在本例中,语法规则指定 name 元素必须作为 student 元素的第一个子元素至少出现一次。因此,除去 name 元素的选项是不可用的。

编辑方式
在上面的示例中,我们演示了 Design 视图如何仅仅显示将维护 XML 文档有效性的编辑选项。换句话说,Design 视图根据语法规则来约束编辑选项。多数情况下,这是一个有用的特性,但有时用户可能需要更大的灵活性。XML 编辑器通过允许随时打开或关闭语法约束来提供这种灵活性。

直到现在,我们已使用了语法约束打开的(缺省值)Design 视图。现在我们将演示当语法约束关闭时,Design 视图的受指导编辑是如何工作的。

  1. 单击工具栏上的 Turn grammar constraints off按钮


    turn grammar constraints off 按钮

    。现在,语法约束在 Design 视图中关闭。
  2. 在 student 的 name元素上单击鼠标右键。
  3. 从弹出菜单中选择 Remove
  4. 请注意现在已有一个错误提示添加到 student 元素


    添加到 student 元素的错误提示的抓屏

  5. 现在应该出现 Design 视图,如下面图 4 所示。

请注意尽管 name 元素是必需的,但仍可以进行 Remove 操作。关闭了语法约束之后,就允许我们编辑我们的文档以便它此时是无效的。

图 4. 带有错误提示的 Design 视图
带有错误提示的 Design 视图

错误提示和验证
当我们除去 name 元素时,有一个黄色指示符出现在 student 元素图标旁。这个指示符是错误提示。XML 编辑器自动检测许多错误,然后在适当位置提供黄色错误指示符。通常,用户会立即识别错误并确切地知道如何修正它。在本例中,因为 student 元素丢失了必需的 name 元素,所以错误提示指出它含有无效内容。现在,让我们改正那个错误。

  1. faculty元素上单击鼠标右键。
  2. 选择 Add Before =>name
  3. 按工具栏上的 Validate按钮。
  4. 请注意那个错误提示指示符已经消失了。

要获得完整的错误列表和描述性错误消息,我们将需要按如下验证整个 XML 文档。

  1. name元素上单击鼠标右键。
  2. 选择 Remove以再次引入错误。
  3. 按工具栏上的 Validate按钮


    验证按钮图标

  4. 单击按钮 OK关闭消息对话框。
  5. 查看任务列表中的错误。
  6. 注意 Design 视图中 student 元素旁的红色指示符


    元素旁红色指示符的抓屏

该红色指示符表示一个实际错误(与提示相反),其相关消息在任务列表中列出。现在,我们来修正此错误并重新验证。

  1. faculty元素上单击鼠标右键。
  2. 选择 Add Before =>name
  3. Validate工具栏按钮。
  4. 请注意任务列表现在为空白,而且错误指示符消失了。

编辑模式信息
XML 编辑器提供了用来编辑与 XML Schema 实例相关联的名称空间和模式信息的便利特性。这在编辑模式信息或添加新的名称空间和模式时通常有用。

如果转到 Design 视图并检查 misc 元素,我们会注意到元素的内容模型描述显示为绿色。请参见下面的图 5。这是显示由 Misc 类型在模式中指定的内容模型的一种简明方式。请参见下面的清单 4。

图 5. Design 视图中显示的简明内容模型描述。
Design 视图中显示的简洁的内容模型描述

清单 4. 模式中的内容模型定义( University.xsd

<complexType name="Misc"> 
   <sequence> 
      <element name="LastUpdated" type="date" minOccurs="0"></element> 
      <any namespace="##any" minOccurs="0" maxOccurs="unbounded"></any> 
   </sequence> 
</complexType>

内容模型指明 misc 元素包含一个可选的 LastUpdated 元素,该元素后跟着零或多个可以来自任一模式的“通配符”元素。要添加来自另一个模式的元素,XML 作者必须首先添加一个带有正确名称空间名称的名称空间声明,然后提供一个 schemaLocation。手工输入该信息会很辛苦而且容易出错。通过使用 Design 视图的编辑对话框,我们只需点击几下鼠标就可以完成任务!

  1. University:university元素上单击鼠标右键。
  2. 选择 Edit Schema Information
  3. 单击 New按钮。
  4. 单击 Browse定位将与该名称空间相关联的模式。
  5. 从 Select File 视图中选择文件 Misc.xsd ,然后单击 OK
  6. 请注意:根据 XML Schema 文件( Misc.xsd )中的信息自动填写 URI 和 Prefix 域。

请注意 XML 文档的源代码已经由:

<University:university
   xmlns:University="http://www.university.ibm.com"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.university.ibm.com University.xsd">

更改为以下内容,添加的部分以蓝色显示:

<University:university
   xmlns:University="http://www.university.ibm.com"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   
        
        xmlns:Misc="http://www.misc.university.com"
   xsi:schemaLocation="http://www.university.ibm.com
   University.xsd 
        
        http://www.misc.university.com Misc.xsd"
      
      

现在,要通过 Design 视图利用新的 XML Schema。

  1. misc元素上单击鼠标右键以调用上下文菜单。
  2. 选择 Add Child =>Misc:Grant
  3. 请注意现在可以将 Misc.xsd 中定义的元素添加到文档。

使用 XML Catalog
什么是 XML Catalog?描述 XML Catalog 最简单的方法是举例说明它旨在解决的问题。

问题
假如我正在开发一个最终将在 Web 上发布的 XML 文档。我在 PC 上编辑一个与下面相似的 XML 文档:

<?xml version="1.0" encoding="UTF-8"?>    
   <VendingMachine:vendingMachine    
      xmlns:VendingMachine="http://www.vending-machine.ibm.com"    
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
      xsi:schemaLocation="http://www.vending-machine.ibm.com    
         
        
        "file:///C:/project/sharedSchemas/vending-machine.xsd">    
      . 
      . 
      . 
   </VendingMachine:vendingMachine>
      
      

当我结束当天的工作时,我将该文件保存到便携式电脑,这样我可以稍后在家继续工作。吃完晚饭后,我打开便携式电脑再次开始工作。问题出现了!XML 编辑器无法找到 vending-machine 模式。快速浏览一下之后,我注意到 schemaLocation 引用系统标识 “file:///C:/project/sharedSchemas/vending-machine.xsd” 。当前,我的项目安装在 D: 驱动器上。现在我需要编辑模式位置以使它看起来如下:

xsi:schemaLocation="http://www.vending-machine.ibm.com
   
        
        "file:///D:/project/sharedSchemas/vending-machine.xsd">
      
      

几分钟后,我完成了 XML 文件的编辑,是将它发布到 Web 上的时候了。现在,我需要再次编辑 URI 以使它指向可在 Web 上访问的资源。schemaLocation 必须如下更新:

xsi:schemaLocation="http://www.vending-machine.ibm.com
   
        
        "http://www.ibm.com/published-schemas/vending-machine.xsd">
      
      

不过再等等,我还没有完成。在上班的列车上,我正在便携式电脑上复查那个 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。

  1. 选择 Window =>Preferences调用 Preferences 对话框。
  2. 单击 Project to use to persist XML Catalog User Entries旁的 Change按钮,然后选择一个项目(例如, XMLProject)。
  3. 在 User Specified Entries 中,单击 New以创建一个新的 XML Catalog Entry。
  4. 单击 Browse,然后在您的项目中找到 vending-machine.xsd 文件。
  5. 单击 Key Type域然后选择值 Schema Location
  6. 将值 http://www.ibm.com/published-schemas/vending-machine.xsd 输入到 Key 域中。现在,对话框看起来应该与下面的图 6 相似。
  7. 单击 OK关闭 New XML Catalog Entry 对话框。现在,XML Catalog 页面看起来应该与下面的图 7 相似。
  8. 单击 OK保存您更新的 XML Catalog 首选项。

图 6. 创建一个 New XML Catalog Entry
创建一个 New XML Catalog Entry

图 7. 更新的 XML Catalog
更新的 XML Catalog

现在,我们已经将一项添加到 XML Catalog 中,以便解析引用 URI “http://www.ibm.com/published-schemas/vending-machine.xsd” 的模式位置,从而使用 vending-machine.xsd 的本地副本作为替代。让我们回过头编辑 vending-machine.xml 文件。执行以下步骤,并注意 XML 编辑器如何利用 XML Catalog 来正确地解析这一模式。

  1. 在 XML 编辑器中查看 vending-machine.xml 文件。
  2. 转向 Design 视图页。
  3. 单击 Reload Dependencies按钮以使用目录设置重新装入模式。
  4. 请注意在 Design 视图右侧出现的绿色内容模型描述。
  5. 单击 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值