xml名称空间

来源:互联网 发布:阿里云搭建ss 贴吧 编辑:程序博客网 时间:2024/04/29 15:04
xml名称空间定义时有两种形式:
1.<元素名 xmlns:prefixname="URI">
素名是指你在哪个元素上声明名称空间,在这个元素上声明的空间适用于它的元素和属性,以及该元素内容中的所有元素及其属性。
URI是标识该名称空间的名称空间名字,prefixname给出名称空间前缀的名称,该前缀用于将元素及属性的名字与URI关联在一起。
需要注意的是,在这样的声明中,名称空间的名字不能为空("")。如果有两个一相同的URI,则认为它们标识了同一个名称空间。
xml名称空间可以作为限定名(qualified names)出现,限定名包含了一个以冒号分隔的名称空间前缀和一个本地部分(local part),
例子:
<baidu xmlns:baidu="百度">
这里声明了一个名称空间,名字是“百度”(不包括引号),这样可以直接使用page这个简短的前缀来作为属性或元素限定的名字,
例如<baidu:news,表示news这个元素属于baidu所关联的名称空间,当XML处理时,将前面缀替换成所关联的URI。
注意:名称空间名字可以是不包含冒号的任何合法的XML名称。但xml和xmlns不能使用,xml在1.0中被用于xml:space和xml:lang,
被定义为与名称空间名字http://www.w3.org/XML/1998/namespace绑定,前缀xmlns仅仅用于声明名称空间的绑定,它被定义为与名称空间http://www.w3.org/2000/xmlns/绑定。
2.<元素名 xmlns="URI">
这样的默认声明中,URI属性值可以为空("")。
例子:
<baidu xmlns="谷歌">
声明了一个“谷歌”的默认名字空间
  • 在声明名称空间时,选择的URI不需要指向实际的内容,在URI所标识的位置上,可以不存在任何东西,它只是一个标识。
  • 一个属性要想在某个名称空间中,必须给该属性加上名称空间前缀,没加前缀的属性不在任何的名称中(包括默认的名称空间中)。即使拥有属性的元素在某个名称空间中,没有前缀的属性也不在该名称空间中或任何其他的名称空间中。
  • 在XML文档中,任何一个元素都不能包含两个或多个相同的属性,所谓相同有两种情况:一种是属性的名字完全相同;另一种是属性限定名的本地部分完全相同,且前缀不相同,但前缀都绑定到了相同的名称空间名字。
  • XML文档使用了名称空间后,相对应的DTD文档也要做修改,在各个元素和属性的前面都要加上相应的名称空间的前缀,否则不能通过验证。为了尽可能少的修改DTD文档,我们可以在元素上使用默认的名称空间,但如果有另个DTD将该元素定义为 [img][/img] TA类型时,XML解析器会看到有两个一样的元素却有两种定义,会判定文档无效,这时就只能在DTD文档中添加前缀来处理了。