XML与中间件无疑是两种热门的技术,那么二者是如何结合的呢。
随着XML及其相关技术、应用的发展,XML已经成为了万维网重要的信息发布标准和表示技术之一,越来越多的应用之间通过XML来进行数据交换。XML的跨平台性和强适应性很快得到了中间件研究领域的肯定,并因此而产生了大量的相关研究和相关产品。同时,随着XML技术影响的不断扩大,大量面向XML的应用层出不穷,客观上对基于XML的中间层服务和工具提出了大量需求,一些厂商和个人也纷纷投入到XML服务和工具的开发中来。XML 中间件(XML Middleware)应运而生。
严格的说XML 中间件可能还不能看作一个概念,虽然有些人尝试着为其下一个定义,但这些定义仍然各有侧重,并不能很好的涵盖当前所存在的各种所谓的XML中间件产品,这或许正是一个新的概念要诞生前的混沌,毕竟XML 中间件这个称谓已经开始被到处使用了。一般来说,我们可以将XML中间件理解为与数据库的接口(以XML来查询数据库,并返回XML结果)或者是与Web浏览器的接口(传递XML信息,并通过XSL组织显示),当然,这个理解并不是很确切。本文并不想给出XML中间件的定义,只是想通过揭示XML中间件的发展现状,对各种所谓的XML中间件的比较分析,论述中间件与XML的关系,希望能起到抛砖引玉的作用。
根据所掌握的情况,依据XML技术在中间件实现中所处的地位以及其对中间件功能和结构的影响,作者将当前的中间件与XML的关系分为三类:
- 旧功能,新技术--XML技术与传统中间件的功能结合
从诞生的那一刻起,XML技术就和数据有着千丝万缕的关系。要理解XML与中间件的关系,我们可以通过这一特性入手,抓住数据这条主线来进行分析。对于传统的中间件系统来说,XML技术最具吸引力的地方莫过于其能够描述任何类型的结构或半结构化信息和对资源快速包装和集成发布的特性,所以XML首先在一些与数据密切相关的中间件系统中得到了应用,例如数据库中间件、数据集成中间件和一些MOM中间件系统。但是对于这些传统中间件系统来说,XML技术的采用并没有改变其原来的目的或主要功能,例如数据库中间件仍然负责对各种数据库系统的连接和访问,XML技术的采用只是改变了原中间件系统的数据表示、组织和传递方式。例如xmlBlaster 工作组的xmlBlaster产品,它通过XML编码在发布人员和订阅用户之间传递消息,但xmlBlaster的主要功能仍然属于MOM中间件系统。不容否认,XML技术的采用确实会给这类中间件的实现和使用带来相应的改变,但其主要功能并没有发生变化,即采用了XML新技术,但旧有功能不变。
- 新应用,老技术--面向XML技术的中间件
XML技术所带来的强大冲击促使着面向XML的应用如雨后春笋般的层出不穷,这些应用客观上需要一类专门的中间件系统为其处理与XML相关的方方面面,包括相应的XML开发接口。例如,DOMParser、BML、JDOM、XML Security Suite、easyXML、SAXON、SAX、 Pyxie、 Xml2Beans、 dom4j、Cost、DT4DTD等等。它们其中有些是由原来的面向SGML或是HTML的工具改造而来的,有的是面向XML文档和模式(包括XML DTD、XML Schema、XDR、SOX、Schematron、DSD、DCD、DDML等等)的解析器或是XPath的语法分析器,或是其他技术到XML的开发接口或是转换器,可谓是是多种多样。对于这些系统的归类也众说不一。从中间件的角度来看,也有人将它们归类为XML中间件一类,它们所采用的中间件实现技术、标准和其他传统的中间件产品没有本质的区别,真正的区别应该是体现在应用上,严格的说这只是中间件技术在新领域内的进一步应用,即新的应用方向,老的实现技术。
- 新功能,新技术--XML技术与中间件的深层结合
XML技术对中间件技术领域的影响并不局限于此,目前,一些中间件方面的研究已经注意到了XML的技术优势,并希望将其应用到中间件的设计与实现过程中来。例如2001年在加拿大多伦多所召开的XML技术与软件工程XSE2001(XML Technologies and Software Engineering)会议中的一大主题就是如何通过XML技术开发出新一代的分布式软件框架结构和中间件系统。其集中体现在如何应用XML来实现具有更灵活的集成性、安全性和协作性的中间件系统或分布式软件。显然,人们希望通过采用XML技术能够为中间件技术带来新的活力和新的基本功能。目前,一些诸如移动和自适应的中间件系统正在采用XML技术来改进中间件技术本身。从原理上来看,这类中间件的研究或应用与我们上面所讨论的两种类型不同,XML技术与中间件技术结合的更为紧密,XML技术的采用为中间件本身带来了功能上的增强或是新的功能,所以我们把它定义为新功能,新技术。从某种意义上说,作者更倾向于将这一类中间件系统称为XML中间件。
为了帮助进一步理解,以下给出当前较为流行的一些所谓的XML中间件。
XML 中间件 |
开发商 |
开发平台 |
SAX |
Megginson Technologies |
Java |
SAX2 |
David Megginson |
Java |
JDOM |
The JDOM Project |
Java |
SAXON |
Michael H. Kay |
Java |
XML Generator |
IBM alphaWorks |
Java |
XML Master |
IBM alphaWorks |
Java |
XML Security Suite |
IBM alphaWorks |
Java |
PatML |
IBM alphaWorks |
Java |
XML Bean Suite |
IBM alphaWorks |
Java |
easyXML |
IBM alphaWorks |
Java |
XML Entity and URI Resolvers |
Sun Microsystems |
Java |
MDSAX |
JXML |
Java |
Parser Filters |
John Cowan |
Java |
Relaxer |
Asami Tomoharu |
Java |
BML |
Anders W. Tell |
Java |
XInclude Engine |
Elliotte Rusty Harold |
Java |
XML Testbed |
Steve Withall |
Java |
XML Utilities |
David Brownell |
Java |
xmlBlaster |
The xmlBlaster team |
Java |
XML::Grove |
Ken MacLeod |
Perl |
XML::Twig |
Michel Rodriguez |
Perl |
XML::Writer |
David Megginson |
Perl |
Wraf |
The Wraf Team |
Perl |
CGI::XMLForm |
Matt Sergeant |
Perl |
Python XML package |
The Python XML-SIG |
Python |
Pyxie |
Sean McGrath |
Python |
PyXPath |
Dieter Maurer |
Python |
SAX in C++ |
Jez Higgins |
C++ |
ExCost |
JWay |
tcl |
Cost |
Joe English |
tcl |
|
从以上的论述可以看出,XML中间件其实并不是一个成熟的概念,甚至还不属于概念的范畴。或许应该这样说,XML中间件是基于XML技术的中间件系统或是面向XML技术和XML应用的中间件系统。鲁迅说 "世上本无路,但走的人多了,也便成了路。"可以预见,随着XML Middleware的称谓被不断的频繁使用,更重要的是XML技术与中间件技术结合的不断深入,或许有一天XML中间件就会成为一个确切的概念,毕竟中间件和XML属于两大热门技术,它们的结合本就应该具有更大的意义,或许它也同中间件概念的发展一样,需要走一段较长的路,让我们拭目以待吧。
参考资料:
- http://www.garshol.priv.no/download/xmltools/cat_ix.html 提供了XML 工具的各种分类
- Baru, C., Gupta,A., et al.: XML-based information mediation with MIX. SIGMOD Record, 28(2)(1999) 597-599.介绍了一个基于mediator结构的系统,该系统使用XML作为数据模型,以XML-QL 作为检索语句。注:作者(周)将mediator结构看作一种中间件体系结构。
- Carey, M. J., Kiernan, J., et al.: XPERANTO: Middleware for Publishing Object-Relational Data as XML Documents. The VLDB Journal (2000) 646-648. XPERANTO是一种完全基于XML技术的数据发布系统。
- Haas L., et al.: Transforming heterogeneous data with database middleware: Beyond integration. IEEE Data Engg. Bulletin, vol.22.1. (1999) 31-36. GARLIC采用Clio作为数据到XML的转换工具。