一、xml名称空间
xml 文档可以包含许多标签以及属性,为了区分在不同文档中的相同标签,需要使用xml名称空间这个概念,就像java中相同名称的类,需要放在不同的包中一样。通过给元素或者属性加上名称空间用以唯一标识一个元素或者属性
1.名称空间的声明:
形式一 这种声明要求名称空间的名字不能够为空
<元素名 xmlns:prefixname=”URI”>
元素名指的是我们所需要给于名称空间的元素,该名称空间适用于此元素及其属性以及此元素的内容中所有元素及他们的 属性。
xmlns:prefixname 为该元素的属性名 URI为该属性的属性值,prefixname既是名称空间的前缀名,用于将元素及其属性的 名字与URI进行关联,例如<prefixname:element_name> 表示element_name 元素属于prefixname代表的名称空间。
来看一个例子:<mytag xmlns:my_namespace=”http://www.liming.com/namespace”> 这条声明了一个名称空间,名称空 间的名称就是http://www.liming.com/namespace,
名称空间前缀为my_namespace,在xml文档中使用的时候可以这样用:
<my_namespace:tag>元素内容</my_namespace:tag> my_namespace:tag组成一个元素限定名,tag被称为本地部分, my_namespace为名称空间的前缀。这个限定名表示tag是属于http://www.liming.com/namespace空间中的。
形式二 这种声明要求名称空间的名字可以为空
<元素名 xmlns=”URI”> 在这种声明中没有指定名称空间的前缀名URI所标识的是默认名称空间
<mytag xmlns:=”http://www.liming.com/namespace”>
<start>内容</start>
</my_tag>
表示my_tag及其内容中所有没有前缀标识的元素均属于http://www.liming.com/namespace中。
2.默认名称空间
为了避免在xml文档中给每个元素添加一个名称空间的前缀名,可以使用默认的名称空间
<?xml version="1.0" encoding="GB2312"?>
<books xmlns:p=”http://www.liming.com/namespace”
xmlns=”http://www.liming.com”>
<book>
<title>JSP深入编程</title>
<author>
<p:name>张三</p:name>
<p:title>作家</p:title>
</author>
</book>
<book>
<title>XML从入门到精通</title>
<author>
<name>李四</name>
</author>
</book>
</books>
books本身没有名称前缀,包括其内容中没有前缀的元素都属于名称空间http://www.liming.com中,而<p:name>张三 </p:name>;<p:title>作家</p:title>指定了name、title元素及其内容属于http://www.liming.com/namespace中
3.名称空间在元素以及属性中的运用
- 在元素中 没有名称空间的:
<?xml version="1.0" encoding="GB2312"?>
<books>
<book>
<title>JSP深入编程</title>
<author>
<name>张三</name>
<title>作家</title>
</author>
</book>
<book>
<title>XML从入门到精通</title>
<author>
<name>李四</name>
<title>教师</title>
</author>
</book>
</books>
含有名称空间的:
<?xml version="1.0" encoding="GB2312"?>
<books xmlns:people="http://www.sunxin.org/people">
<book>
<title>JSP深入编程</title>
<author>
<people:name>张三</people:name>
<people:title>作家</people:title>
</author>
</book>
<book>
<title>XML从入门到精通</title>
<author>
<people:name>李四</people:name>
<people:title>教师</people:title>
</author>
</book>
</books>
在需要使用姓名以及头衔的时候我们就可以容易的区分开了。需要注意的是,一个元素可以有多个名称空间的声明作为其属性
- 在属性中使用
因为属性是属于其对应的元素的,很容易区分开不同元素的相同属性名,如果需要对属性引入名称空间,看下面的例子:
注意:在声明名称空间的时候URI并不需要指向实际的内容,在URI所标识的位置上,可以不存在任何东西。在名称空间声明的URI只是形式上的标识符,其唯一目的是为了提供一个唯一的名字