EII是最具代表的数据孤岛间数据的交互与集成解决途径之一。它所蕴含的思想相当简单:在信息层集成。与其他常见的集成方案相比,企业应用集成(EAI)在应用层进行集成,把信息从一个套装应用软件转移到另一个套装应用软件;门户软件则在表示层进行集成,通过集成的 Web界面,为用户提供综合信息。这两种方案均缺乏从多个后端数据源(包括套装应用软件)采集信息,然后提供给多个潜在用户界面的功能。EII可以把信息本身集合成统一视图,而EAI或门户软件都不可能做到这点。
从技术角度看,EII方案也颇具特色。它采用分布式查询方法来采集并集成多个数据源的信息,这种查询法通常称为联合查询(federated query)。EII先对多个数据源分开查询,然后把结果汇集(即联合)起来。这完全不同于其他集成技术。EAI常常通过交换中心或总线,把消息从一个应用软件传到另一个应用软件; EII采用的是拉取机制:联合查询找到用户应用软件所需要的数据,然后放入到有上下文的用户视图中。这种按需获取数据信息的办法,提高了操作的实时性,降低了操作的复杂性。
自EII技术问世以来,业界已经尝试了多种途径设计和实现EII产品。
EII的起源和产品
现有的数据集成方案有许多,早期使用自定义接口方式,开发针对某种需求的工具,这种开发可复用性差,创建和维护的成本很高。后来使用数据仓库技术,实现数据的集成,但数据仓库同样不宜于维护,成本高,据估算数据仓库每年的维护成本高达100万美元。当企业应用集成(EAI)推出的时候,确实解决了很多问题,它采用适配器体系结构,支持面向流程的集成(即应用编排),但是同样维护成本很高,数据并非实时,用于查询的数据范围很窄,仅限于预先设计好的归档的数据,同时项目开发的周期较长。而关系数据库的集成,虽然支持对多个RDBMS表的SQL查询支持可查询视图,但不能自动集成非关系数据,比如来自Web服务和打包应用的数据等。因此,需要一种方便灵活的可以按需设计和获取数据的集成方式。EII便应运而生,它在底层的数据层将分散的数据按需融合为一个整体,配置灵活,降低了维护成本。
为了更有效的集成,众多厂商纷纷推出自己的EII产品,如Bea在2002年11月借助Xquery的优势,推出了Liquid Data for WebLogic的数据集成产品。倍多科技也推出了自己的EII产品Ipedo。此外还有许多同类的产品相继面世。它们实现的方式相差不多,都采用了XML以及Xquery的相关技术进行多元数据的融合。
BEA的LiquidData使用Xquery访问XMLView,统一数据接口,简化集成的复杂度。它提供了对来自异种数据源的数据的实时访问和集中,并增强了前台应用的可见度。这里的"实时"是指在数据访问时使用可获得的最新信息。Liquid Data与数据仓库不同,它通过直接集成和访问企业各种运营系统中的数据来提供对企业当前状态的访问,而数据仓库存储的是特定企业数据预先集成的拷贝,这些数据通常是几天或几周以前的。Liquid Data把重心放在数据的可见度或者集成的读取访问上。BEA的WebLogic Integration为需要更新支持的应用补充了Liquid Data,它的目标是那些通常需要同时快速访问一个或几个商业实体集成视图的前台应用。我们对客户全面的观点就是一个经典的前台应用。Liquid Data采用了一个XML数据集成方案,从而区别于过去的EII方案。它结合了EAI以及关系数据集成方案的很多优点,并且摈弃了它们的弱点。 Liquid Data提供了基于标准的企业数据的XML视图--这些企业数据源要么以虚拟XML文档的形式予以表现出来,要么以一个采用XML参数并生成XML结果的 函数集的形式表现出来。
Ipedo则利用近乎XML Hub的设计,对多种数据源进行统一的访问。Ipedo通过XML和Web Service标准技术,联系横贯整个企业的异构系统、应用、数据源等,完成在企业内部的ERP、CRM、SCM、数据库、数据仓库,以及其它重要的内部系统之间无缝地共享和交换信息的需要,实现对企业原有各种应用系统的集成和统一管理。
Xquery实现数据集成
Xquery的来源
XML我们已不再陌生,它的飞速发展在一定程度上也是由于数据集成引发的。XML使得愈来愈多的数据有了可以共同遵循的标准格式,如何将XML的“数据”转变成有价值的“信息”将是下一代XML发展的重点。要对数据作有效的管理需透过数据库管理系统的应用,但由于XML的数据格式己和传统数据不同,不再适用传统的数据库及查询语法,因此W3C依据XML的特性发展出XML的查询
Xquery1.0规范的发展及现状
目前Xquery1.0规范是由W3C所制定的,它是以Quilt为参考,参酌需求文件研拟而成。Xquery标准的制定过程并非没有坎坷,规范从提出到目前共修改五次。第一次提出时间为2001年06月07日,第一次修改时间为2001年12月20 日,其后大约每个四个月修改一次。现在已经基本成熟,并且支持Xpath2.0以及名称空间等特性。
Xquery的使用方法
XQuery表示法的一种是以路径(Path)的方式来表示,其语法是基于XPath的语法。 XPath即XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言,目前发布的是2.0版本。应用XPath的XML相关标准有XSLT及Xpointer等。
Xquery1.0有以下表示方式:
路径表示法:其语法是基植于XPath 1.0的语法,以路径方式浏览 XML文件。路
document("file:///D:xquarkMyLibrary.xml")/books/book [bookID = “T10283”]
数据元素建构表示法:一般而言在进行查询时,除了对现有的文件元素进行查询外,一个查询动作所常做的是产生一新的元素。一个简单的方法是使用XML 的标记法直接将元素包裹于查询中,也就是说XQuery允许以XML元素本身作为查询的表示法,此种查询表示法称为 Element constructor。
FLWR表示法:XQuery 中最强大的特性是 FLWR 表达式,它是一种典型的能够完成具有某种实际意义的查询的表达式。FLWR表达式包含模式匹配、过滤选择和结果构造这三种操作。FLWR表达式是由FOR—LET—WHERE—RETURN四个关键字定义的子句构成的,在最新的标准中则更新为FLWOR,O代表新加入的Order by子句。
条件表示法:条件表示法的语法为
→"if " "(" Expr1 ")" "then" Expr2 "else" Expr3
也就是此表示法会判断Expr1的条件式,若为真则传回Expr2,否则则传回Expr3。
限定表示法:在某些查询的情况下,需测试是否全部或只有部份元素符合某个条件,因此XQuery提供了两个表示式,分别为“some”及”every”,用来分别表示”部份”及”全部”的评量。
算子和函数表示法:算子和函数表示法使用各种表达式和函数定位文件元素。使用的表达式包括:
(1) 算术表达式:XQuery提供了一般算术常用到的加(+)、减(-)、乘(×)、除(÷)及MOD等表达式,还有正号(+)及负号(-)。
(2) 比较表达式:XQuery提供多种的比较表达式,实现两个运算值的比较,并将比较结果以布尔值(Boolean)传回。=(等于)、!=(不等于)、<(小于)、<=(小于等于)、>(大于)及>=(大于等于)用来作为比较表达式的运算符。
(3) 逻辑表达式:XQuery使用两个逻辑的表达式「AND」及「OR」,其比较的意义和其字面上的意义相同,比较结果传回布尔值。
(4) 序列表达式:XQuery提供一个操作数「,」作为序列的操作数,从左到右排列顺序。由于「,」操作数也使用于作为函式参数的分隔,所以同时使用括号作为函式的序列运算。
其它表示法:包括排序:Sorting;联合:Union;计数:Count等,详情可参阅Xpath2.0规范。
Xquery的优势
Xquery统一、便捷, 具有标准、统一、通用的解析、查询和样式显示接口,避免了特定的文档格式的限制,以及接口程序的重复开发和分发,提高了开发效率。与传统的通过执行SQL获取数据的方式相比,Xquery返回一个新的、从旧文档中构造出来的结构良好的 XML 文档,而 SQL 返回的则是一个新的、从数据库中创建并包含所需信息的记录集,此记录集本身不具备XML的自描述的特性。
带有自描述、可扩展、富含语义特征的标记,使得数据的含义十分直观。它能够索引同属元素的次序,例如,在部队建制中,建制的次序通常是传递着一定意义的。而在记录集中,记录的次序是没有意义的。当然,次序没有意义是关系理论所要求的(这样,通过建立索引,搜索记录就变得更为容易,在性能上得到了优化),关系表当中的这种次序关系
若是标记的含义还不够明确和充分,可自由注释,而不会影响文档的解析。
在Schema或者 DTD 的帮助下可以创建出更加规范、容错和智能的文档。
Xquery实现数据集成的可行性
既然Xquery具有诸多优势,可以访问多种数据源,具备了在各个数据孤岛间进行数据集成的功能,而且IBM、BEA等企业的产品也已经开始商业使用,那么用Xquery实现EII是可行的。
EII的Xquery实现技术
本文通过一个小的用例,来具体介绍一下如何实现。这个例子只是假想的技术设定,只用于讲解技术问题,不用去分析其在现实中是否存在或者是否有其实用商业价值。
实现EII的用例
软件环境设定及准备条件:Java JDK1.4 ,XqueryEngine1.0,Oracle9i和SQLServer2000数据库及JDBC驱动。实现手段:运用Java和Xquery1.0规范,以及XSL、JDBC等实现数据集成。
例子场景:有两个数据库,一个是Oracle9i存放书的信息,另一个是SQLServe
系统结构设计如图:
元数据是关于数据的结构(语法)和含义(语义)的信息。元数据结构化方法的例子有关系数据库管理系统(RDBMS)目录、Java 库目录和 XML DTD 和 schema。这些每个都定义了数据是如何表示和使用的。此外,还有用于内容管理的实例和类的元数据。实例元数据只是储存在内容管理元数据储存库中的数据,并引用存储在别处的对象,例如文档、Web 页面、音频和视频文件。分类和索引中的条目也同样被认为是实例元数据。类元数据,从某种角度来说,和 RDBMS 目录和 XML schema 意义相同,用来描述实例元数据的结构。
我们可以利用JDBC中的getMetaData()的方法获取表的结构,也可以利用数据源的元数据配置获取。运用Xquery生成XMLView,我们借助XDIM中间件生成。
执行前,通过Xquery分析程序分析Xquery语句,解析出其中的数据源、数据变量、结果集的结构等信息,构建查询计划。依照数据源的数量,逐步替换分解查询语句,将查询分割为对单个数据源的条件查询,最后组成查询计划。
对于XML文档类型的数据源的访问,我们可以直接借助XqueryEngine1.0工具执行获得。
查询底层将Xquery分割成针对单个数据源的子查询,并将其转换为SQL查询,调用数据库连接器完成数据的查询。
读取数据源配置,取得针对用户信息的数据源的配置信息,建立JDBC连接,执行SQL查询,取回数据。这里就不再赘述了。
将获取的结果集中的数据再替换到子查询要返回的结果集中生成子查询的XML结果集。
将多个子查询的结果合并为最终结果,本例借助Xquery查询器实现。XqueryEngine1.0是个实现XQuery查询的小工具,此处我们用来实现简单的数据查询。将上便两个查询的XML结果与保存借阅信息的XML文档作为数据源及逆行那个查询,便可以获得最终的查询结果。这里就不再赘述了。
关键技术
XQuery 的词法分析需要考虑的问题是不同的词在不同的上下文环境下有不同的语义,需要单独分析。比如FLWOR中WHERE 在一般情况下为关键字,但是如果作为元素标签或元素构建表达式里的内容则不是关键字。所以分析时需要记住当前的上下文状态,根据不同的上下文状态选择不同的词法分析函数。
语法分析则根据词法分析器提供的语法单元构造查询的语法树表示。通常对于XPath 表达式,构建Step节点。对于FLWOR 表达式,则将FLWOR定值的所有的变量看作一个变量组,求出所有的变量组绑定,然后对每一个变量组的绑定计算一下where 表达式的值,如果为真则计算Return 子表达式,作为结果的一部分。
可以根据语法树分解Xquery,但是要注意FLWOR语句的执行顺序,减少不必要的中间结果,防止内存溢出等错误。
在做代数替换时,要减少重复查询。构建的变量集合需一一对应,在最后结果执行前确保每个变量已经赋值。
Xquery实现EII系统的意义及前景
Xquery使用元数据实现数据的集成,而元数据的出现解决了异构数据的集成问题,从而使得基于Xquery 的EII也支持多种异构数据源。另一方面,学习和使用Xquery都很容易,设计Xquery比起设计异构数据源的不同访问接口要容易得多,也高效得多。从而,设计和使用针对多个异构数据源的Xquery查询
借助Xquery将对多元数据的访问统一为Xquery查询语句,这样就不必针对不同系统分别设计各自的访问通道,简化了访问接口,提高开发效率。只需按照需求设计相应的数据视图便可。同时,由于支持Xquery标准,所以在未来的新系统开发中脱离代码的迁移,实现重用。各系统间可以仅使用Xquery实现数据集成,而XML的自描述性和易扩展性更加提升了Xquery适应多种数据集成需求的能力。
系统集成使得企业能够轻松应对信息时代海量信息,实现实时数据查询等集成操作,提高企业运作效率和市场竞争力。用Xquery实现EII,是现今流行的开发技术,具备广阔的市场前景。
依据Xquery实现EII,可以不需要涉及多个系统间的繁复调用,运用统一的XML数据结构,传递数据,从而简化交互环节,提高数据集成系统的开发效率。对于Xquery实现EII的技术问题,还需要做更深入的研究。