Schema的通常意义是定义某种对象的类别特征,或者说是类型。所以XML中的Schema是用来定义XML文件的数据类型的。大家都知道,一般来讲一个XML文件只要符合语法规则,就是正确的,比如下面两段描述书的XML,单从XML语法上来说都是正确的, 交给XML解释器去解释都不会出错:

<?xml version=’1.0’ encoding=’gb2312’?><books>
<book>
<title> 语文第一册</title>
<author>教委</author>
</book></books>

<?xml version=’1.0’ encoding=’gb2312’?>
<books>
<book>
<title> 语文第一册</title>
<title> 语文第二册</title>
<author>教委</author>
</book>
</books>



但是很显然,我们不认为一本书会有两个名字(当然,翻译的书也许可以有例外),所以我们希望第二段代码解释时不被通过。这样,我们就需要用到Schema. 我们定义如下的Schema:

<!-- idSchema.xml -->
<Schema >
<AttributeType name="title" />
<AttributeType name="author" />
<ElementType name="book" >
<attribute type="title"/>
<attribute type="author" occurs="ONEORMORE"/>
</ElementType>
</Schema>

这段代码的意思就是:我们在XML文件中有“book”元素,而“book”必须有两个属性:“title”和”“author”,“title”属性只能出现一次(缺省设置),表明书只有一个名字;而“author”属性可以出现一次或多次,表明书可以有多个作者。我们若将这个Schema运用到前面的XML文件中,就可以检测出不符和要求的代码:

<?xml version=’1.0’ encoding=’gb2312’?>
<books xmlns:data="x-schema:idSchema.xml">
<data:book>
<title> 语文第一册</title>
<author>教委</author>
</data:book>
</books>

<books xmlns:data="x-schema:idSchema.xml">表明在这个XML文件中,将用到”idSchema.xml”文件中定义的Schema, 这个Schema在文件中的引用名称是”data”.<data:book> 表明此处的“book”元素不是任意的,而是要符合“data”所指明的”idSchema.xml”中的“book”定义。这样,如果将同样的Schema运用到第二段代码中,这段代码在解释时就不能通过,因为它包含了两个名字属性,不符合Schema中定义的语法:

<?xml version=’1.0’ encoding=’gb2312’?>
<books xmlns:data="x-schema:idSchema.xml">
<data:book>
<title> 语文第一册</title>
<title> 语文第二册</title>
<author>教委</author>
</data:book>
</books>

顺便说一下,一个XML文件中可以使用多个Schema.