首页 > 代码库 > XML Schema

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