XML Schema(XSD)是一种用于定义 XML 文档结构和内容的语言,它是 DTD(文档类型定义)的现代化替代方案。XML Schema 提供了更强大、更灵活的数据验证机制。
XML Schema 的主要特点
- 基于 XML 的语法:Schema 本身也是 XML 文档,易于理解和处理
- 丰富的数据类型:支持字符串、整数、日期、布尔值等多种内置数据类型
- 自定义类型:可以定义复杂类型和简单类型
- 命名空间支持:原生支持 XML 命名空间
- 继承和扩展:支持类型的继承和扩展机制
- 精确的约束:可以定义元素的基数、取值范围、格式等约束
XML Schema 与 DTD 的区别
| 特性 | XML Schema | DTD |
|---|---|---|
| 语法 | 基于 XML | 独特的 DTD 语法 |
| 数据类型 | 丰富的内置类型 | 只有字符串类型 |
| 命名空间 | 原生支持 | 不支持 |
| 继承 | 支持类型继承 | 不支持 |
| 扩展性 | 可以扩展和重用 | 难以重用 |
| 验证能力 | 强大的验证能力 | 有限的验证能力 |
XML Schema 基本结构
xml<?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.com/books" xmlns="http://www.example.com/books" elementFormDefault="qualified"> <!-- 定义元素 --> <xs:element name="book" type="BookType"/> <!-- 定义复杂类型 --> <xs:complexType name="BookType"> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="author" type="xs:string"/> <xs:element name="price" type="xs:decimal"/> <xs:element name="publishDate" type="xs:date"/> </xs:sequence> <xs:attribute name="id" type="xs:string" use="required"/> </xs:complexType> </xs:schema>
常用的 Schema 元素
- element:定义 XML 元素
- complexType:定义复杂类型(包含子元素或属性)
- simpleType:定义简单类型(只包含文本内容)
- attribute:定义元素属性
- sequence:指定子元素必须按顺序出现
- choice:指定子元素中只能出现一个
- all:指定子元素可以以任意顺序出现
约束定义
xml<!-- 基数约束 --> <xs:element name="phone" minOccurs="0" maxOccurs="unbounded"/> <!-- 取值范围约束 --> <xs:simpleType name="AgeType"> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="120"/> </xs:restriction> </xs:simpleType> <!-- 模式约束 --> <xs:simpleType name="EmailType"> <xs:restriction base="xs:string"> <xs:pattern value="[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"/> </xs:restriction> </xs:simpleType> <!-- 枚举约束 --> <xs:simpleType name="GenderType"> <xs:restriction base="xs:string"> <xs:enumeration value="male"/> <xs:enumeration value="female"/> </xs:restriction> </xs:simpleType>
在 XML 文档中引用 Schema
xml<?xml version="1.0"?> <book xmlns="http://www.example.com/books" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/books books.xsd"> <title>XML Programming</title> <author>John Doe</author> <price>49.99</price> <publishDate>2024-01-15</publishDate> </book>
实际应用场景
- Web 服务中的消息格式定义(如 WSDL)
- 配置文件的结构验证
- 数据交换格式的标准化
- 文档格式的定义和验证
XML Schema 提供了强大而灵活的 XML 文档验证机制,是现代 XML 应用开发中不可或缺的工具。