XML 和 WebSphere Studio Application Developer,第 1 部分:开发 XML Schema

简介
IBM 的 WebSphere® Studio Application Developer 是一种新的应用程序开发产品,它支持用 JSP™、servlet、HTML、XML、Web 服务、数据库和 EJB 等不同的技术构建多种应用程序。本文是这个系列的第一篇文章,将关注于 Application Developer 提供的 XML 工具。本文讨论 XML Schema Editor。XML Schema Editor 是一个可视化工具,它支持构建符合“XML Schema 建议书规范(XML Schema Recommendation Specification)”(2001 年 5 月)的 XML Schema。想得到关于 XML Schema 的更多信息,请访问 W3C XML Schema网站。

创建一个简单的 XML Schema
在本节中,我们将为一所大学创建一个新的 XML Schema。要从头创建新的 Schema,请按下列步骤使用 New XML Schema 向导:

  1. 选择 Perspective => Open => Other => XML以切换到 XML 视图。
  2. 选择 File => New => Project => Simple => Project以打开 New Project 向导来创建一个简单的项目。我们可以把这个项目称为 XMLProject
  3. 选择 File => New => XML Schema以启动 New XML Schema 向导。
  4. File name 字段中输入 University.xsd
  5. 单击 Finish。此时 University.xsd 文件已经创建并且 XML Schema Editor 已经为您自动打开。

图 1. XML Schema Editor
XML Schema Editor

XML Schema Editor 有三个主视图:Outline 视图、Design 视图和 Source 视图。可以使用 Outline 视图在模式中添加、除去或重排组件。当在 Outline 视图中选择一个对象时,Design 视图会显示与该模式组件对象相关联的特性。可以使用 Design 视图输入选中对象的值。可以切换到 Source 视图直接编辑模式源代码。XML Schema Editor 还使用工作台中的 Task 视图进行错误报告。

使用 Outline 视图添加模式组件
XML Schema 规范定义了大量的组件,如 schema、complexType、simpleType、group、annotation、include、import、element 和 attribute 等等。要创建一个有效的模式,您必须理解这些组件之间的包含关系。例如,annotation 元素只能作为任一元素的第一个子元素出现。include、import 或 redefine 元素必须在模式元素的任何其它子元素之前出现。attribute 只能添加到复合类型,而不是简单类型。只能在模式级别上定义 group,但 group 可以被复合类型引用,等等。

XML Schema Editor 使您不必记住所有这些细节。您可以在 Outline 视图中通过弹出菜单添加模式组件。弹出菜单只会显示与选中的对象相关的对象列表。它还会在 XML Schema 中的正确位置添加对象。以下教程将教您一些基本方法。

图 2. 模式文件级别的弹出菜单
模式文件级别的弹出菜单

第 1 步:添加一个复合类型和一个简单类型

University.xsd 文件包含一个用来定义学生信息的复合类型 Student 和一个用来列出大学的院系的简单类型 Faculties。

  1. 在 Outline 视图中,单击 University文件对象,然后从弹出菜单中选择 Add Complex Type。这将创建一个名为 New_ComplexType1的新复合类型。在 Design 视图中,将该名称改为 Student
  2. 再次单击 University文件对象,然后选择 Add Simple Type。这将创建一个名为 New_SimpleType1的新简单类型。在 Design 视图中,将该名称改为 Faculties

第 2 步:向复合类型添加内容

学生类型中包含该学生的姓名、专业及其标识。通过完成下列步骤,我们将把该信息添加到 Student 复合类型中:

  1. 单击 Student复合类型,然后选择 Add Content Model。这将创建一个新的序列对象,在 Outline 视图中由“,”图标表示。
  2. 单击 sequence(,)对象,然后从弹出菜单中选择 Add Element。这将创建一个名为 New_Element1 的新元素。在 Design 视图中,将该元素名称改为 name。请注意此元素的类型缺省为 string
  3. 单击 sequence(,)对象,然后再次选择 Add Element以添加元素 major。在 major元素的 Design 视图中,通过选择单选按钮 User-defined simple type,将元素的类型改为简单类型 Faculties。

