XML 文档DTD 和 Schema 约束

2019-07-31 0 By admin

一、DTD 文档类型定义(Document Type Definition)

一套为了进行程序间的数据交换而建立的关于标记符的语法规则。
它是标准通用标记语言和可扩展标记语言1.0版规格的一部分,文档可根据某种DTD语法规则验证格式是否符合此规则。
1、DTD可定义合法的XML文档构建模块。
2、它使用一系列合法的元素来定义文档的结构。
3、它可被成行地声明于 XML 文档中,也可作为一个外部引用。

1.1、内部声明

假如 DTD 被包含在您的 XML 源文件中,它应当通过下面的语法包装在一个 !DOCTYPE 声明中:

<!DOCTYPE根元素 [元素声明]>
带有 DTD 的 XML 文档实例
<?xmlversion="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>

以上 DTD 解释如下:

!DOCTYPE note (第二行)定义此文档是 note 类型的文档。
!ELEMENT note (第三行)定义 note 元素有四个元素:”to、from、heading,、body”
!ELEMENT to (第四行)定义 to 元素为 “#PCDATA” 类型
!ELEMENT from (第五行)定义 from 元素为 “#PCDATA” 类型
!ELEMENT heading (第六行)定义 heading 元素为 “#PCDATA” 类型
!ELEMENT body (第七行)定义 body 元素为 “#PCDATA” 类型

1.2、外部声明

假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:

<!DOCTYPE 根元素 SYSTEM "文件名">

二、XML Schema 可扩展标记语言模式

可扩展标记语言架构是以可扩展标记语言(标准通用标记语言的子集)为基础的,它用于可替代文档类型定义(外语缩写:XSD);一份XML schema文件描述了可扩展标记语言文档的结构。

它的作用是定义一份XML文档的合法组件群,就像文档类型定义(外语缩写:DTD)的作用一样,一份XML Schema定义了:

  1. 可以出现在文档里的元素;
  2. 可以出现在文档里的属性;
  3. 哪些元素是子元素;
  4. 子元素的顺序;
  5. 子元素的数量;
  6. 一个元素应是否能包含文本,或应该是空的;
  7. 元素和属性的数据类型;
  8. 元素和属性的默认值和固定值

XML Schema 比 DTD 更强大。其优势包括以下几点:

2.1、支持数据类型

XML Schema 最重要的能力之一就是对数据类型的支持。通过对数据类型的支持:
可更容易地描述允许的文档内容
可更容易地验证数据的正确性
可更容易地与来自数据库的数据一并工作
可更容易地定义数据约束(data facets)
可更容易地定义数据模型(或称数据格式)
可更容易地在不同的数据类型间转换数据

2.2、它使用 XML 语法

另一个关于 XML Schema 的重要特性是,它们由 XML 编写。由 XML 编写 XML Schema 有很多好处:
不必学习新的语言
可使用 XML 编辑器来编辑 Schema 文件
可使用 XML 解析器来解析 Schema 文件
可通过 XML DOM 来处理 Schema
可通过 XSLT 来转换 Schema

2.3、可保护数据通信

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

2.4、可扩展性

XML Schema 是可扩展的,因为它们由 XML 编写。
通过可扩展的 Schema 定义,您可以:

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

2.5、可捕获到错误

即使文档的形式良好,仍然不能保证它们不会包含错误,并且这些错误可能会产生严重的后果。
请考虑下面的情况:您订购的了 5 打激光打印机,而不是 5 台。通过 XML Schema,大部分这样的错误会被您的验证软件捕获到。

2.6、劣点

虽然被写入XML是一个优势,在某些方面也是一个缺点。W3C XML Schema语言特点是可能非常冗长,而DTD可以简洁且相对容易编辑。
W3C XML Schema没有实现大部分提供的数据元素到文档的DTD能力。