乐闻世界logo
搜索文章和话题

什么是 XML Schema,它与 DTD 有什么区别?

2月21日 14:23

XML Schema(XSD)是一种用于定义 XML 文档结构和内容的语言,它是 DTD(文档类型定义)的现代化替代方案。XML Schema 提供了更强大、更灵活的数据验证机制。

XML Schema 的主要特点

  1. 基于 XML 的语法:Schema 本身也是 XML 文档,易于理解和处理
  2. 丰富的数据类型:支持字符串、整数、日期、布尔值等多种内置数据类型
  3. 自定义类型:可以定义复杂类型和简单类型
  4. 命名空间支持:原生支持 XML 命名空间
  5. 继承和扩展:支持类型的继承和扩展机制
  6. 精确的约束:可以定义元素的基数、取值范围、格式等约束

XML Schema 与 DTD 的区别

特性XML SchemaDTD
语法基于 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 元素

  1. element:定义 XML 元素
  2. complexType:定义复杂类型(包含子元素或属性)
  3. simpleType:定义简单类型(只包含文本内容)
  4. attribute:定义元素属性
  5. sequence:指定子元素必须按顺序出现
  6. choice:指定子元素中只能出现一个
  7. 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 应用开发中不可或缺的工具。

标签:XML