• Schema中elementFormDefault="qualified"所起的作用


    有的xsd文件的开头是这样写的:

    <?xml version="1.0"?>

     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

                targetNamespace="http://www.abc.com"

                xmlns:ps="http://www.abc.com"

                elementFormDefault="qualified">

    可是去掉elementFormDefault="qualified"好象也没什么影响呀?

    一个 XML schema 中 elementFormDefault="?" 这一属性用来指示 XML Schema 处理程序把这个 XML schema 中定义的元素或者类型放到哪个命名空间。

    一个schema中声明的元素或者类型只能归到两个命名空间中的某一个去,这两个是,无名命名空间和由targetSchema属性指明的目标命名空间。而targetSchema属性只能在xs:schema的定义中声明,因而,一个schema中的定义的元素或类型只可能归属于一个有名命名空间(但是还有可能归属于无名命名空间)。

    当elementFormDefault="qualified" 时,所有全局元素的子元素将被以缺省方式放到目标命名空间,连同全局元素或者类型一起;

    而当elementFormDefault="unqualified" 时,所有全局元素的子元素将被以缺省方式放到无名命名空间。而属性的命名空间类似地由attributeFormDefault="?"来指明。

    需要明白的是,elementFormDefault="?" 是有作用域的,并且是被继承的,除非在子定义中覆盖父定义。

    下面三个例子说明了elementFormDefault的使用效果。红色表示属于已命名空间的元素,蓝色表示属于未命名空间的元素。

    1.定义了目标命名空间, 全局elementFormDefault=“unqualified”。这时除了全局元素或者类型将归于目标命名空间外,局部元素将归于无名命名空间。

    unqualified.xsd

    <?xml version="1.0" encoding="UTF-8"?>

     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="aaaa" elementFormDefault="unqualified" attributeFormDefault="unqualified">

      <xs:element name="c">

       <xs:complexType>

        <xs:sequence>

         <xs:element name="c1" type="xs:double"/>

         <xs:element name="c2" type="xs:string"/>

        </xs:sequence>

       </xs:complexType>

      </xs:element>

     </xs:schema>

    unqualified.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <n:c xmlns:n="aaaa" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="aaaa unqualified.xsd">

      <c1>3.141593E0</c1>

      <c2>String</c2>

    </n:c>

    2. 定义了目标命名空间, 全局elementFormDefault=“qualified”。这时全局元素或者类型将归于目标命名空间,局部元素将以缺省方式归于目标命名空间。

    qualified.xsd

    <?xml version="1.0" encoding="UTF-8"?>

     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="aaaa" elementFormDefault="qualified" attributeFormDefault="unqualified">

      <xs:element name="c">

       <xs:complexType>

        <xs:sequence>

         <xs:element name="c1" type="xs:double"/>

         <xs:element name="c2" type="xs:string"/>

        </xs:sequence>

       </xs:complexType>

      </xs:element>

     </xs:schema>

    qualified.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <c xmlns="aaaa" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="aaaa qualified.xsd">

      <c1>3.141593E0</c1>

      <c2>String</c2>

    </c>

    3. 定义了目标命名空间, 全局elementFormDefault=“unqualified”。这时全局元素(c)或者类型将归于目标命名空间。局部元素(c1,c2)以缺省方式归于无名命名空间。局部元素(c3)在局部定义中使用form=“qualified”覆盖全局设定的unqualified,这使得c3归于目标命名空间(如果它有子元素,子元素将以缺省方式归于目标命名空间)。

    qualified2.xsd

    <?xml version="1.0" encoding="UTF-8"?>

     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="aaaa" elementFormDefault="unqualified" attributeFormDefault="unqualified">

      <xs:element name="c">

       <xs:complexType>

        <xs:sequence>

         <xs:element name="c1" type="xs:double"/>

         <xs:element name="c2" type="xs:string"/>

         <xs:element name="c3" type="xs:integer" form="qualified"/>

        </xs:sequence>

       </xs:complexType>

      </xs:element>

     </xs:schema>

    qualified2.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <n:c xmlns:n="aaaa" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="aaaa qualified2.xsd">

      <c1>3.141593E0</c1>

      <c2>String</c2>

      <n:c3>0</n:c3>

    </n:c>

  • 相关阅读:
    PHP标准库 (SPL) 笔记
    PHP反射
    PHPer书单
    深入理解面向对象——六大基本原则
    Session自定义存储及分布式存储
    06- Shell脚本学习--其它
    05- Shell脚本学习--函数
    04- Shell脚本学习--条件控制和循环语句
    03- Shell脚本学习--字符串和数组
    02- Shell脚本学习--运算符
  • 原文地址:https://www.cnblogs.com/xuxiuxiu/p/7601286.html
Copyright © 2020-2023  润新知