编辑和验证 XML 文件样本详细信息

这些样本说明如何使用 XML 编辑器中的一些向导式编辑功能部件来编辑和验证 XML 文件。有关编辑带有 DTD 和 XML 模式约束的 XML 文件的更多信息,请参阅 XML 编辑器联机帮助。

示例 描述
anyElement

这是一个高级示例,说明如何使用 XML 模式规范中的 any 元素来扩展 XML 文档的内容模型。

编辑 PurchaseOrder.xml

说明如何在编辑 XML 文件(PurchaseOrder.xml)时使用 XML 模式文件(PurchaseOrder.xsd)来提供编辑辅助。

international 目录说明如何构建派生类型并在 XML 实例文档中使用 xsi:type 属性。

report.xsd 示例说明如何处理来自不同名称空间的多个模式。

使用替换组 显示 XML 模式如何允许命名的元素组替换其他元素。

anyElement

此样本说明如何使用 XML 模式中的 any 元素来在 XML 文档中创建可扩展内容模型。该样本分成 2 个目录:
  1. anyNamespace - 说明如何使用 ##any 名称空间
  2. specifiedNamespace - 说明如何使用特定名称空间

使用 ##any 名称空间

anyNamespace 目录下面的 Book.xsd 模式具有一个复杂类型 BookType。 BookType 的内容为 title、author、year 和 isbn,在可选情况下,还可以加上 any 元素所指示的任何良构 XML:<any namespace="##any" minOccurs="0" maxOccurs="unbounded"/>

这意味着在实例文档中,我们可插入任何 XML 元素来扩展 BookType 的定义。在此样本中,我们还具有另外两个模式:Publisher.xsd 和 Reviewer.xsd。我们将使用它们来在实例文档中扩展 BookType 的定义。注意,这两个模式是在不同的名称空间中。

BookRev.xml 通过 xsi:schemaLocation 属性与 Book.xsd 和 Reviewer.xsd 两者相关联。它说明如何使用 reviewer 元素来扩展 BookType 以便对书籍提供审核批注。
  • 在 XML 编辑器的“设计”视图中,选择 opensource:reviewer 元素。从弹出菜单中,选择添加子代 > Comment 以便对 reviewer 添加 comment。
  • 运行“验证”- 此文档是有效的,因为 reviewer 元素符合在 Reviewer.xsd 文件中定义的约束。
BookPub.xml 通过 xsi:schemaLocation 属性与 Book.xsd 和 Publisher.xsd 两者相关联。它说明如何使用 company 元素来扩展 BookType 以便对书籍提供出版商信息。
  • 在 XML 编辑器的“设计”视图中,选择 pub:company 元素。从弹出菜单中,选择除去以将其除去。
  • 运行“验证”- 此文档是有效的,因为 any 元素是可选的。

使用特定名称空间

specifiedNamespace 目录下面的 Book.xsd 模式具有一个复杂类型 BookType。BookType 的内容为 title、author、year 和 isbn,在可选情况下,还可以加上如 any 元素所指示的、属于名称空间 http://www.wesley.com 的任何良构 XML:<any namespace="http://www.wesley.com" minOccurs="0" maxOccurs="unbounded"/>

这意味着在实例文档中,只要有任何 XML 元素属于名称空间 http://www.wesley.com,我们就可以插入它们来扩展 BookType 的定义。在本示例中,Reviewer.xsd 文件属于此名称空间。

Book.xml 通过 xsi:schemaLocation 属性与 Book.xsd 和 Reviewer.xsd 两者相关联。它说明如何使用 reviewer 元素来扩展 BookType 以便对书籍提供审核批注。

对于 Book.xml,在 XML 编辑器的“设计”视图中,选择 rev:reviewer 元素。从弹出菜单中,选择添加子代 > Comment 以便对 reviewer 添加 comment。运行“验证”以确保文档是有效的。

从带有 any 元素的模式生成实例

可以使用“新建 XML”向导来创建 XML 模式的实例。如果模式包含的元素带有指定名称空间 URI,例如,specifiedNamespace 目录中 Book.xsd 的 BookType,则向导将提示您为这些名称空间输入模式位置。
  • 在“导航器”视图中,选择“specifiedNamespace”目录中的 Book.xsd 对象。右键单击 Book.xsd 并选择生成 > XML 文件以调用“新建 XML”向导。
  • 在向导的第一页上,将新文件名指定为 Book1.xml。单击下一步。
  • 您将注意到“XML 模式信息”组框中的表包含两个名称空间。第一个是对应于 Book.xsd 的名称空间。第二个是由 Book.xsd 中的 any 元素所引用的名称空间。
  • 单击完成。将显示一条消息,警告还没有为“http://www.wesley.com”指定位置。
  • 单击否。
  • 在表中选择“http://www.wesley.com”名称空间,然后单击编辑。
  • 单击浏览并从 anyElement/anyNamespace 目录中选择 Publisher.xsd 文件。
  • 您将注意到,对“http://www.wesley.com”生成了一个 company 元素,作为“http://www.ibm.com”名称空间 book 元素的子元素。

“新建 XML”向导提示您输入模式位置,正确生成内容时需要使用该模式位置。如果您重复以上步骤,但选择不对“http://www.wesley.com”名称空间输入模式位置,则将注意到生成了一个 ANY-ELEMENT 占位符元素而不是生成 company 元素。将要求您修改 ANY-ELEMENT 以包含预期元素。

