首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Schema中elementFormDefault="qualified"所讫的作用

2012-10-25 
Schema中elementFormDefaultqualified所起的作用有的xsd文件的开头是这样写的:?xml?version1.0?x

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>

?

elementFormDefault 属性只是用来设置xml的实例中子元素是否一定需要有命名空间限定,不控制xml实例中各元素归属哪个命名空间。xml实例中元素的命名空间由xml实例本身的设置决定。

热点排行