### 一个简单的 XML Schema 的例子

我们可以看到，DTD 的语法相当复杂，并且它不符合 XML 文件的标准，自成一个体系。也就是说 DTD 文档本身并不是一个良好形式的 XML 文档，上面的关于 DTD 的介绍也仅仅是作了一个简介，目的是帮助大家能读懂 DTD 文件以及在必要时创建简单的 DTD 文件，因为现在很多的 XML 应用是建立在 DTD 之上的。
另外一个代替 DTD 的就是 W3C 定义的 Schema，Schema 从字面意义上来说，可以翻译成模式、大纲、计划、规划等等。它的基本意思就是说为 XML 文档制定一种模式。
Schema 相对于 DTD 的明显好处是 XML Schema 文档本身也是 XML 文档，而不是像 DTD 一样使用自成一体的语法。这就方便了用户和开发者，因为可以使用相同的工具来处理 XML Schema 和其他 XML 信息，而不必专门为 Schema 使用特殊工具。Schema 简单易懂，懂得 XML 语法、规则的人都可以立刻理解它。Schema 的概念提出已久，但 W3C 的标准最近才出来，相应的应用支持尚未完善，但采用 Schema 已成为 XML 发展的一个趋势。
首先我们还是从最简单的例子着手来学习 Schema 的语法结构：
比如一个简单的 XML 文档如下：
<书本>
<名称>天涯明月刀
<作者>古龙
如果用 DTD 的形式来定义该 XML 文档结构的话，可以如下所示：
＜!ELEMENT 书本 (名称, 作者)＞
＜!ELEMENT 名称 (#PCDATA)＞
＜!ELEMENT 作者 (#PCDATA)＞
那么用 Schema 形式如何定义呢？见下面的代码：
＜element name='书本' type='书本类型'/＞
＜complexType name='书本类型'＞
＜element name='名称' type='string'/＞
＜element name='作者' type='string'/＞
＜/complexType＞
可以注意的一点是，在 Schema 中，也是通过对元素的定义和元素关系的定义来实现对整个文档性质和内容的定义。同时需要注意的是，在 Schema 中，元素是通过它的名字和内容模型来确定，名称就是该元素的名字，这个大家都可以理解，而内容模型实际上就是表示元素的类型。就象在 C++中，我们可以随便定义一个变量，但是必须定义变量的类型，变量的类型就可能有多种形式，它可以是一个简单的变量（如 C++内部指定的类型，bool,int,double,char 等等），也可以是很复杂的类型（比如是一个 struct 或者是 class），在 Schema 中也是一样，类型（type）可以分为两种形式，一种是非常简单的类型，被称为 simple，一种是复杂的类型，被称为 complex。简单类型不能包含元素和属性（注意在 Schema 中和 DTD 中一样，都有元素属性的说法，大道相同）。而复杂类型不仅可以包含属性，而且可以在其中嵌套其他的元素，或者可以和其他元素中的属性相关联。