Skip to content

XML Schema

XML Schema,通常被称为 XSD (XML Schema Definition),是用于定义 XML 文档的结构、内容和数据类型的现代标准。它与 DTDs 有类似的目的,但提供了显著更多的功能和灵活性。

回顾:语法正确的 XML 文档是“格式良好 (Well-Formed)”的。而格式良好并且符合其关联 XSD 中定义的规则的 XML 文档被认为是“有效 (Valid)”的。

XML Schema 提供了一种基于 XML 的语法来描述 XML 文档的结构。

定义简单 ‘note’ 结构的 XSD 示例片段:

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
<xs:element name="priority" type="xs:integer" minOccurs="0"/> <!-- Optional element -->
</xs:sequence>
<xs:attribute name="date" type="xs:date" use="required"/> <!-- Required attribute -->
</xs:complexType>
</xs:element>
</xs:schema>

示例中的要点:

  • <xs:schema ...>: 定义模式的开始,将 xs 前缀关联到官方的 XML Schema 命名空间。
  • <xs:element name="note">: 定义一个名为 note 的元素。
  • <xs:complexType>: 指示 note 元素包含其他元素或属性。
  • <xs:sequence>: 指定子元素(to、from 等)必须按特定顺序出现。
  • <xs:element name="..." type="xs:string"/>: 定义 to、from 等子元素,指定它们应包含字符串数据(xs:string 是内置的 XSD 数据类型)。
  • <xs:element name="priority" ... minOccurs="0"/>: 定义一个可选的整数元素 priority。
  • <xs:attribute name="date" ... use="required"/>: 定义一个强制的属性 date,其数据类型为 xs:date。
  • 基于 XML 的语法: Schema 本身是用 XML 编写的,可以使用标准的 XML 工具进行解析和操作。
  • 丰富的数据类型: 支持广泛的内置数据类型(字符串、数字、日期、布尔值等),并允许定义自定义类型。
  • 命名空间支持: 与 XML 命名空间完全集成,这对于模块化和避免命名冲突至关重要。
  • 可扩展性: Schema 可以导入或包含其他 Schema,促进了可重用性和模块化设计。
  • 高级约束: 允许定义复杂的规则,如基数(最小/最大出现次数)、值范围、模式(正则表达式)、唯一性约束等。
  • 数据验证: 确保输入或输出的 XML 数据严格遵守预定义的格式和数据类型,防止错误。
  • 契约定义: 为系统或组织之间的数据交换提供清晰、机器可读的契约。
  • 工具支持: 在许多 IDE 和框架中,能够实现代码生成、自动化文档和增强的编辑器支持(例如,自动完成、验证)。
  • 提高互操作性: 当不同方就同一 Schema 达成一致时,有助于实现可靠的通信。
  • 内容描述: 作为 XML 文档中预期结构和数据类型的自文档。

强数据类型是 XSD 的一个主要优势:

  • 精确内容描述: 准确定义元素应包含文本、数字、日期等。
  • 细粒度限制: 定义约束,如最小值/最大值、字符串长度限制或使用正则表达式的特定格式。
  • 强大的验证: 自动检查数据是否符合其预期类型和约束(例如,确保 <age> 元素包含有效的非负整数)。
  • 简化数据转换: 有助于将 XML 数据可靠地转换为编程语言类型或数据库字段。

由于 XSD 本身就是 XML 文档:

  • 无需新语言: 您主要使用您已经熟悉的 XML 语法规则。
  • 标准工具: 可以使用任何 XML 编辑器或解析器来处理 Schema 文件。
  • 程序化操作: 可以使用标准的 XML API,如 DOM 或 SAX,来处理 Schema。
  • 转换: 应用 XSLT 来转换 Schema(例如,生成文档)。

要更深入地了解如何使用 XSD 定义结构,请查阅全面的 XML Schema 教程和官方的 W3C 规范。