图 3. 将元素类型改为用户定义的简单类型
将元素类型改为用户定义的简单类型

请注意这个简单类型 Faculties 的前缀被设置为 University。这是引用此模式中类型的缺省前缀。我们将在 下面讨论目标名称空间和名称空间前缀。

  1. 单击 Student复合类型。选择 Add Attribute以添加属性 id。在 id的 Design 视图中,将 id的类型改为整数。

第 3 步:向简单类型添加枚举元素

简单类型 Faculties 是从简单类型 String 的约束派生而来,并且它的值被限制为大学的某一个院系。要定义这个列表,我们按下列方法创建枚举元素:

  1. 单击 Faculties简单类型,选择 Add Restriction。这将创建一个基本类型为 String 的新的 restriction元素。
  2. 单击 restriction对象然后选择 Add Enum。这将创建一个新的枚举元素。在 Design 视图中,将它的值改为 science
  3. 重复向简单类型 Faculties 添加枚举元素 artsdentistry

第 4 步:添加全局元素

要从这个 XML Schema 创建一个文档实例,XML Schema 必须要有一个全局元素。我们将如下添加一个全局元素 student

  1. 单击 University文件对象,然后从弹出菜单选择 Add Global Element。这将创建一个名为 New_GlobalElement1的新全局元素。在 Design 视图中,将该名称改为 student
  2. 单击 student全局元素。在 student全局元素的 Design 视图中,通过选择 User-defined complex type单选按钮将它的类型改为复合类型 Student。

完成后的模式在 Source 视图中的显示如下面的图 4 所示。

图 4. 完成后的 University.xsd 模式
完成后的 University.xsd 模式

进行更改和引用完整性
当模式变得更大、更复杂时,就会有更多的类型定义和对这些类型的引用。那么,如果在定义了一种类型并创建了十个对该类型的引用以后,当要更改该类型的名称时,会有什么发生呢?XML Schema Editor 有一个内置的引用完整性机制来自动传播这种更改,把您从这种单调乏味且容易出错的手工更新任务中解放出来。下面演示这种特性:

在我们的 University.xsd 文件中,我们已经定义了一个名为 Faculties 的简单类型。在复合类型 Student 中有一个对该类型的引用。假设我们想把这个简单类型改名为 Faculty。

  1. 切换到 Design 视图。
  2. 在 Outline 视图中选择 Faculties简单类型。在 Design 视图中将它改为 Faculty。
  3. 现在切换到 Source 视图。请注意元素 major的类型是如何自动变为 University:Faculty 的。

XML Schema Editor 的参考完整性机制不仅限于名称更改。删除模式组件时,会应用相同的规则。例如,如果删除某类型,那么所有对该类型的引用都被自动重置复位为缺省 String 数据类型。无论何时发生这种自动更新,在 Task 视图中会显示一条信息。如果您要改变主意,则始终可以撤销操作。

要注意的是,这种内置的参考完整性机制只有在 Design 视图中作更改时才会实施。如果您直接通过在 Source 视图中输入进行直接修改,那么确保正确地进行了所有更改就是您的责任了。在 Source 视图中作的任何更改都会自动在 Design 视图和 Outline 视图中反映出来。

名称空间
名称空间提供了一种标识元素或属性来源的方法。例如,两个来自不同模式的元素可能有相同的名称(比如 Product)。为了标识它们,假设 A 公司的 Product 与 B 公司的 Product 比较,则我们可以用 XML 名称空间机制来区别他们。

本节提供了关于如何在 XML Schema Editor 中为模式定义名称空间的简单介绍。在后续文章中,我们将讨论名称空间设计的全部主题,因为它涉及到创建实例文档以及通过 include、import 或 redefine 元素使用其它模式的构造。

