Top
首页 > 老文章 > 正文

CORBA和XML:冲突还是合作?

现在经常有人问这样一个问题:“XML将取代中间件吗”?不管怎样,还是让我们一起先来讨论一下XML适合于做什么样的工作,相信您会在我们的谈论中发现答案。
发布时间:2002-09-03 13:07        来源:        作者:李永乐
当有某种新事物产生时,人们总是希望它能做很多事。在计算机领域也同样如此,这篇文章主要是讨论一下当前对人们对XML的热情,没有任何对XML进行挑剔、批评的意思,因为它对许多工作来说是非常优秀的工具。然而现在经常有人问这样一个问题:“XML将取代中间件吗”?所以我想谈一下XML适合于做什么样的工作,特殊地要谈一下为什么它不能取代中间件解决方案,例如CORBA。为了说明问题,我们首先来看一下XML的历史。
XML的历史
XML代表扩展标识语言(eXtensible Markup Language)。它是标识语言标准――SGML(Standard Generalised Markup Language)的一个简单子集,为了适应超文本标识语言HTML一般化的需要,由W3联盟(W3C,World Wide Web Conortium)委员会修改而成的。 SGML被认为是文挡标识语言,像TeX,troff和nroff的后记者。这些语言在文章里增加了一些格式转义符,告诉打字机、激光打印机和其它高质量输出设备怎样用可变尺寸和风格的字体格式化文本。当标识语言在60年代首次出现时,它们设计为用手工编写。用户使用文字编辑器创建一个普通文本文档,然后增加个别的标识转义符标识某些普通文档应该用粗体打印、居中、或其它。当然确保文档内容与标识转义符没有混淆不清的地方这一点很重要。因此每种标识语言都有一组规范区别它们。例如,在nroff和troff里,转义符以一个句点或逗点开始,而tex以一个“\”字符开始。 随着标识语言使用的越来越广泛,人们增加了宏特色。如果用户文档的标题打算用三号粗体居中显示,因为您不得不写四个转义符去改变字体、大小、宽度,所以很快就会觉得厌烦。使用宏,用户可以定义一个简单的宏命令来完成所有这些工作。更幸运的是,如果用户后来决定标题使用楷体,则仅需要改变宏定义,文档中的所有相关处便自动完成更改。
结构与表示
很快,创建复杂文档的作者发现他们维护了大量的宏定义,而从不使用原始的格式转义符。Unix的man手册就是一个很好的例子――为nroff文本格式器定义使用“man”宏,使得创建一致外观的手册页非常容易。 在70年代和80年代,人们逐渐发现使用标识的最好方式,这就是形式化这种方法,创建一组转义符来描述文档的结构,如节、子节、项等,然后分别定义怎样格式化论文中的那些结构元素。通过将这两种定义(结构和表示)分开,使得修改文档的格式,甚至在新文档里重新使用内容变得完全自动化。进而,一些自动化工具可以处理文档,完成像通过列出所有的标题来创建一个内容页这样的工作。如果用户的工作是为一个商业航空公司维护成吨的文档文件,用这种方式标识文档的逻辑结构没有一点儿优点,既然它允许使用多种格式来传递同一份文档的信息。当手册在高清晰度打印机上打印时,是用带有不同宏定义库(troff)的源文本自动地创建像书质量一样的页面,而不是屏幕格式的页面。
SGML、DSSSL和HTML
SGML是ISO设计的一种新型标准化标识语言。为了应用SGML,用户必须创建文档类型定义(Document Type Definition,DTD),它定义了正在创建的文档的合法标志集,使用DSSSL(ISO标准化的文档风格语义和规范语言,Document Style Semantics and Specication Language)定义怎样显示用那些标志标识了的文本。 SGML在需要维护非常大的文档集组织里取得了有限的成功,但是SGML标准自己就有500多页,相关的DSSSL标准也十分庞大,使用一种基于编程语言的语法模式,许多人发现这非常难学。许多用户缺少信心去爬SGML的学习曲线。 然而,此时有人已经在使用一种简单的SGML――HTML(超文本标识语言),它没有任何定义文档外观的相关方法,仅用来在web浏览器里显示HTML文档。原始的HTML规范仅简单的遵从SGML DTD来描述HTML文档的语法,并增加了一个标记来定义到另一个HTML文档的超链接方式。 当然HTML已经比SGML有更广泛的应用,但是随着这种应用的日益扩展,有两个问题变得非常明显。第一个就是HTML仅定义了web页面的元素,没有规定表示的相关方式,因此web页面的设计者没有办法确切地控制他们创建的东西看上去的样子。随着web页面变得越来越复杂,图形元素越来越多,这成为一个严重的问题,于是人们增加一些扩展来允许直接控制字体、字体大小、文本颜色等等的标识(这当然完全违反了原始的设计原则)。与此同时,因为HTML有一个固定的DTD,文档设计者没有办法创建新的结构标识来标识特殊HTML应用的文档结构。没有一种扩展机制(像宏)或定义和控制标识的方法,原来的HTML将完全陷入一种非常尴尬的地步,短期产品开发的压力不可避免地推着它朝另一种标识语言的方向发展,而不仅是怎样控制他或她的文档外观。这些工作的主要目的是高效地处理web页,而web应用的快速增长为web页创造了更大的需求,这些web页能够被web扫描“机器人”( 像读web页的搜索引擎)操作。
进入XML
解决HTML缺少结构化问题的一个方法是简单地向前迈一步,直接在web上使用SGML和DSSSL。然而ISO标准的复杂性阻止了这种行为。在1996年,Jon Bosak,SGML组织的一个有影响的成员,劝说W3C建立一个SGML编辑工作组,为web定义一个简单的、可扩展的SGML子集。最后W3C在1998年二月发布XML1.0规范,通过两个筹备中的规范进一步完善XLL(eXtensible Linking language,定义XML文档怎样被链接到一起)和XSL(eXtensible Style Language,定义XML标识怎样被格式化显示)。
XML应该用作什么?
XML正火热地应用到各种应用领域。在这些应用中,需要存储人们使用的数据,而且用机器操纵它将非常有用。为了存储地址数据,定义和使用XML DTD,书写应用程序产生地址标签,这要比偶然地用邮局代码打印电话号码容易一些。 值得注意的一点是,在XML DTD里,任何地方都可以规定一个XML标识意味着什么?XML DTD的创建者习惯于为他们的标识选择短的、可描述的名字,就像pc用户为他们的文件选择短的、可描述的名字一样,因此XML文件是“自描述”的。例如,对说英语者来说<address>标识标记了一个地址,<date-of-birth>标识标记了一个人的生日。如果DTD创建者不使用这种方式,而是使用了一些我们不知道的私有代码,我们就无法知道它的含义。实际上XML文件像C语言或数据库语法一样是自描述的。
XML不应该用作什么?
在XML应用中,文档内容为了给人们阅读的。既然XML是用来组织人们可读的、文本化的数据的,因此对仅需要机器可读的存储信息来说,它是一种非常低效的方式。嵌入的XML标识提供了一种摘录或格式化特殊部分内容的方法,但是内容自己通常不能被计算机所解释,仅为最终的用户解释,这就是它为什么要存储成人可读形式的原因。当然,编写一个解释器,用它来读取XML文当中的格式化符点数,从而方便处理是可能的,但这又是非常耗时的,因为XML文件相对来说比用户原来的浮点数格式要大得多。 当需要在相互合作的应用程序间交换数据时,可以有其他更加高效地定义和存储数据的方式。这些为了机器通信而定义的数据格式叫做接口定义语言(IDL),因为它们用来定义相互合作的应用程序之间的接口。标识长时间存储人们可读的数据,与标识相反, IDL定义了小的易变包和机器可读的数据,当发生一些特殊事件时,可以在分布式应用程序的各部分间交换这些数据。 接口定义语言称为“中间件”软件的可见部分,这些软件既不是操作系统也不是应用程序的一部分,而是用来将物理分离的计算机的分布式应用的不同部分连结在一起。本质上,成功的中间件解决方案将后台背景融合在一起,尽量少地对分布式系统的用户、设计者和程序员施加压力。目前使用最广泛的中间件都实现了OMG(Object Management Group)组织的CORBA(Common Object Request Broker Architecture)规范。 虽然IDL是中间件最可见的特点,但仍有很多比它更有特点的地方:像CORBA这样的中间件解决方案也提供验证用户和控制对资源访问的安全、处理分布式计算系统里不可避免的失效的错误处理功能、保持计算机网络平稳运行的其他支持功能。在这种分布式应用里数据是易变的,不是永久地存储在某个地方,可能从来不能用人眼看见。在这样的应用里使用XML作为数据编码比CORBA(IIOP协议使用的)用来散转数据的紧缩、原始机器表示要低效得多。当然,如果要求长时间存储数据,并摘录人可读的纲要和报告,则XML将是较适合的媒介,但是对于分布式系统里紧密绑在一起的部件间的数据交换来说,使用XML将是代价很高,毫无意义的。
总结
XML和中件间是相互补充的技术。XML用来标识可读的文档(像web页面)的文本数据的存储和操作,而中间件解决方案(CORBA)将那些可能从来不被任何人直接使用的易变数据的应用交换紧密连结在一起。这些技术中的任何一个都不能彼此取代,而是逐渐地融合使用。 (责任编辑 Sunny)   
加载更多

专题访谈

合作站点
stat