• 热门标签

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

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

来的使用是未知的。现在我们面临着一种风险,即文档里有一个模棱两可的“ L i g h t”元素。
给< L i g h t >声明两种用途非常困难。第一个声明需有交通信号灯并枚举它的颜色属性。枚举
非常重要,因为对于交通信号灯来说只有三个有效的颜色。一个应用可以基于这些属性的值用
来做一些错误检查:
194使用XML 高级编程
下载
第二种声明在它的颜色属性上没有特别严格的限制。的确,路灯的选择常常基于价格,而
不是颜色。但颜色还是作了如下描述:
下面看看这段混有两种D T D的X M L应用文档:
程序清单7 - 3
从这一点,我们不能区分L i g h t元素指的是交通灯还是街灯(没有检查暗含在D T D中的颜色
的限制)。那么一个正在接收的应用程序怎样知道颜色这个属性是否可接收呢?我们不知道哪一
个元素查找哪一个D T D,以及第二个L i g h t元素的颜色属性值对于用于交通灯是无效的。这个问
题对格式正规的文档就存在多义性。而且如果L i g h t和C o l o r名字需要确认,我们可能会给应用制
造一大堆混乱,这就是提到的名字冲突问题。
7.2 命名空间
XML 命名空间是解决多义性和名字冲突问题的方案。根据W 3 C组织的推荐书“X M L中的命
名空间”(1 9 9 9年1月1 4日):
⋯⋯一种名称的集合,通过一种U R I引用来标识,作为元素类型和属性名称,它应
用于X M L文档。
命名空间是一组具有结构的名称的集合;这听起来像一个D T D,的确,一个D T D可以是一
种命名空间。在这种情况下, U R I可以是在你的服务器上的地址,比如:
h t t p : / / w w w . w r o x . c o m / x m l d t d s / P u b C a t a l o g . d t d
尽管U R I不需要是一个U R L(如果你不能明确二者的差别,我们简单描述一下它们)。在这
种情况下,命名空间是指在P u b C a t a l o g . d t d里用到的名称。因此如果我们通过某种方式把使用
B O O K元素与命名空间联系起来,将会知道在已连接的文档里任何关于B O O K的引用将要在我们
的P u b C a t a l o g . d t d里涉及到它的用法。
D T D规定了一个文档的整体结构(并且是那么的准确),我们正好以一个命名空间为资源,
规划所需要的定义。说到这里,一个命名空间不需要是一个像D T D那样的有固定结构的定义,
而这个有限的定义领域使命名空间广泛应用于X M L。如果命名空间是D T D或者模式,我们使用
的定义必须在所描述的结构和语法上保持连续性。但是我们可以自由地使用需要的名称,并且
使用命名空间来区分元素的使用。
第7章命名空间和模式使用195 下载
于是,为了在文档里有效地使用命名空间,而文档中连接着来自不同地方的元素,我们需
要两部分:
• URI引用,定义了元素的使用方法。
• 一个别名,我们可以用此来标识元素来自哪个命名空间,这将采用元素前缀的形式(例如
在< c a t a l o g : B o o k >那里,c a t a l o g是模糊的B O O K元素的别名)。
7.3 定义和声明命名空间
看到了命名空间在X M L里所带来的优点,我们需要仔细看一下如何真正地使用它们。首先看一
下在文档里怎样声明一个命名空间,然后看一下在文档里怎样使用命名空间,最后再给出几个例子。
通常,简单描述的特性通常作为属性来建模,并且这就是命名空间是怎样在X M L声明的。
但这里有几个变形与转化,于是我们将要一步一步地去学习当在一个X M L文档里声明一个命名
空间时能描述什么。
7.3.1 声明一个命名空间
如果每个人在他们打算去认识一个命名空间声明,我们需要一个保留的词汇给他们。命名
空间推荐标准给了我们x m l n s。属性值就是U R I,其唯一地定义了在用的命名空间。U R I经常是
一个指向D T D的U R L,但它并不必须是。用这种方式管理一个U R I,以唯一区分命名空间已经足
够了。这里有几个简单的命名空间声明:
关于We b资源的术语可能令人混淆。统一资源标识符( U R I )是一些资源的唯一名称。统
一资源定位器( U R L )根据协议和网络位置定位资源。第一个例子是U R L,因为它允许一
个浏览器利用H T T P从一个特定的位置得到资源。第二个例子给资源命名但没提供位置。
字面上的u r n来自于U R I。
最初使用命名空间动机之一是能够从不同的来源混合名称,从那以来,这对于能够提供别
名非常有用,而你能在一个涉及到声明的文档里通篇使用这个别名。可以靠加个冒号和你的别
名到x m l n s属性而实现该功能。因此上面的例子就变成了:
在这里前缀c a t a l o g将要涉及到来自P u b C a t a l o g . d t d的元素,而其他的将要涉及在o r d e r. d t d里
声明的元素。在这些声明出现之后,我们能只使用B O O K去提及最初的命名空间声明,以及用
O R D E R去涉及其他的(不用U R I)。使用这些声明和它们的别名让我们提供了更多的信息。
图7 - 1是组成命名空间声明的部分。
7.3.2 限定名
如果不能和一个我们想要使用的特定的名称绑定在一起,声明一个命名空间是没有什么用
处的。这些已经通过利用限定名做到了。这就可能是你希望的—一个从命名空间勾画出来并
196使用XML 高级编程
下载
经其限定了的名称。通过别名创建一个确认过的名称,确切地说称作命名空间前缀,并把它放
在名称的开始。回到在目录和表单D T D里包括B O O K元素这个问题,假如我们像下面那样用
c a t a l o g前缀声明了一个目录命名空间:
我们能够使用前缀c a t a l o g,使元素来自哪个命名空间更加明确。于是<catalog:Book />将要
告诉我们B O O K名称来自catalog 命名空间声明。同样Order 命名空间也有B o o k名称,但限定过
的名称避免了多义性和冲突的可能性。名称Ti t l e作为来自一个特殊的命名空间被清楚地验证过。
命名空间前缀经常被提及为前缀,而名称本身是基本名。
限定名可被应用于元素和属性名称。这里有一个混合一些命名空间的例子:
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(71)