对 XML 文档添加名称空间

XML 编辑器提供了一种方便的机制来对一个 XML 文档添加多个名称空间。手工添加名称空间(即,通过在“源代码”视图中输入)容易导致错误,输入模式名称空间 URI 时很容易出现拼写错误,并且也容易在模式位置属性的语法上出现错误。提供了一个有用的对话框来帮助您完成此任务。从“大纲”或“设计”视图中,可以访问“编辑名称空间”对话框来帮助您完成此任务。
  • 打开 anyElement/anyNamespace 目录下面的 BookPub.xml 文件。
  • 右键单击根元素并选择编辑名称空间菜单项。
  • 单击添加以调用对话框来输入新名称空间的信息。
  • 选择指定新的名称空间。单击浏览并找到 anyNamespace 目录下面的 Reviewer.xsd 文件。
  • 填写“前缀”和“名称空间名称”字段。
  • 单击确定,然后再次单击确定。您将注意到已添加 xmlns:openSource 属性,并且已更新 xsi:schemalocation 属性值。
  • 在添加了名称空间之后,您将注意到如果您右键单击 pub:company 元素并选择在前面添加或在后面添加弹出菜单,则可以从 Reviewer.xsd 名称空间(即 http://www.apache.com)中添加元素。

编辑 PurchaseOrder.xml

PurchaseOrder.xsd 文件提供了定义 PurchaseOrder.xml 文件内容的规则。它通过 xsi:schemaLocation 属性与 PurchaseOrder.xml 文件相关联。

出现约束

在 PurchaseOrder.xsd 中复杂类型 Item 下,item 元素具有可选的 shipDate 元素与 minOccurs=0:
		<element name="shipDate" type="date" minOccurs="0"/>

对于 PurchaseOrder.xml,在 XML 编辑器的“设计”视图中,选择 items 元素下面的第一个产品。右键单击该产品以选择添加子代 > shipDate 以便对 item 元素添加 shipDate。已添加了一个shipDate 元素,其值设置为当前日期。注意,因为已满足至多具有一个 shipDate 元素的约束,所以添加子代弹出菜单中不再具有 shipDate 选项。

如果选择 shipDate 元素并从弹出菜单中选择除去以将其除去,则将再次出现添加子代 > shipDate 选项。

枚举元素类型

在 PurchaseOrder.xsd 中,USAddress 复杂类型具有一个元素状态,其类型是简单类型 USState
		<element name="state" type="po:USState"/>
USState 简单类型是从如下带有枚举构面的字符串中派生出来的:
		<simpleType name="USState"> 
			<restriction base="string">
				<enumeration value="CA"></enumeration>
 				<enumeration value="PA"></enumeration>
				<enumeration value="AR"></enumeration>
			</restriction>
		</simpleType>

对于 PurchaseOrder.xml,在 XML 编辑器的“设计”视图中,选择 shipTo 元素下面的 state 文本字段。将出现一个列表,可在此列表中选择三个值(CA、PA 和 AR)中的一个,这些值取决于 USState 简单类型中的枚举值。

使用实例文档中的派生类型(xsi:type 属性)

ipo.xml 文件说明如何将货物发送到英国而将帐单寄到美国地址。在 ipo.xsd 中,billTo 和 shipTo 元素都被定义为 Address 类型:
		<element name="shipTo" type="ipo:Address"/>
		<element name="billTo" type="ipo:Address"/>

在 address.xsd 中,两个复杂类型 USAddress 和 UKAddress 扩展了基本类型 Address。

实例文档 ipo.xml 可以通过使用 xsi:type 属性来选择使用 Address 的不同派生项,例如 USAddress。

在 XML 编辑器的“设计”视图中,选择 shipTo 元素下面的 xsi:type 属性。注意,现在提供一个列表供您选择想要使用的 Address 类型。向导式辅助将基于在此组合框中选择的类型。

使用多个模式和名称空间

此季度报告示例说明如何处理来自不同名称空间的多个模式。它包含位于 PurchaseOrder/international 文件夹中的下列文件:address.xsd、ipo.xsd、report.xsd 和 report.xml。

随着模式变得越来越大,经常需要将模式的内容分成几个模式文档以用于各种用途,例如,简化维护、复用以及保持可读性。XML 模式定义了以下两个构造来支持此操作:include 和 import。include 元素将来自被包含模式的定义和声明引入到当前模式中。它要求被包含模式与包含模式处在同一目标名称空间中。import 元素的行为与其相似,不同的是导入的模式可来自不同的名称空间。

有关 include 和 import 的更多信息,请参阅 XML 模式编辑器联机帮助。

使用替换组

Catalogue.xsd 文件声明 Book 和 Magazine 处在 Publication 的替换组中:
		<element name="Book" type="Catalogue:BookType"
				substitutionGroup="Catalogue:Publication"/>
		<element name="Magazine" type="Catalogue:MagazineType"
				substitutionGroup="Catalogue:Publication"/>

Catalogue 的内容可以是替换组中的任何元素。在 XML 编辑器的“设计”视图中,对 Catalogue 元素选择添加子代菜单。注意 Book 和 Magazine 都可替换 Publication 元素的内容。此外,我们还将 Publication 元素声明为 abstract,以避免在实例文档中直接使用 Publication 元素。

父主题: 编辑和验证 XML 文件

反馈