XML Schema与DTD的关系
1,DTD使用EBNF语法,它不符合XML文档的标准且自成体系,Schema完全遵循XML规范,符合XML语法。Schema可以像其他XML文档一样被解析和处理。
2,DTD描述的是XML文件的结构,而非元素内容,DTD不能进行数据内容有效性检查。
3,DTD不支持元素的数据类型,对于属性的数据类型定义也很有限,而Schema支持丰富的数据类型,不仅包含许多内建的数据类型还可以自定义数据类型。
4,Schema是内容“开放”的模型,可扩展且功能强,而DTD是内容“封闭”的模型,可扩展性差;
5,Schema可针对不同情况分别对整个XML文档或文档局部进行验证,而DTD缺乏这种灵活性。
6,Schema支持命名空间,DTD不支持命名空间;
总的来说,Schema囊括了DTD文件所能实现的全部功能,同时他也是一个完全规范的XML文档。
首先谈谈命名空间,命名空间是XML解决元素多义性和名字冲突的方案,它是名称上相关的一组名称的汇集;在同一空间中每个名称都必须唯一。
命名空间是使用xmlns的属性来声明的。
xmlns一般放在根元素的开始标记处,声明命名空间的语法格式为: <标识名 xmlns:prefix="URL"> (xmlns:是命名空间属性名,是声明命名空间必须的属性;prefix:命名空间的前缀,它是用户自定义的,它的值不能为XML。在引用此命名空间中的名称时,需要在名称前加 “prefix”)
XML Schema的数据类型分为简单类型和复杂类型;
简单数据类型:不可以包含子元素,也不可以包含属性,只能是数字、字符串或文本数据;
复杂数据类型:可以包含元素、属性或数据内容;
简单数据类型的声明:<simpleType name="类型名" id=“ID值”>
<annotation|restriction|list|union>
</simpleType>
其中name属性是指新定义的简单数据类型的名称,该名称必须具有一个有效的XML名称;id属性是指该元素的ID值,此属性值必须为ID类型,此属性可选项;annotation子元素是用来定义批注;restriction子元素是用来对数据类型添加限制;list子元素是用来定义列表数据类型;union子元素用来定义联合数据类型。
复杂数据类型的声明:<complexType name|id|mixed>
<annotation|simpleContent|complexContent|group|all|choice|sequence|attribute|attributeGroup|anyAttribute>
</complexType>
name属性是指所定义的复杂数据类型的名称,该名称必须是有效的XML名称;id属性是指定元素的ID值,此属性值必须为ID类型,此属性为可选项;mixed属性用以指示是否允许在此复杂数据类型中使用字符数据,默认值为false。
复杂数据类型有四种内容模式:1,简单类型、纯元素类型、混合类型和空类型。
简单内容模型:是指只允许出现文本数据和属性,没有子元素的复杂数据类型,由simpleContent声明,与简单数据类型的区别就是他可以有属性。
声明语法格式:
<simpleContent id="ID的值">
<annotation|restriction|extension>
</simpleContent>
纯元素内容模型:纯元素内容模型的元素下只能出现子元素和属性,不包含文本数据,由complexContent声明。
声明语法格式:
<complexContent id|mixed>
<annotation|restriction|extension>
</complexContent>
混合内容模型:混合内容模型的元素下可以出现子元素、属性和文本数据,可以由complexContent声明需指定mixed属性为true。
空内容模型:空内容模型的元素下只能有属性,没有子元素,也没有文本数据,由complexContent声明,在声明是不出现子元素,并指明mixed的属性为false。