University.xsd 模式中,目标名称空间是 http://www.ibm.com。这由模式元素中的 targetNamespace 属性指出。这意味着所有在这个模式中定义的类型都属于目标名称空间 http://www.ibm.com

模式元素中的下面这行定义了这个目标名称空间的前缀 University

xmlns:University="http://www.ibm.com"

要引用在这个模式中定义的类型,必须使用这个已被定义的前缀。参考上面图 4 中的源代码,注意元素 major和元素 student是如何如下所示引用这个类型的:

<element name="major" type="University:Faculties"/>
<element name="student" type="University:Student"/>

更改名称空间前缀和目标名称空间
如果想更改模式的名称空间前缀或者目标名称空间,可以使用 Design 视图做这件事。下面演示这一特性:

  1. 选择文件对象,也就是 University
  2. 在 Design 视图中,将 Prefix字段改为 univ。
  3. 在 Design 视图中,将 Target namespace字段改为 http://www.utoronto.ca
  4. 因为这种更改对整个文档有全局性影响,所以必须按 Apply按钮以进行全局更改。
  5. 切换到 Source 视图。您会注意到该模式元素的属性和这些类型的所有前缀都已自动更改。

XML Schema 语言构造的名称空间
正如我们可以给自己的模式中定义的类型定义前缀一样,我们也可以为 XML Schema 语言本身的词汇表关联前缀。常见的约定是通过以下声明使用前缀 xsd: 与 XML Schema 名称空间关联。

xmlns:xsd="http://www.w3.org/2001/XMLSchema

但是任何其它前缀,如 xs: 或者 foo:,将同样有效。

如果您想创建这种样式的模式,您可以到 Window => Preferences => XML => XML Schema页指定这种首选项。选择 Qualify XML Schema language constructs复选框。接受缺省的 XML Schema 语言前缀(xsd)或指定一个新的前缀。

图 5. XML Schema 首选项页
XML Schema 首选页

一旦指定了这个首选项,在您新创建的任何模式中,xsd 前缀都会出现在所有 XML Schema 语言的词汇表中,例如 xsd:complexType 和 xsd:string。下面显示一个这种模式的小片段。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ibm.com"
xmlns:University="http://www.ibm.com">

<xsd:complexType name="Student">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

验证 Schema
XML Schema Editor 的另一个有用特性是增量的验证特性。在 XML Schema 开发过程的任何时候,您都可以按 Validate按钮来验证模式。当您保存文档时,或者结束在 Source 视图中的输入时(例如切换到其它视图),验证会自动进行。任何验证错误将在 Task 视图中报告,并在 Source 视图中的相应一行和 Outline 视图中的相应对象用小的红色标记进行标识。

另外,在 Design 视图中进行更改时,请注意状态栏。它将包含对正在开发的模式中潜在错误的提示。

结束语
本文简要介绍了 WebSphere Studio Application Developer 中所包含的 XML Schema Editor。在后续文章中,我们将讨论更多高级主题,例如:

  • 从多个文档创建模式
  • 标识约束
  • 从 XML Schema 生成 Java™ bean
  • 从 XML Schema 生成 XML 文档
  • 通配符如何工作

创建一个简单的 XML Schema
在本节中,我们将为一所大学创建一个新的 XML Schema。要从头创建新的 Schema,请按下列步骤使用 New XML Schema 向导:

  1. 选择 Perspective => Open => Other => XML以切换到 XML 视图。
  2. 选择 File => New => Project => Simple => Project以打开 New Project 向导来创建一个简单的项目。我们可以把这个项目称为 XMLProject
  3. 选择 File => New => XML Schema以启动 New XML Schema 向导。
  4. File name 字段中输入 University.xsd
  5. 单击 Finish。此时 University.xsd 文件已经创建并且 XML Schema Editor 已经为您自动打开。

图 1. XML Schema Editor
XML Schema Editor

