xml中的名称空间

XML认证教程,第 3 部分: 名称空间  
 
级别: 初级

IBM, 自由作者


2003 年 3 月 01 日

XML的用途不是单一的。虽然读者可能看到编写只使用一个标记符号集的文档是相当有用的。
为何引入名称空间?

XML的用途不是单一的。虽然读者可能看到编写只使用一个标记符号集的文档是相当有用的。

但是,问题是,当混杂和匹配不同的XML应用程序的标记时,可能会发现同一个标记已用于两个不同对象。TITLE是指页标题还是书的标题?ADDRESS是指公司的邮件地址还是Web站点管理人员的电子邮件地址?名称空间(namespace)可以解决这些诸如此类的问题,它是将URI与各标记集相关联,并在每个元素前加上一个前缀,以表示它属于哪个标记集。于是,就可以有BOOK:TITLE和HTML:TITLE两个元素或 POSTAL:ADDRESS和HTML:ADDRESS元素,而不只一类TITLE或ADDRESS。

名称空间允许文档中的每个元素和特性放在不同的命名域中。

  URI和URL

XML文档可用于Web,正如HTML和其他文档一样。使用时,也如HTML文档一样,被统一资源定位符(Uniform Resource Locator,简写为URL)所引用。虽然URL已被人们广泛理解并被广泛支持,但XML规范使用的是更为通用的统一资源标识符(Uniform Resource Identifier,简写为URI)。URI对于定位 Internet上的资源是更为通用的架构,更为注重资源而不太注重位置。理论上说,URI可找出镜像文档的最为近似的副本或是找出已经从一个站点移动到另一站点的文档。实际上,URI仍然处于进一步的研究之中,被当前的软件所唯一支持的一种URI正是URL。

 

 用xmlns声明名称空间

这个一个声明名称空间的例子 xmlns:xsl="http://www.w3.org/TR/WD-xsl"
 

"http://www.w3.org/TR/WD-xsl"是一个URI引用。

URI为统一资源标识符(Uniform Resource Identifier,简写为URI)。 URI对于定位Internet上的资源是更为通用的架构,更为注重资源而不太注重位置。不过当前的软件所唯一支持的一种URI正是URL。要注意的是这里用URI 只是为了声明一个唯一的名称空间,并不是真的上www.w3.org的网站去寻找这个链接。

xsl表明以后如果用到以xsl为前缀的名字,那么它所表示的规则是在名称空间里预先定义好的,如“xsl:value-of”在"http://www.w3.org/TR/WD-xsl"这个名称空间预置的,它的意义是求值。

 

 合法名称

合法名称的形式应该是:前缀部分:本地部分

其中,“前缀部分”和“本地部分”都要求是一个合法的XML名称。前缀部分必须是一个已经经过声明的名称空间前缀,语法分析器将把它与名称空间声明中的 URI引用相联系;本地部分则是在DTD或Schema中定义的元素和属性名。下面给出一个合法名称的例子:

企业经理:姓名
 


此外,由于名称空间的声明方式有直接方式和缺省方式两种,合法名称也稍有变化。缺省的声明方式为 xmlns=URI。

由于缺省方式声明的名称空间就是作用域内的缺省名称空间,因此,在这个作用域内使用该名称空间的元素、属性的合法名称无须再写前缀部分。这样一来,元素的合法名称看上去和我们前面常用的元素名是一致的。由此可见,我们一直在使用“合法名称”,只不过没有意识到罢了。

 

 名称空间作用于元素

合法名称可以用于起始元素标记、结束元素标记和空元素标记。合法名称中的前缀部分必须是一个已经声明过的名称空间前缀,声明的位置,既可以在使用该前缀的起始元素的标记处,也可以是引用处的父辈元素标记处。名称空间声明是作用到说明它的元素和该元素的所有子元素的,除非被其它名称空间声明所覆盖
例如:

<联系人:联系人列表 xmlns:联系人 ="联系人列表.dtd">
   <联系人:联系人>
  <联系人:姓名>张三</联系人:姓名>
  <联系人:ID>001</联系人:ID>
  <联系人:公司>A公司</联系人:公司>
  <联系人:EMAIL>zhang@aaa.com</联系人:EMAIL>
  <联系人:电话>(010)62345678</联系人:电话>
  <联系人:地址>
    <联系人:街道>五街1234号</联系人:街道>
    <联系人:城市>北京市</联系人:城市>
    <联系人:省份>北京</联系人:省份>
  </联系人:地址>
  <联系人:直接上级 xmlns:企业经理 ="企业经理.dtd">
    <企业经理:姓名>王五</企业经理:姓名>
    <企业经理:电话>
   <企业经理:秘书电话>(010)62345678</企业经理:秘书电话>
   <企业经理:手机>13601234567</企业经理:手机>
    </企业经理:电话>
  </联系人:直接上级>
   </联系人:联系人>
 </联系人:联系人列表>
 


名称空间"联系人列表.dtd"的作用域,在除"直接上级"元素范围以外的任何地方;而名称空间"企业经理.dtd"的作用域在"直接上级"的各个子元素中。同样,缺省的名称空间是作用到声明它的元素和该元素的子元素的。当然,这里所说的元素都是那些没有名称空间前缀的元素,有了前缀的元素仍然遵照前缀所指示的名称空间。

 

 名称空间作用于属性

同样,合法名称也可用于属性。除了XML预留的属性(如我们反复用到的声明命名空间的属性)外,其它属性都应该使用"合法名称"。

一个具体的例子如下:

<联系人 xmlns:企业经理 = "http://www.xml.net.cn/联系人列表.dtd">
   <姓名 企业经理:文种 = "中文">李华</姓名>
   <电话 企业经理:城市 = "北京">62348765</电话>
</联系人> 
 
关于作者

 

  IBM has authored this article
 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值