[XML]学习笔记(四)——命名空间

时间:2022-12-26 10:03:10
一、 什么是XML命名空间(namespace):
命名空间是一组具有结构的名称的集合,是XML正式标准的补充部分,通过使用URI(统一资源标识)限定元素和属性。URI通常是以一个URL的形式出现,因为URL具有唯一标识的功能,但URI所指向的并非一定是可访问的网页。
二、 命名空间的声明和使用:
a) 声明:
<elementName xmlns:prefix=”URI”/>


e.g.

<book:items xmlns:book="7-2.dtd">


b) 使用:
i. 子元素及其属性中使用:
<book:item>	<book:name>asp</book:name>
<book:price>124.6</book:price>
</book:item>


ii. 自身属性中使用:
<book:items xmlns:book="7-2.dtd" book:hardback="true">


三、 命名空间的范围:
a) 该元素的属性;
b) 该元素的子元素及其属性;
c) 如果该元素的子元素中声明了相同命名空间,则使用最新的。
e.g.
<?xml version="1.0" encoding="UTF-8"?><store:items xmlns:store="dtd1.dtd">
<store:item> #dtd1作用范围
<store:name>asp</store:name>
<store:price>123</store:price>
</store:item>
<store:item xmlns:store="dtd2.dtd"> #dtd2作用范围
<store:name>java</store:name>
<store:price>456</store:price>
</store:item>
<store:item> #dtd1作用范围
<store:name>python</store:name>
<store:price>789</store:price>
</store:item>
</store:items>


四、 默认命名空间及多个命名空间共存:
XML文档中的标记在默认情况下都没有使用命名空间前缀来限制,没有使用的一概属于默认命名空间的控制范围。
e.g.
<?xml version="1.0" encoding="UTF-8"?><items xmlns="dtd1.dtd" xmlns:another="dtd3.dtd">		#将dtd1.dtd声明为默认命名空间
<item>
<name>asp</name>
<price>123</price>
</item>
<item xmlns:store="dtd2.dtd"> #dtd2.dtd引入了新的命名空间
<store:name>java</store:name>
<store:price>456</store:price>
</item> #dtd2.dtd作用域结束
<item>
<name>python</name>
<another:price>789</another:price> #使用dtd3.dtd中的price
</item>
</items>


五、 命名空间与元素:
XML文档的语法要求标记的属性也必须唯一,对标记的各个属性的顺序则没有任何限制,当属性名称完全相同时如下:
e.g.
<?xml version="1.0" encoding="UTF-8"?><items xmlns:a="dtd1.dtd" xmlsn:b="dtd2.dtd">
<item>
<name first="jason" first="cheng">zhen</name> #重复!
<sex a:s1="man" b:s1="male">male</sex> #重复!
</item>
</items>
以下为合法使用:
<?xml version="1.0" encoding="UTF-8"?>
<items xmlns="dtd1.dtd" xmlsn:b="dtd2.dtd">
<item>
<name first="jason" second="cheng">zhen</name>
<sex s1="man" b:s1="male">male</sex>
</item>
</items>