XML Schema Editor 有三个主视图:Outline 视图、Design 视图和 Source 视图。可以使用 Outline 视图在模式中添加、除去或重排组件。当在 Outline 视图中选择一个对象时,Design 视图会显示与该模式组件对象相关联的特性。可以使用 Design 视图输入选中对象的值。可以切换到 Source 视图直接编辑模式源代码。XML Schema Editor 还使用工作台中的 Task 视图进行错误报告。

使用 Outline 视图添加模式组件
XML Schema 规范定义了大量的组件,如 schema、complexType、simpleType、group、annotation、include、import、element 和 attribute 等等。要创建一个有效的模式,您必须理解这些组件之间的包含关系。例如,annotation 元素只能作为任一元素的第一个子元素出现。include、import 或 redefine 元素必须在模式元素的任何其它子元素之前出现。attribute 只能添加到复合类型,而不是简单类型。只能在模式级别上定义 group,但 group 可以被复合类型引用,等等。

XML Schema Editor 使您不必记住所有这些细节。您可以在 Outline 视图中通过弹出菜单添加模式组件。弹出菜单只会显示与选中的对象相关的对象列表。它还会在 XML Schema 中的正确位置添加对象。以下教程将教您一些基本方法。

图 2. 模式文件级别的弹出菜单
模式文件级别的弹出菜单

第 1 步:添加一个复合类型和一个简单类型

University.xsd 文件包含一个用来定义学生信息的复合类型 Student 和一个用来列出大学的院系的简单类型 Faculties。

  1. 在 Outline 视图中,单击 University文件对象,然后从弹出菜单中选择 Add Complex Type。这将创建一个名为 New_ComplexType1的新复合类型。在 Design 视图中,将该名称改为 Student
  2. 再次单击 University文件对象,然后选择 Add Simple Type。这将创建一个名为 New_SimpleType1的新简单类型。在 Design 视图中,将该名称改为 Faculties

第 2 步:向复合类型添加内容

学生类型中包含该学生的姓名、专业及其标识。通过完成下列步骤,我们将把该信息添加到 Student 复合类型中:

  1. 单击 Student复合类型,然后选择 Add Content Model。这将创建一个新的序列对象,在 Outline 视图中由“,”图标表示。
  2. 单击 sequence(,)对象,然后从弹出菜单中选择 Add Element。这将创建一个名为 New_Element1 的新元素。在 Design 视图中,将该元素名称改为 name。请注意此元素的类型缺省为 string
  3. 单击 sequence(,)对象,然后再次选择 Add Element以添加元素 major。在 major元素的 Design 视图中,通过选择单选按钮 User-defined simple type,将元素的类型改为简单类型 Faculties。

图 3. 将元素类型改为用户定义的简单类型
将元素类型改为用户定义的简单类型

请注意这个简单类型 Faculties 的前缀被设置为 University。这是引用此模式中类型的缺省前缀。我们将在 下面讨论目标名称空间和名称空间前缀。

  1. 单击 Student复合类型。选择 Add Attribute以添加属性 id。在 id的 Design 视图中,将 id的类型改为整数。

第 3 步:向简单类型添加枚举元素

简单类型 Faculties 是从简单类型 String 的约束派生而来,并且它的值被限制为大学的某一个院系。要定义这个列表,我们按下列方法创建枚举元素:

  1. 单击 Faculties简单类型,选择 Add Restriction。这将创建一个基本类型为 String 的新的 restriction元素。
  2. 单击 restriction对象然后选择 Add Enum。这将创建一个新的枚举元素。在 Design 视图中,将它的值改为 science
  3. 重复向简单类型 Faculties 添加枚举元素 artsdentistry

第 4 步:添加全局元素

要从这个 XML Schema 创建一个文档实例,XML Schema 必须要有一个全局元素。我们将如下添加一个全局元素 student

  1. 单击 University文件对象,然后从弹出菜单选择 Add Global Element。这将创建一个名为 New_GlobalElement1的新全局元素。在 Design 视图中,将该名称改为 student
  2. 单击 student全局元素。在 student全局元素的 Design 视图中,通过选择 User-defined complex type单选按钮将它的类型改为复合类型 Student。

