这些样本说明如何使用 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 模式如何允许命名的元素组替换其他元素。 |
使用 ##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 的定义。注意,这两个模式是在不同的名称空间中。
使用特定名称空间
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 元素。从弹出菜单中,选择
以便对 reviewer 添加 comment。运行“验证”以确保文档是有效的。从带有 any 元素的模式生成实例
“新建 XML”向导提示您输入模式位置,正确生成内容时需要使用该模式位置。如果您重复以上步骤,但选择不对“http://www.wesley.com”名称空间输入模式位置,则将注意到生成了一个 ANY-ELEMENT 占位符元素而不是生成 company 元素。将要求您修改 ANY-ELEMENT 以包含预期元素。
对 XML 文档添加名称空间
PurchaseOrder.xsd 文件提供了定义 PurchaseOrder.xml 文件内容的规则。它通过 xsi:schemaLocation 属性与 PurchaseOrder.xml 文件相关联。
出现约束
<element name="shipDate" type="date" minOccurs="0"/>
对于 PurchaseOrder.xml,在 XML 编辑器的“设计”视图中,选择 items 元素下面的第一个产品。右键单击该产品以选择添加子代弹出菜单中不再具有 shipDate 选项。
以便对 item 元素添加 shipDate。已添加了一个shipDate 元素,其值设置为当前日期。注意,因为已满足至多具有一个 shipDate 元素的约束,所以如果选择 shipDate 元素并从弹出菜单中选择除去以将其除去,则将再次出现 选项。
枚举元素类型
<element name="state" type="po: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 属性)
<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 模式编辑器联机帮助。
<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 元素。