XML验证---DTD与Schema

拥有正确语法的 XML 被称为“形式良好”的 XML。

通过某个 DTD 进行了验证的 XML 是“合法”的 XML。

1. 形式良好的 XML 文档

一个"形式良好"的 XML 文档拥有正确的语法

一个"形式良好"的 XML 文档会遵守前几章介绍过的 XML 语法规则:

  • XML 文档必须有根元素
  • XML 文档必须有关闭标签
  • XML 标签对大小写敏感
  • XML 元素必须被正确的嵌套
  • XML 属性必须加引号
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
	<to>George</to>
	<from>John</from>
	<heading>Reminder</heading>
	<body>Don't forget the meeting!</body>
</note>

2. 验证 XML 文档

一个合法的 XML 文档是"形式良好"的 XML 文档,同样遵守文档类型定义 (DTD) 的语法规则

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>  

在上例中,DOCTYPE 声明是对外部 DTD 文件的引用。下面的段落展示了这个文件的内容。

2.1 XML DTD

DTD 的作用是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构:

<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]> 

2.1.1为什么使用 DTD?

  • 通过 DTD,每一个 XML 文件均可携带一个有关其自身格式的描述。
  • 通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。
  • 而应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。
  • 还可以使用 DTD 来验证自身的数据。

2.2 XML Schema(基于 XML 的 DTD 代替者)

  • W3C 支持一种基于 XML 的 DTD 代替者,它名为 XML Schema:
  • XML Schema 是基于 XML 的 DTD 替代者。
  • XML Schema 描述 XML 文档的结构。
  • XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。
  • XML Schema 在 2001 年 5 月 2 日成为 W3C 标准。

实例:

<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:sequence>
	</xs:complexType>
</xs:element> 

2.2.1 为什么使用Schema

  • 定义可出现在文档中的元素
  • 定义可出现在文档中的属性
  • 定义哪个元素是子元素
  • 定义子元素的次序
  • 定义子元素的数目
  • 定义元素是否为空,或者是否可包含文本
  • 定义元素和属性的数据类型

2.2.2 XML Schema是DTD的继任者

理由如下:

  • XML Schema 可针对未来的需求进行扩展
  • XML Schema 更完善,功能更强大
  • XML Schema 基于 XML 编写
  • XML Schema 支持数据类型
  • XML Schema 支持命名空间

2.2.3 XML Schema 支持数据类型

通过对数据类型的支持:

  • 可更容易地描述允许的文档内容
  • 可更容易地验证数据的正确性
  • 可更容易地与来自数据库的数据一并工作
  • 可更容易地定义数据约束(data facets)
  • 可更容易地定义数据模型(或称数据格式)
  • 可更容易地在不同的数据类型间转换数据

注: 数据约束,或称 facets,是 XML Schema 原型中的一个术语,中文可译为“面”,用来约束数据类型的容许值。

2.2.4 由 XML 编写 XML Schema 有很多好处:

  • 不必学习新的语言
  • 可使用 XML 编辑器来编辑 Schema 文件
  • 可使用 XML 解析器来解析 Schema 文件
  • 可通过 XML DOM 来处理 Schema
  • 可通过 XSLT 来转换 Schema

2.2.5 XML Schema 可保护数据通信

  • 当数据从发送方被发送到接受方时,其要点是双方应有关于内容的相同的“期望值”
  • 通过 XML Schema,发送方可以用一种接受方能够明白的方式来描述数据。
  • 一种数据,比如 "03-11-2004",在某些国家被解释为11月3日,而在另一些国家为当作3月11日。
  • 但是一个带有数据类型的 XML 元素,比如:<date type="date">2004-03-11</date>,可确保对内容一致的理解,这是因为 XML 的数据类型 “date”
    要求的格式是 "YYYY-MM-DD"

2.2.6 XML Schema 可扩展

XML Schema 是可扩展的,因为它们由 XML 编写。

通过可扩展的 Schema 定义,你可以:

  • 在其他 Schema 中重复使用你的 Schema
  • 创建由标准类型衍生而来的你自己的数据类型
  • 在相同的文档中引用多重的 Schema

2.2.7 形式良好是不够的

我们把符合 XML 语法的文档称为形式良好的 XML 文档,比如:

  • 它必须以 XML 声明开头
  • 它必须拥有唯一的根元素
  • 开始标签必须与结束标签相匹配
  • 元素对大小写敏感
  • 所有的元素都必须关闭
  • 所有的元素都必须正确地嵌套
  • 必须对特殊字符使用实体

即使文档的形式良好,仍然不能保证它们不会包含错误,并且这些错误可能会产生严重的后果。

请考虑下面的情况:您订购的了 5 打激光打印机,而不是 5 台。通过 XML Schema,大部分这样的错误会被您的验证软件捕获到。

发布了81 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43542074/article/details/102858936