XML Schema
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XML Schema相关的知识,希望对你有一定的参考价值。
Schema概述
XML Schema是DTD的替代者,它采用标准XML语法来定义XML文档语义约束。
不仅可以定义XML文档的结构,还可以定义XML文档内容约束。
DTD采用非XML的语法来描述XML的语义约束,不支持多种多样的数据类型,可扩展性差,逐渐为XML Schema代替。
相比XML Schema具有如下优势:
一、可读性好;
所有对XML文档有效的技术都可作用域XML Schema。
1、可使用XML编辑器来编辑Schema文件;
2、可使用XML解析器来解析Schema文件;
3、可通过XMl DOM来处理Schema;
4、可通过XSLT来转换Schema;
5、XML Schema可保护数据通信。
二、支持为元素内容或属性值指定数据类型,功能更完善、更强大;
XML Schema最重要的能力之一就是支持数据类型。
数据约束在XML Schema中称为data facet,主要用于为原有的数据类型增加额外约束。
XML Schema为内建数据类型增加额外限制就可以“扩展”出新的数据类型。
三、可针对未来的需求进行扩展。
XML Schema是XML文档,是可扩展的,通过扩展XML Schema定义,可以满足如下条件:
1、允许在其他Schema中导入已有Schema,从而可以更好地复用已有Schema;
2、开发者可以扩展自己的数据类型;
3、允许在同一个XML文档中使用多个XML Schema。
XML Schema入门
XML Schema根元素
XML Schema本身是一个XML文档,因此它完全遵守XML基本规则,其根元素是<Schema.../>元素。
最简单的XML Schema有如下形式:
<?xml version="1.0" encoding="gb2312"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> ... <xs:schema>
上面程序XML Schema的根元素中指定了xmlns:xs="http://www.w3.org/2001/XMLSchema",这是因为XML Schema本身也是XML文档,也需要语义约束。
xmlns[:xxx]属性用于为指定XML文档引入语义约束。该属性属性值就是该文本所使用的语义约束对用的命名空间。xxx是一个任意的标识名,该标识名将作为该语义约束所定义的所有元素的前缀(前缀和标签名之间以英文冒号隔开),用于代表该语义约束所对应的命名空间。
注:不同语义约束(DTD或Schema)下可能包含同名的元素,为了在同一份XML文档中使用不同语义约束下的同名元素,需要在这些元素前增加特定的前缀,不同的前缀实质上代表了不同的语义约束。
"http://www.w3.org/2001/XMLSchema"属性值指定了XML Schema语义约束的命名空间。XML文档语义约束可以到这个站点查看。
采用上面格式定义的XML Schema将没有对应的命名空间,如果希望为其制定对应的命名空间,则应按下面格式定义根元素:
<?xml version="1.0" encoding="gb2312"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.crazyit.org/Schema" targetNamespace="http://www.crazyit.org/Schema"> ... <xs:schema>
上面程序程序中:
targetNamespace="http://www.crazyit.org/Schema":指定该Schema的目标命名空间为http://www.crazyit.org/Schema。也就是说,当需要引用该XML Schema里定义的Schema组件(包括元素、属性和类型等)时,童谣需要使用该命名空间对应的前缀作为限定。
xmlns="http://www.crazyit.org/Schema":指定使用http://www.crazyit.org/Schema 命名空间下的Schema组件(包括元素、属性和类型等),不需要使用任何前缀作为限定
不管是XML文档本身还是XML Schema文档,他们的根元素都可以接受任意多个xmlns[:xxx]属性。其中[:xxx]是可选的,xxx可以是任意合法标识名。
xmlns[:xxx]="schemaNamespace":指定引用schemaNamespace命名空间下的Schema组件时,应该使用xxx前缀作为限定。如果省略了[:xxx]就说明使用该命名空间下的Schema组件不需要任何前缀作为限定。
还可以为Schema元素指定如下两个属性:
1、elementFormDefault:该属性值可以是qualified或unqualified,用于指定XML文档使用该Schema定义的局部元素时是否必须用命名限定。
2、attributeFormDefault:该属性值可以是qualified或unqualified,用于指定XML文档使用该Schema定义的局部属性时是否必须用命名限定。
以上是关于XML Schema的主要内容,如果未能解决你的问题,请参考以下文章