Xml中为了对同名的元素进行限定,w3c提出了命名空间的规范。
简单的说命名空间就是给每个元素加上限定名,从而对同名元素进行区分。
一 命名空间声明的两种方式
1 带有前缀的声明
<ElementName xmlns:prefixname="URI"></ElementName>
命名空间实际上是作为一个元素属性,被声明的。其有效范围包括当前元素,以及所有的子元素。
xmlns:声明命名空间的属性名
prefixname:前缀名。
URI:命名空间。实际上是一个统一资源定位符,这里只是为了定义命名空间的唯一性,才使用URI。实际上XML文档再被解析的时候,并不去连接到URI指定的位置
2 不带前缀名的默认命名空间声明
<ElementName xmlns="URI"></ElementName>
3 URI为空的命名空间声明
<ElementName xmlns=""></ElementName>
此种方式是指定此元素,不属于任何命名空间。
二 几点说明
1 利用带有前缀名的声明方式,在元素上声明了命名空间后,并不是这个元素以及其子元素就属于此命名空间,而仅仅说明此命名空间的有效范围。如果要制定元素的命名空间,必须要在元素上指定前缀名,例如:
<Books xmlns:book="http://www.youkuaiyun.com/book">
<book:book>
<name>jsp</name>
</book:book>
</Books>
在上面的设定中<book>元素的命名空间是“http://www.youkuaiyun.com/book”。但是,<name>元素的命名空间并不是“http://www.youkuaiyun.com/book”。如果要设定<name>的命名空间,必须指定前缀名。
2 不带前缀名的默认命名空间的声明方式,在元素上声明了命名空间后,那么当前元素以及其子元素都属于此命名空间。
三 举例说明元素的命名空间
<?xml version="1.0" encoding="UTF-8"?>
<books xmlns="http://www.baidu.com/book" xmlns:people="http://www.baidu.com/people" >
<people:book>
<people:name>JPS STUDY</people:name>
<author>sunxin</author>
</people:book>
<book>
<name>JPS STUDY2</name>
<author>sunxin2</author>
</book>
<book xmlns="">
<name>JPS STUDY3</name>
<author>sunxin3</author>
</book>
<author>
<name>sunxin</name>
<age age="28"></age>
</author>
</books>
我们来看看上面的元素的命名空间
<books> 默认命名空间 http://www.baidu.com/book
<people:book> 指定的命名空间 http://www.baidu.com/people
<book> 默认的命名空间 http://www.baidu.com/book
<book xmlns=""> 因为默认命名空间被屏蔽,所以不属于任何的命名空间
<author> 默认命名空间 http://www.baidu.com/book