完成后的模式在 Source 视图中的显示如下面的图 4 所示。

图 4. 完成后的 University.xsd 模式
完成后的 University.xsd 模式

进行更改和引用完整性
当模式变得更大、更复杂时,就会有更多的类型定义和对这些类型的引用。那么,如果在定义了一种类型并创建了十个对该类型的引用以后,当要更改该类型的名称时,会有什么发生呢?XML Schema Editor 有一个内置的引用完整性机制来自动传播这种更改,把您从这种单调乏味且容易出错的手工更新任务中解放出来。下面演示这种特性:

在我们的 University.xsd 文件中,我们已经定义了一个名为 Faculties 的简单类型。在复合类型 Student 中有一个对该类型的引用。假设我们想把这个简单类型改名为 Faculty。

  1. 切换到 Design 视图。
  2. 在 Outline 视图中选择 Faculties简单类型。在 Design 视图中将它改为 Faculty。
  3. 现在切换到 Source 视图。请注意元素 major的类型是如何自动变为 University:Faculty 的。

XML Schema Editor 的参考完整性机制不仅限于名称更改。删除模式组件时,会应用相同的规则。例如,如果删除某类型,那么所有对该类型的引用都被自动重置复位为缺省 String 数据类型。无论何时发生这种自动更新,在 Task 视图中会显示一条信息。如果您要改变主意,则始终可以撤销操作。

要注意的是,这种内置的参考完整性机制只有在 Design 视图中作更改时才会实施。如果您直接通过在 Source 视图中输入进行直接修改,那么确保正确地进行了所有更改就是您的责任了。在 Source 视图中作的任何更改都会自动在 Design 视图和 Outline 视图中反映出来。

名称空间
名称空间提供了一种标识元素或属性来源的方法。例如,两个来自不同模式的元素可能有相同的名称(比如 Product)。为了标识它们,假设 A 公司的 Product 与 B 公司的 Product 比较,则我们可以用 XML 名称空间机制来区别他们。

本节提供了关于如何在 XML Schema Editor 中为模式定义名称空间的简单介绍。在后续文章中,我们将讨论名称空间设计的全部主题,因为它涉及到创建实例文档以及通过 include、import 或 redefine 元素使用其它模式的构造。

University.xsd 模式中,目标名称空间是 http://www.ibm.com。这由模式元素中的 targetNamespace 属性指出。这意味着所有在这个模式中定义的类型都属于目标名称空间 http://www.ibm.com

模式元素中的下面这行定义了这个目标名称空间的前缀 University

xmlns:University="http://www.ibm.com"

要引用在这个模式中定义的类型,必须使用这个已被定义的前缀。参考上面图 4 中的源代码,注意元素 major和元素 student是如何如下所示引用这个类型的:

<element name="major" type="University:Faculties"/>
<element name="student" type="University:Student"/>

更改名称空间前缀和目标名称空间
如果想更改模式的名称空间前缀或者目标名称空间,可以使用 Design 视图做这件事。下面演示这一特性:

  1. 选择文件对象,也就是 University
  2. 在 Design 视图中,将 Prefix字段改为 univ。
  3. 在 Design 视图中,将 Target namespace字段改为 http://www.utoronto.ca
  4. 因为这种更改对整个文档有全局性影响,所以必须按 Apply按钮以进行全局更改。
  5. 切换到 Source 视图。您会注意到该模式元素的属性和这些类型的所有前缀都已自动更改。

XML Schema 语言构造的名称空间
正如我们可以给自己的模式中定义的类型定义前缀一样,我们也可以为 XML Schema 语言本身的词汇表关联前缀。常见的约定是通过以下声明使用前缀 xsd: 与 XML Schema 名称空间关联。

xmlns:xsd="http://www.w3.org/2001/XMLSchema

但是任何其它前缀,如 xs: 或者 foo:,将同样有效。

