• 热门标签

当前位置: 主页 > 航空资料 > 计算机 >

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

这个元素< B o o k >从我们在上面看到的第一个命名空间那里产生,而属性I S B N从order 命名
空间产生。
7.3.3 范围
命名空间声明就像变量在程序语言里那样有它的作用范围。这非常重要,这是因为命名空
间并不是总是定义在X M L文档开始,它们能够被包含在文档的较后部分。一个命名空间声明因
此而应用于有声明出现的元素,尽管与此同时子元素并没有清清楚楚地描述出来。只要被用在
第7章命名空间和模式使用197 下载
图7-1
保留关
键字
命名空间前缀
命名空间命名空间
文档
命名空间声明的范围之内,就能够访问到命名空间。
但是我们也需要去混合命名空间,在那里元素另外地继承命名空间的作用域,于是这里有
两种可以声明作用域的办法:缺省和限定。
1. 缺省
如你想象的,在一个文档里在每一个名称前加一个前缀非常令人厌烦。实际上,通过在的
工具集里引入名称作用域的概念,能够分配很多前缀。如果定义了缺省的命名空间,在声明作
用域里所有没经验证的名称被假定属于缺省的。于是如果你在根元素声明了一个缺省的命名空
间,它将被看作整个文档将缺省的命名空间,并只能在文档里声明过的更多的命名空间所覆盖。
通常省略前缀可以将一个命名空间声明为某范围内缺省的。
这就是如何在X M L文档里使用这些去内嵌入一些H T M L,这些文档根据一种为书的内容所
设计的称作B o o k C o n t e n t . d t d的D T D来标记:
程序清单7 - 4
< Ti t l e > , < A u t h o r > , < C o n t e n t >和< P a r a g r a p h >这些元素以及来自缺省命名空间的属性n u m b e r在
< C h a p t e r >元素定义。但是在C h a p t e r元素里,你能看到t a b l e元素和它的子元素—t r和t d。这些
属于用t a b l e元素声明的HTML 命名空间。应注意到这个例子里当t a b l e元素关闭时,HTML 命名
空间声明作用域随之结束。下面P a r a g r a p h的出现并不是来自HTML 命名空间。
当一个前缀被定义并被一个名称利用时,明确地声明了命名空间。由于一个没有限定而被
命名空间接受的名称,一个缺省的命名空间必须被声明为带有一个作用域,这个作用域包括没
限定的名称(不包括前缀)。
2. 限定
如果你能够清楚地区分命名空间当然非常好。但有些时候可能想要在一篇文档里从外面的
命名空间来浏览名称。你需要一个更精细的划分尺度。除了在整个空间声明命名空间,还可以
利用限定过的名称。在文档开头声明你将需要的命名空间,然后在使用地点限定它们。
198使用XML 高级编程
下载
程序清单7 - 5
在根元素M e a s u r e m e n t s,我们声明了命名空间。缺省值涉及到了元素< O u t s i d e A i r > , < F u e l Ta n k >
和< Measurements>。但是我需要用测量单位验证一部分我们曾用命名空间u n i t s和属性u n i t s做过了
的内容。当这些属性在文档里突然出现时,能够验证那些名称非常有用。最终,我需要区分一些
测量方法的类型,即p r o p : Vo l u m e和p r o p : Te m p e r a t u r e。尽管我已经在< F u e l Ta n k >元素里声明这些
prop 命名空间,我还是可以依靠在开始声明命名空间及使用限定名,自由地反复使用这个命名空
间(或许在一个更长的文档里)
让我们更仔细地看一下命名空间声明并将它与在接下来的< C h a p t e r >元素里出现的命名空间
作一个对比。那个声明被绑定在D T D上,这样一来就可能使用与D T D冲突的名称。在这个例子
里,我们有唯一的名称,但没有DTD URL。命名空间的存在主要是用来将名称组织成特有的集
合以及回避名称冲突。W3C 命名空间推荐标准没有描述任何有关验证的使用方法。确实, X M L
1 . 0 R e c o m m e n d a t i o n没有说任何有关命名空间的东西。XML 模式的成就(后面我们将看到)做
得更多,但当前命名空间用于验证的任何东西将要严格地保留一件人造物品—个人分析器工
具,直到XML 模式成为正式的W 3 C推荐标准。
7.4 在格式正规的书籍里使用命名空间实例
让我们试着标记这本书的内容,并看一下是否能以一种有用的方式利用我们的工具命名空
间。假设像第3章那样D T D内容已经建立。我们将要从现有的目录D T D借用名称,而不是再创建
存在于H T M L里的标记,同样将借用命名空间。现在将把验证问题放在一边,并假设这个文档只
需要被格式正规化。更多注意一下作用域问题,这里将要开始标记这本书,显示这一章的开始
部分:
程序清单7 - 6
第7章命名空间和模式使用199 下载
我在根元素定义了两个命名空间。内容命名空间是缺省值,因我需要严重依靠那个命名空
间并且想要限定尽可能少的名称。我发现从目录命名空间借用几个名称非常有用,于是用前缀
c a t声明了那个命名空间。这允许我从目录命名空间引进一些属性,并在根元素包括它们,这些
属性是从内容命名空间得到的。然后,我需要包含一个列表。这些在H T M L里已经建好,于是我
声明了另一个命名空间:
<UL xmlns="http://www.w3.org/TR/REC/REC-html40">
我没提供一个前缀,于是H T M L变成了缺省的命名空间,但这只是对于U L元素和它的子级,
列表项目( L I)。只要将那个区域合并,用与U L元素相近的标记,我们以缺省值回复内容命名空
间。
开始这个例子之前我要告诉你,这是一个格式正规的例子。的确,如果我在指向D T D的命
名空间声明里提供了U R L并且要求你通过一个限定的解析器去运行它,你将会因为几件事而震
惊。XML 1.0 推荐标准在每个文档里并没有提供一个以上的D T D。在这里,尽管D T D被用作唯
一的名称,它们并没有因验证而读出来,原始的D T D没有来自HTML 命名空间名称的概念。只
要你一试着引进外面的名称,解析器将会指出错误,这是由于你引进的元素或属性在第一个
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(72)