XML Schema
XML Schema (XSD)
Section titled “XML Schema (XSD)”XML Schema,通常被称为 XSD (XML Schema Definition),是用于定义 XML 文档的结构、内容和数据类型的现代标准。它与 DTDs 有类似的目的,但提供了显著更多的功能和灵活性。
回顾:语法正确的 XML 文档是“格式良好 (Well-Formed)”的。而格式良好并且符合其关联 XSD 中定义的规则的 XML 文档被认为是“有效 (Valid)”的。
XSD:DTD 的继任者
Section titled “XSD:DTD 的继任者”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 相较于 DTD 的优势
Section titled “XML Schema 相较于 DTD 的优势”- 基于 XML 的语法: Schema 本身是用 XML 编写的,可以使用标准的 XML 工具进行解析和操作。
- 丰富的数据类型: 支持广泛的内置数据类型(字符串、数字、日期、布尔值等),并允许定义自定义类型。
- 命名空间支持: 与 XML 命名空间完全集成,这对于模块化和避免命名冲突至关重要。
- 可扩展性: Schema 可以导入或包含其他 Schema,促进了可重用性和模块化设计。
- 高级约束: 允许定义复杂的规则,如基数(最小/最大出现次数)、值范围、模式(正则表达式)、唯一性约束等。
为何使用 XML Schema?
Section titled “为何使用 XML Schema?”- 数据验证: 确保输入或输出的 XML 数据严格遵守预定义的格式和数据类型,防止错误。
- 契约定义: 为系统或组织之间的数据交换提供清晰、机器可读的契约。
- 工具支持: 在许多 IDE 和框架中,能够实现代码生成、自动化文档和增强的编辑器支持(例如,自动完成、验证)。
- 提高互操作性: 当不同方就同一 Schema 达成一致时,有助于实现可靠的通信。
- 内容描述: 作为 XML 文档中预期结构和数据类型的自文档。
数据类型的力量
Section titled “数据类型的力量”强数据类型是 XSD 的一个主要优势:
- 精确内容描述: 准确定义元素应包含文本、数字、日期等。
- 细粒度限制: 定义约束,如最小值/最大值、字符串长度限制或使用正则表达式的特定格式。
- 强大的验证: 自动检查数据是否符合其预期类型和约束(例如,确保
<age>元素包含有效的非负整数)。 - 简化数据转换: 有助于将 XML 数据可靠地转换为编程语言类型或数据库字段。
利用 XML 语法
Section titled “利用 XML 语法”由于 XSD 本身就是 XML 文档:
- 无需新语言: 您主要使用您已经熟悉的 XML 语法规则。
- 标准工具: 可以使用任何 XML 编辑器或解析器来处理 Schema 文件。
- 程序化操作: 可以使用标准的 XML API,如 DOM 或 SAX,来处理 Schema。
- 转换: 应用 XSLT 来转换 Schema(例如,生成文档)。
要更深入地了解如何使用 XSD 定义结构,请查阅全面的 XML Schema 教程和官方的 W3C 规范。