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>

posted @ 2017-09-27 13:29  sunshine_kaka  阅读(980)  评论(0编辑  收藏  举报