• 技术文章 >后端开发 >XML/RSS教程

    Schema验证XML概念的实例代码详解

    黄舟黄舟2018-05-28 10:47:39原创1534

    1.Schema 文件的结构
    Schema文件和其它XML文件的样子非常相似,它是由一组元素构成的,其根元素是“Schema”。“Schema”元素是XML Schema中第一个出现的元素,用于表明该XML文档是一个Schema文档,相应的,“Schema”的结束标记一般在文档的末尾。这样,一个Schema的结构如下:

    <Schema name="schema-name" xmlns="namespace" >
    
    </Schema>

    Schema具有两个属性:name指定该Schema的名称,而xmlns则指定该Schema包含的命名空间。注意,一个XML Schema文档中可以包含多个命名空间,比如下面的语句指定了三个命名空间:

    <Schema name="mySchema" 
            xmlns="urn:schemas-microsoft-com:xml-data"
            xmlns:dt="urn:schemas-microsoft-com:datatypes" xmlns:myNS=http://www.xml_step_by_step.edu\ns.xml
    >

    第一个是xmlns="urn:schemas-microsoft-com:xml-data",它指定本文档是一个XML Schema文档;第二个是xmlns:dt="urn:schemas-microsoft-com:datatypes",它定义了在本文档中可以使用的数据类型;第三个是xmlns:myNS="http://www.xml_step_by_step.edu\ns.xml",它表明下面可能会用到在myNS中定义的元素或属性。
    2.用Schema定义元素及其内容
    在讲述Schema中和ETD定义相对应的种种定义方法之前,我们先来看看所涉及的三个Schema元素:ElementType、element、group。
    1.ElementType元素
    在Schema文档中使用ElementType来声明XML文件中会出现的元素,ElementType的语法表达如下:

    <ElementType 
        name="元素名" 
        content="{ empty | textOnly | eltOnly | mixed }" 
        dt:type="元素类型" 
        order="{ one | seq | many }" 
        model="{ open | closed }" 
    >

    在ElementType的几个属性中,name的含义不言而喻,是所声明元素的名称,它是不可缺少的。content是ElementType的一个重要属性,它指明ElementType所声明的元素是否为空、是否包含文本、是否包含子元素、还是既包含文本又包含子元素。dt:type指定该元素的数据类型。order指定该元素的子元素的排列顺序规则。最后,model指定该元素是否可以包含未在本Schema中定义的元素和属性,它主要用于其它Schema的引入,也就是其它“命名空间”的引入。“命名空间”的概念大家可能还比较生疏,现在你只要了解,在一个XML文件中能够同时使用几个不同的DTD或Schema定义。
    下表列出了model可能的取值:

    取 值

    释 意

    open表明该元素可以包含其它未在XML Schema中定义的元素和属性
    closed表明该元素只能包含在本XML Schema中定义过的元素和属性

    缺省状态下,XML Schema的model取值"open",也就是说,该元素可以包含其它未在XML Schema中定义的元素和属性。但是,这并不意味着任何元素和属性都可在Schema中出现,允许出现的前提是这些"异类"元素和属性必须在单独的XML Schema中加以定义,并且必须在引用的它们的元素中以命名空间形式指定其出处。
    2. element元素
    ElementType只是起到声明元素的作用,至于元素的内容究竟是什么,则要靠它的子元素element来说明。element的语法表达如下:

    <element 
        type="元素类型" 
        [minOccurs="{ 0 | 1 }"] 
        [maxOccurs="{ 1 | * }"] 
    >

    element实际上是对该Schema中ElementType声明的引用,而具体引用什么元素类型,就要靠type属性指定了。type属性不可缺少,并且为了保证type指定的是已经声明过的元素,要求它的取值必须同某个ElementType中的name属性严格一致。至于其它两个属性倒是可有可无。minOccurs指定该元素在其父元素中出现的最小次数,缺省值为1,表明该元素至少出现一次;也可以取值为0,表明该元素是可选的,可以不出现。maxOccurs则指定了该元素出现的最大次数,缺省值同样为1,表明该元素至多出现一次;也可取值为“*”,表明该元素在XML实例文档中出现次数不受限制。

    3.group元素
    DTD中有成组的概念,相应的,Schema中也有“group”元素。它的语法表达类似element元素:

    <group
        order="{one | seq | many}" 
        [minOccurs="{ 0 | 1 }"] 
        [maxOccurs="{ 1 | * }"] 
    >

    <AttributeType 和DTD的规定相同,组里的内容可以是元素,也可以是另一个子组。属性order指定该组中的元素或子组的顺序,minOccursmaxOccurs分别指定了该组在其父元素中出现的最小次数和最大次数。

    4.用Schema定义元素属性
    Schema中用来定义属性的元素有两个,AttributeType元素是声明属性的,attribute元素则是说明一个元素中究竟包含那些属性。
    AttributeType元素
    AttributeType元素也是Schema中的重要元素之一,用于定义该Schema文档中出现的属性类型。AttributeType的语法表达如下:

      name="属性名" 
      dt:type="属性类型" 
      dt:values="枚举值列表" 
      default="缺省值" 
      required="{yes | no}" 
    >
    1. name
      name不言而喻,自然是所声明的属性类型的名称。注意,该属性是必须的。

    2. dt:type
      dt:type指定所声明属性的数据类型,它除了支持DTD中包含的全部十大数据类型外,还支持一些扩展属性。Schema中的十个基本属性与DTD中属性的对应关系请见下表:

    Schema中基本类型DTD中数据类型
    string#PCDATA
    enumerationENUMERATED
    idID
    idrefIDREF
    idrefsIDREFS
    nmtokenNMTOKEN
    nmtokensNMTOKENS
    entityENTITY
    entitiesEMTITIES
    notationNOTATION

    3.dt:value
    dt:value只有当dt:type取值"enumeration"时才有效,此时,dt:value需列出所有可能的取值。

    4.default
    default指定该属性类型的缺省取值。default取值必须是有效的,例如,当dt:type取值"enumeration"时,default的取值必须来自dt:value所列出的值。

    5.required
    required指定该属性对于引用它的元素是否是必须的。取值yes表明是必须的,取值no则表明并非必须。

    6.attribute元素
    AttributeType和attribute的关系与ElementType和element的关系相同,AttributeType只是起到声明属性的作用,而真正指明一个元素具有哪些属性还需依靠attribute元素。

    以上就是Schema验证XML概念的实例代码详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Schema,XML
    上一篇:详解读写XML文件的代码案例 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 详细介绍xml的语法的使用和学习• C#对XML读写的代码实例• Xml_javascript分页• 具体介绍历数Firefox2.0对XML处理的改进的代码实例(图)• XML轻松学习手册(2)XML概念
    1/1

    PHP中文网