DOM Level 2 相对于 DOM Level 1 的一个主要增强是增加了对名称空间的支持。名称空间允许开发人员无冲突地使用具有不同来源或不同用途的信息。
名称空间是一个概念范围,其中的所有名称都需要是唯一的。
例如,我过去常在这样一间办公室工作,我的名字和那里的一位客户相同。如果我在办公室,而接待员宣布“Nick,请接 1 号电话,”那么每个人都知道她指的是我,因为我在“办公室名称空间中”。类似地,如果她宣布“Nick 在一号线上,”每个人都知道她指的是那位客户,因为呼叫者在办公室名称空间之外。
另一方面,如果我出了办公室,而她做出相同的宣布,混淆就可能产生,因为两种可能性都存在。
当 XML 数据库由多种来源组合而成时,同样的问题也会产生(比如本教程稍后将会详细描述的信用评级信息)。
创建名称空间
由于名称空间的标识符必须是唯一的,因而使用统一资源定位符(或 URI)来指定它们。例如,本教程的示例数据的默认名称空间将使用 xmlns 属性来指定:
<?xml version="1.0" encoding="UTF-8"?>
<orders xmlns="http://www.nicholaschase.com/orderSystem.html">
<order>
<customerid limit="1000">12341<customerid>
...
</orders>
(... 表示不相关的节。)
没有指定名称空间的任何元素都在默认名称空间 http://www.nicholaschase.com/orderSystem.html 中。实际的 URI 本身并没有表示任何意义。信息可能在也可能没有在该地址,重要的是它必须是唯一的。
注意默认名称空间和根本没有名称空间之间的巨大区别是很重要的。在本例中,没有名称空间前缀的元素都在默认名称空间中。以前,当不存在默认名称空间时,那些元素就不在任何名称空间中。
您还可以创建次级名称空间,并向它们添加元素或属性。
指定名称空间
也可以为数据指定其他名称空间。例如,通过创建 rating 名称空间,您无需使用实际的数据就可以向订单文本添加信用评级信息。
名称空间连同它的一个别名通常在在文档的根元素上(但不一定是这样)创建。当正在使用多个名称空间时,这个别名根据需要用作元素或属性的前缀,以指定正确的名称空间。