如果您想创建这种样式的模式,您可以到 Window => Preferences => XML => XML Schema页指定这种首选项。选择 Qualify XML Schema language constructs复选框。接受缺省的 XML Schema 语言前缀(xsd)或指定一个新的前缀。

图 5. XML Schema 首选项页
XML Schema 首选页

一旦指定了这个首选项,在您新创建的任何模式中,xsd 前缀都会出现在所有 XML Schema 语言的词汇表中,例如 xsd:complexType 和 xsd:string。下面显示一个这种模式的小片段。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ibm.com"
xmlns:University="http://www.ibm.com">

<xsd:complexType name="Student">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

验证 Schema
XML Schema Editor 的另一个有用特性是增量的验证特性。在 XML Schema 开发过程的任何时候,您都可以按 Validate按钮来验证模式。当您保存文档时,或者结束在 Source 视图中的输入时(例如切换到其它视图),验证会自动进行。任何验证错误将在 Task 视图中报告,并在 Source 视图中的相应一行和 Outline 视图中的相应对象用小的红色标记进行标识。

另外,在 Design 视图中进行更改时,请注意状态栏。它将包含对正在开发的模式中潜在错误的提示。

结束语
本文简要介绍了 WebSphere Studio Application Developer 中所包含的 XML Schema Editor。在后续文章中,我们将讨论更多高级主题,例如:

  • 从多个文档创建模式
  • 标识约束
  • 从 XML Schema 生成 Java™ bean
  • 从 XML Schema 生成 XML 文档
  • 通配符如何工作

创建一个简单的 XML Schema
在本节中,我们将为一所大学创建一个新的 XML Schema。要从头创建新的 Schema,请按下列步骤使用 New XML Schema 向导:

  1. 选择 Perspective => Open => Other => XML以切换到 XML 视图。
  2. 选择 File => New => Project => Simple => Project以打开 New Project 向导来创建一个简单的项目。我们可以把这个项目称为 XMLProject
  3. 选择 File => New => XML Schema以启动 New XML Schema 向导。
  4. File name 字段中输入 University.xsd
  5. 单击 Finish。此时 University.xsd 文件已经创建并且 XML Schema Editor 已经为您自动打开。

图 1. XML Schema Editor
XML Schema Editor

XML Schema Editor 有三个主视图:Outline 视图、Design 视图和 Source 视图。可以使用 Outline 视图在模式中添加、除去或重排组件。当在 Outline 视图中选择一个对象时,Design 视图会显示与该模式组件对象相关联的特性。可以使用 Design 视图输入选中对象的值。可以切换到 Source 视图直接编辑模式源代码。XML Schema Editor 还使用工作台中的 Task 视图进行错误报告。

使用 Outline 视图添加模式组件
XML Schema 规范定义了大量的组件,如 schema、complexType、simpleType、group、annotation、include、import、element 和 attribute 等等。要创建一个有效的模式,您必须理解这些组件之间的包含关系。例如,annotation 元素只能作为任一元素的第一个子元素出现。include、import 或 redefine 元素必须在模式元素的任何其它子元素之前出现。attribute 只能添加到复合类型,而不是简单类型。只能在模式级别上定义 group,但 group 可以被复合类型引用,等等。

XML Schema Editor 使您不必记住所有这些细节。您可以在 Outline 视图中通过弹出菜单添加模式组件。弹出菜单只会显示与选中的对象相关的对象列表。它还会在 XML Schema 中的正确位置添加对象。以下教程将教您一些基本方法。

图 2. 模式文件级别的弹出菜单
模式文件级别的弹出菜单

第 1 步:添加一个复合类型和一个简单类型

University.xsd 文件包含一个用来定义学生信息的复合类型 Student 和一个用来列出大学的院系的简单类型 Faculties。

  1. 在 Outline 视图中,单击 University文件对象,然后从弹出菜单中选择 Add Complex Type。这将创建一个名为 New_ComplexType1的新复合类型。在 Design 视图中,将该名称改为 Student
  2. 再次单击 University文件对象,然后选择 Add Simple Type。这将创建一个名为 New_SimpleType1的新简单类型。在 Design 视图中,将该名称改为 Faculties

第 2 步:向复合类型添加内容

学生类型中包含该学生的姓名、专业及其标识。通过完成下列步骤,我们将把该信息添加到 Student 复合类型中:

  1. 单击 Student复合类型,然后选择 Add Content Model。这将创建一个新的序列对象,在 Outline 视图中由“,”图标表示。
  2. 单击 sequence(,)对象,然后从弹出菜单中选择 Add Element。这将创建一个名为 New_Element1 的新元素。在 Design 视图中,将该元素名称改为 name。请注意此元素的类型缺省为 string
  3. 单击 sequence(,)对象,然后再次选择 Add Element以添加元素 major。在 major元素的 Design 视图中,通过选择单选按钮 User-defined simple type,将元素的类型改为简单类型 Faculties。

图 3. 将元素类型改为用户定义的简单类型
将元素类型改为用户定义的简单类型

请注意这个简单类型 Faculties 的前缀被设置为 University。这是引用此模式中类型的缺省前缀。我们将在 下面讨论目标名称空间和名称空间前缀。

  1. 单击 Student复合类型。选择 Add Attribute以添加属性 id。在 id的 Design 视图中,将 id的类型改为整数。

第 3 步:向简单类型添加枚举元素

简单类型 Faculties 是从简单类型 String 的约束派生而来,并且它的值被限制为大学的某一个院系。要定义这个列表,我们按下列方法创建枚举元素:

  1. 单击 Faculties简单类型,选择 Add Restriction。这将创建一个基本类型为 String 的新的 restriction元素。
  2. 单击 restriction对象然后选择 Add Enum。这将创建一个新的枚举元素。在 Design 视图中,将它的值改为 science
  3. 重复向简单类型 Faculties 添加枚举元素 artsdentistry

第 4 步:添加全局元素

要从这个 XML Schema 创建一个文档实例,XML Schema 必须要有一个全局元素。我们将如下添加一个全局元素 student

  1. 单击 University文件对象,然后从弹出菜单选择 Add Global Element。这将创建一个名为 New_GlobalElement1的新全局元素。在 Design 视图中,将该名称改为 student
  2. 单击 student全局元素。在 student全局元素的 Design 视图中,通过选择 User-defined complex type单选按钮将它的类型改为复合类型 Student。

完成后的模式在 Source 视图中的显示如下面的图 4 所示。

图 4. 完成后的 University.xsd 模式
完成后的 University.xsd 模式

进行更改和引用完整性
当模式变得更大、更复杂时,就会有更多的类型定义和对这些类型的引用。那么,如果在定义了一种类型并创建了十个对该类型的引用以后,当要更改该类型的名称时,会有什么发生呢?XML Schema Editor 有一个内置的引用完整性机制来自动传播这种更改,把您从这种单调乏味且容易出错的手工更新任务中解放出来。下面演示这种特性:

在我们的 University.xsd 文件中,我们已经定义了一个名为 Faculties 的简单类型。在复合类型 Student 中有一个对该类型的引用。假设我们想把这个简单类型改名为 Faculty。

  1. 切换到 Design 视图。
  2. 在 Outline 视图中选择 Faculties简单类型。在 Design 视图中将它改为 Faculty。
  3. 现在切换到 Source 视图。请注意元素 major的类型是如何自动变为 University:Faculty 的。

XML Schema Editor 的参考完整性机制不仅限于名称更改。删除模式组件时,会应用相同的规则。例如,如果删除某类型,那么所有对该类型的引用都被自动重置复位为缺省 String 数据类型。无论何时发生这种自动更新,在 Task 视图中会显示一条信息。如果您要改变主意,则始终可以撤销操作。

