您的位置:首页 > 其它

XML技术讲座之六 XML中的命名空间

2005-05-17 16:36 375 查看
XML命名空间并不是XML 1.0标准的一部分,而是一个被称为“Namespace in XML”的独立标准。W3C组织于1998年2月提出XML命名空间标准的第一个草案,直到1999年1月14日才正式发布为推荐标准。
XML命名空间的由来
简单说来,制定XML命名空间标准的初衷是为了解决XML文档中命名的冲突问题。
在XML的实际应用中,人们常常为不同行业和领域用XML制定不同的语言标准,比如电子商务、远程教育、电子书都分别用XML制定了语言标准,然后针对不同的语言编写不同的模块化处理程序。通过重用现存的语言标准和处理程序,人们可以很快地定义出新的语言标准和处理程序。假如我们通过重新命名的方法解决名称冲突问题,那么我们将面临着,针对原名称开发的应用程序不可再利用的危险。
解决名称冲突的一个比较好的解决方案是,给不同的语言赋以不同的名称空间,应用程序通过名称空间来区分一个元素到底来自于哪一个语言。XML命名空间就是对这种方案的具体实现。
XML命名空间的定义
XML命名空间解决命名冲突问题采用的方法是所谓“两段式命名法”,其中第一段是代表特定命名空间的“命名空间前缀”,第二段是元素或属性原来的名字,两段之间用冒号“:”分开。
下面我们就对XML命名空间的定义做一说明。XML命名空间的定义由命名空间的声明、“合法名称”的定义及应用、命名空间的作用域三部分组成。
1.XML命名空间的声明
<学生:学生 xmlns:学生 = http://www.xml.net.cn/学生 xmlns:班主任 = http://www.xml.net.cn/班主任> 就是命名空间声明。
命名空间声明有两种方式,即直接定义方式和缺省定义方式:
直接定义方式:
xmlns: [命名空间前缀] = [命名空间名]
缺省定义方式:
xmlns = [命名空间名]
命名空间声明中,等号右边的属性值部分是一个URI(Uniform Resource Identifier统一资源标识符)引用,其功能是区分不同的命名空间。因此,这个URI引用被称为命名空间名,它应该具有唯一性和持久性。虽然该属性值使用了URI,但其目的并不是要直接得到一个Schema或DTD,主要的目的在于标识特定的命名空间。
命名空间声明中,等号左边的属性名部分,如果有用冒号“:”分隔开的“命名空间前缀”,就是直接定义方式,其中“命名空间前缀”是一个合法的XML名称。没有“命名空间前缀”的命名空间声明,就是缺省的命名空间声明。 命名空间声明将“命名空间名”与“命名空间前缀”绑定在一起。
2. “合法名称”的定义和应用
在定义了命名空间的声明以后,对如何引用<命名空间前缀>构成新的元素名和属性名,需要再做进一步的统一规范,这就是所谓“合法名称”定义的由来。
“合法名称”由用西文冒号“:”分开的前缀部分和本地部分组成,其中前缀部分和本地部分都是一个合法的XML名称。如:“班主任:姓名”。
“合法名称”的前缀部分,规定必须是一个“命名空间前缀”,且这个命名空间前缀必须已经经过命名空间声明声明过,语法分析器会自动将其与声明中的URI引用相联系。冒号后的部分是该命名空间中定义的元素或属性名,提供了“合法名称”的本地部分。在用缺省方式声明命名空间时,由于“命名空间前缀”为空,因此,这时的“合法名称”只剩下本地部分。
“合法名称”的应用主要有三种情况:
用于起始元素标记、结束元素标记和空元素标记。
用于属性的定义。例如:
<?xml version ="1.0" encoding = "GB2312"?>
<学生:学生 xmlns:学生 = http://www.xml.net.cn/学生> <学生:姓名>李明</学生:姓名>
<学生:班级 学生:数字类型 = "中文">三年级二班</学生:班级>
<学生:住址 学生:数字类型 = "阿拉伯">135楼210室</学生:住址>
</学生:学生>
用于DTD中的元素名和属性类型。例如:
<?xml version="1.0" encoding="GB2312"?>
<!ELEMENT 学生:学生 (学生:姓名, 学生:班级,学生:住址)>
<!ATTLIST 学生:学生 xmlns:学生
CDATA #FIXED "http://www.xml.net.cn/学生">
<!ELEMENT 学生:姓名 (#PCDATA)>
<!ELEMENT 学生:班级 (#PCDATA)>
<!ELEMENT 学生:住址 (#PCDATA)>
3.命名空间的作用域
所谓命名空间的作用域范围是指,一个命名空间声明可以作用到哪些元素和属性。一般可以认为命名空间声明,能够作用到说明它的元素和该元素的所有内容元素,除非被其他命名空间声明所覆盖。
与XML命名空间相关的主要概念,讨论到这里基本上可以结束了。由于篇幅的关系,与XML命名空间相关的一些曾经引起争论的问题,如“命名空间与DTD”,就不在这里讨论了。XML命名空间已经在XSLT、Xlink等标准中得到应用,它已经成为XML标准家族不可或缺的一员。
(具体实例请见www.cnw.com.cn)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: