• 热门标签

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

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

交叉引用,虽然你需要知道目标文档的详细结构。X P o i n t e r不需要在D T D中标识,因此解析器不
会验证它的有效性。如果你选择直接支持X P o i n t e r值的X M L软件,可以考虑利用它实现链接,
然而或许它仅仅是一种我们应该密切监视的未来的技术,它在目前的环境下并不是真正实用的。
显而易见,最简单的X P o i n t e r是U R L,只要有理由使用独立的文档保存数据,使用U R L表示
关系就是非常值得的。
假设我们的旅游公司负责组织一次会议。会议的一项安排是为每个与会代表安排单独的出
游路线。因此,应该为会议建立一个X M L文档,并且分别为每个代表的路线建立一个X M L文档。
例如:
程序清单4 - 3
现在,我们只能链接到X M L文档,一旦X P o i n t e r规范标准化,就能够链接到文档中的某个
元素。例如,旅馆的所有菜单应该位于一个文档中,每个代表选择的菜单应该是指向各个菜单
的X P o i n t e r。
另外,利用应用程序级的关键字处理关系也是一种非常可行的方法,它提供了最大的灵活
第4章数据建模与XML使用95 下载
性,你可以采用任何有效的方式对关系进行操作。唯一的缺陷是X M L解析器不能为你提供任何
帮助。借助X S LT样式表中的k e y ( )函数,能够以非常直接的方式处理通过这种方法实现的关系。
要了解更多有关链接的信息,参见第8章。
3. 表示属性
当你在信息模型中标识了特性之后,就出现了一种经典的进退两难的局面:在X M L文档中,
你应该使用X M L属性表示它,还是使用嵌套的(子)元素表示它?一旦做出决定,还有其他因
素需要考虑。
元素还是属性
在下面的例子中,书的特性表示为X M L属性:
程序清单4 - 4
对于相同的信息,下面的例子将特性表示为子元素:
程序清单4 - 5
哪种表示方法更好?这是常常令首次设计X M L文档的人感到困惑的一个问题,虽然有人会
回答“无所谓,它们没什么区别”,但是这个问题的确值得详细探讨,通过我们的分析,你将能
够根据实际情况权衡利弊。然而,需要提前说明的是,即使专家在这方面也不能达成一致意见,
而且有时他们会产生严重的分歧。
首先,让我们看看如何从哲学角度分析到底应该选择哪种方法。有人认为子元素代表被包
含的对象—它有自己的存在和独立于容器的标识—而属性代表与对象相关联的值,它没有
自己独立的生命。这种论点的含义非常深刻,如果你准备沿着这条路线走下去,最好在与别人
争论之前先研读一下亚里士多德的论著。依据这种逻辑,你最终会决定将a g e表示为属性,而将
p l a c e - o f - b i r t h表示为子元素(因为地点是个有自己权利的对象)。这种思路产生的结果不太直观,
而且也不是非常有帮助,它会使你陷入对每个特性徒劳的争论中。
另一种推理路线是揣摩X M L标准设计者的意图。早在S G M L中就已经存在子元素和属性之
间的区别了,因此我们可以问这样一个明显的问题:最初的S G M L设计者如何看待这两种结构的
角色呢?
正如我们所知,S G M L最初是作为一种标记语言为发行提供文本。后来,其他应用程序也将
它作为通用的数据交换格式。从标记语言角度考虑, S G M L中的内容(最终用户将在页面上看到
96使用XML 高级编程
下载
的文本)和元数据(有关内容的信息,它是供执行各种处理操作的软件使用的)有着明显的区
别。简单来说,内容是用元素标记中的文本表示的,元数据是用属性表示的。这种差别一直保
持到H T M L中,而且在H T M L的发展过程中引起了许多问题:例如客户端J a v a S c r i p t部分不能作
为属性被正确处理,因此要将它们放置在< s c r i p t >元素中;但是由于不希望用户看到这些代码,
因此要将它们注释掉—这简直是滥用注释。
所以,S G M L中元素内容和属性之间的差别从本质上体现在信息用途上的差异:元素内容是
供文档的读者使用的,属性是供印刷商或他们的软件使用的。当然,一旦将S G M L或X M L用于
软件系统之间的数据交换,这种差别就丧失了意义。即使有人类读者,例如电子表格,决定哪
些供软件使用,哪些供用户使用也是很困难的。
综上所述,回顾历史并不能使我们得到正确的答案。所以,我们能够得出这样的结论:只
要从实用角度考虑,你可以自由选择使用元素或属性。
下面我们将从正反两方面分析一下这两种方法(参见表4 - 1)。
表4 - 1
优点缺点
X M L属性D T D能够对值进行约束: 如果只允许有限只支持简单的字符串值
的几个值,例如:“y e s”和“n o”,使用属
性非常有效不支持元数据(即“属性的属性”)
D T D能够定义缺省值
验证I D和I D R E F的有效性无序
占用较少的空间(当你通过网络发送几
千兆字节的数据时,它的优势非常明显)
对于某些数据类型(例如, N M TO K E N S),
能够进行空白的规格化,它能够减轻应用
程序解析的压力
便于使用D O M和S A X接口进行处理
能够访问未解析外部实体,例如:
二进制数据
子元素支持任意复杂的值和重复的值。空间占用率略高
有序
支持“属性的属性” 编程比较复杂
当数据模型改变时,子元素可扩展
至于如何权衡这些因素,取决于应用程序的实际情况。许多有经验的设计者认为最重要的
因素是变化的潜力:随着应用程序的发展,是否能够扩展文档或消息格式。这一因素使得子元
素优于属性,因为实际应用中最常见的变化是将一个简单的特性(例如:“作者”)扩展为复杂
的结构化特性(例如:作者列表,其中每一项都由姓和名标识)。但是对于你的应用程序来说,
这是否是正确的选择,只有你自己才能决定。值得一提的是,最初由M i c r o s o f t发起的B i z t a l k提
出了截然相反的建议,它们认为属性更加可取,因此你应该根据实际情况来决定。
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(41)