要注意的是,这种内置的参考完整性机制只有在 Design 视图中作更改时才会实施。如果您直接通过在 Source 视图中输入进行直接修改,那么确保正确地进行了所有更改就是您的责任了。在 Source 视图中作的任何更改都会自动在 Design 视图和 Outline 视图中反映出来。

名称空间
名称空间提供了一种标识元素或属性来源的方法。例如,两个来自不同模式的元素可能有相同的名称(比如 Product)。为了标识它们,假设 A 公司的 Product 与 B 公司的 Product 比较,则我们可以用 XML 名称空间机制来区别他们。

本节提供了关于如何在 XML Schema Editor 中为模式定义名称空间的简单介绍。在后续文章中,我们将讨论名称空间设计的全部主题,因为它涉及到创建实例文档以及通过 include、import 或 redefine 元素使用其它模式的构造。

University.xsd 模式中,目标名称空间是 http://www.ibm.com。这由模式元素中的 targetNamespace 属性指出。这意味着所有在这个模式中定义的类型都属于目标名称空间 http://www.ibm.com

模式元素中的下面这行定义了这个目标名称空间的前缀 University

xmlns:University="http://www.ibm.com"

要引用在这个模式中定义的类型,必须使用这个已被定义的前缀。参考上面图 4 中的源代码,注意元素 major和元素 student是如何如下所示引用这个类型的:

<element name="major" type="University:Faculties"/>
<element name="student" type="University:Student"/>

更改名称空间前缀和目标名称空间
如果想更改模式的名称空间前缀或者目标名称空间,可以使用 Design 视图做这件事。下面演示这一特性:

  1. 选择文件对象,也就是 University
  2. 在 Design 视图中,将 Prefix字段改为 univ。
  3. 在 Design 视图中,将 Target namespace字段改为 http://www.utoronto.ca
  4. 因为这种更改对整个文档有全局性影响,所以必须按 Apply按钮以进行全局更改。
  5. 切换到 Source 视图。您会注意到该模式元素的属性和这些类型的所有前缀都已自动更改。

XML Schema 语言构造的名称空间
正如我们可以给自己的模式中定义的类型定义前缀一样,我们也可以为 XML Schema 语言本身的词汇表关联前缀。常见的约定是通过以下声明使用前缀 xsd: 与 XML Schema 名称空间关联。

xmlns:xsd="http://www.w3.org/2001/XMLSchema

但是任何其它前缀,如 xs: 或者 foo:,将同样有效。

如果您想创建这种样式的模式,您可以到 Window => Preferences => XML => XML Schema页指定这种首选项。选择 Qualify XML Schema language constructs复选框。接受缺省的 XML Schema 语言前缀(xsd)或指定一个新的前缀。

图 5. XML Schema 首选项页
XML Schema 首选页

一旦指定了这个首选项,在您新创建的任何模式中,xsd 前缀都会出现在所有 XML Schema 语言的词汇表中,例如 xsd:complexType 和 xsd:string。下面显示一个这种模式的小片段。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ibm.com"
xmlns:University="http://www.ibm.com">

<xsd:complexType name="Student">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"></xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

验证 Schema
XML Schema Editor 的另一个有用特性是增量的验证特性。在 XML Schema 开发过程的任何时候,您都可以按 Validate按钮来验证模式。当您保存文档时,或者结束在 Source 视图中的输入时(例如切换到其它视图),验证会自动进行。任何验证错误将在 Task 视图中报告,并在 Source 视图中的相应一行和 Outline 视图中的相应对象用小的红色标记进行标识。

另外,在 Design 视图中进行更改时,请注意状态栏。它将包含对正在开发的模式中潜在错误的提示。

结束语
本文简要介绍了 WebSphere Studio Application Developer 中所包含的 XML Schema Editor。在后续文章中,我们将讨论更多高级主题,例如:

  • 从多个文档创建模式
  • 标识约束
  • 从 XML Schema 生成 Java™ bean
  • 从 XML Schema 生成 XML 文档
  • 通配符如何工作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值