什么是Schema约束
同DTD一样,XML Schema也是一种用于定义和描述XML文档结构与内容的模式语言,它的出现克服了DTD 的局限性。接下来,通过XML Schema与DTD的比较,将XML Schema所具有的一些显著优点进行列举,具体如下:
1、DTD采用的是非XML语法格式,缺乏对文档结构、元素、数据类型等全面的描述。而XML Schema采用的是XML语法格式,而且它本身也是一种XML文档,因此,XML Schema语法格式比DTD更好理解。
2、XML有非常高的合法性要求,虽然DTD和XML Schema都用于对XML文档进行描述,都被用作验证XML合法性的基础。但是,DTD本身合法性的验证必须采用另外一套机制,而XML Schema则采用与XML文档相同的合法性验证机制。
3、XML Schema对名称空间支持得非常好,而DTD几乎不支持名称空间。
4、DTD支持的数据类型非常有限。例如,DTD可以指定元素中必须包含字符文本(PCDATA),但无法指定元素中必须包含非负整数(nonNegativeInteger),而XML Schema比XML DTD支持更多的数据类型,包括用户自定义的数据类型。
5、DTD定义约束的能力非常有限,无法对XML实例文档作出更细致的语义限制,例如,无法很好地指定一个元素中的某个子元素必须出现7到12次;而XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
通过上面的比较可以发现,XML Schema的功能比DTD强大很多,但相应的语法也比DTD复杂很多,接下来,看一个简单的Schema文档,如例1所示。
例1 Simple.xsd
1 <?xml version=”1.0”?>
2 <xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
3 <xs:element name=”root” type=”xs:string”/>
4 </xs:schema>
在例1中,第1行是文档声明,第2行中以xs:schema作为根元素,表示模式定义的开始。由于根元素xs:schema 的属性都在http://www.w3.org/2001/XMLSchema
名称空间中,因此,在根元素上必须声明该名称空间。