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的主要内容,如果未能解决你的问题,请参考以下文章

xml与xml schema命名空间学习

在 C# 中从 XML Schema 生成代码的限制是啥?

xml Eclipse模板(代码片段)检查参数并最终抛出IllegalArgumentException

需要示例代码片段帮助

Spring事务——使用XML Schema配置事务策略

如何将代码片段存储在 mongodb 中?