admin 管理员组

文章数量: 1184232


2024年4月19日发(作者:eventargs是一个类吗)

维普资讯

利用XM L与XSLT实现异构数据库间 

的数据转换 

胡 广 ,孙 焘 , 闰英辉 

(大连理工大学大学生创新院,大连116023) 

摘要:异构数据库系统的差异对数据交流和各部门间的协调带来了很多困难。通过对异构数据 

库操作方法的研究,以及对已有解决方案的分析,提出了基于XML与XSLT的新方案。 

此方案通过生成异构数据库转换所需的SQL脚本,从而实现异构数据库间数据的转换。 

关键词:XML;XSLT;跨平台SQL脚本:异构数据库 

0 引 言 

由于信息化建设的阶段性特征.使得很多企业、 

机关存在多种数据库并存的现象.而由不同核心技术 

构建的信息系统就像一个个“信息孤岛”.各自有着不 

同的处理对象、操作方法和专用客户端,异构数据库 

问信息如何有效进行转换的问题变得日渐突出。 

文件和含有转换规则的模板文件.即XSLT样式表。 

每一个XSIJT样式表定义了源树和结果树中对应部 

分的转换规则,每条规则都使用以下方式:“如果在输 

入中遇到此条件,则生成下列输出” 

2.2 XML+XSLT生成跨平台SQL脚本的方案 

由于XML的数据描述性和扩展性.本方案采用 

XML文件存储数据库信息.以保证数据存储的结构性四. 

然后以XSIJT样式表文件作为模板来解析这个XML 

文件.即从XML文件中提取出所需的数据.按照 

XSLT样式表文件所定义的格式组合起来生成所需的 

SQL脚本文件.充分利用了XSLT解析XML文件的 

1 XML+解析代码实现异构数据库数据转 

换的方案 

目前.已有的方案采用的是XML+解析代码.也 

就是利用XML文档作为中间文件来存储源数据库信 

息 即源数据先以XML文档的格式从源数据库中导 

灵活性。其实施的具体步骤如下: 

①采用模板映射法将源数据库数据信息存储到 

出来.然后根据XML文档的结构形式.使用Jaya代 

个良构的XML文件中同: 

⑦编写转换XML文件所需的XSLT样式表模板 

码提取出其中的数据信息.然后检索目标数据库.将 

新数据插入到目标数据库中.从而实现不同数据库间 

文件: 

的信息转换【I 1

但由于解析所编写的代码量相当大.导致系统开 

③利用XSLT解析器解析以上的XML和XSIJT 

文件.输出SQL脚本: 

发的难度增加 此方案的数据交换比较分散,因此维 

护起来也比较困难 

④将所得SQL脚本导人到目标数据库中运行,即可 

生成目标数据库系统中的数据库文件.完成数据的转换。 

其结构示意图如图1所示 

现 

2 XML+XSLT生成跨平台SQL脚本方案 

代 

及其分析 

计 

1 XSLT其工作原理分析 

算 

2.

机 

^ 

XSLT文件本身就是一个XML文件.它在表达文 

件转换的时候被链接到需要转换的XML文件.再通 

图l xML+xSL1’实现异构数据库问数据转换 

总 

第 

过XSLT解析器实现对XML文件的转换 

二 

上 

转换XML文件通常涉及3个文件:源文件、结果 

收稿日期:2007—04—25 修稿日期:2007—08—08 

的结构示意图 

,、 

五 

期 

作者简介:胡广(1986一),男,湖南衡阳人,学士,研究方向为WebGIS、异构数据库 

④MO DERN COMPUTER 2o07.8 

维普资讯

/ 

实践s经验 / 

在整个方案中.XSLT模板文件和XSLT解析器 

解决了至关重要的逻辑问题。因此,只需要构造一些 

对应平台的XSLT样式表模板文件.就可以生成将数 

据转换到不同数据库平台的SQL脚本。由于XML文 

件存储数据库数据的格式是不轻易改变的.所以解析 

XML文件的XSLT文件也不需改动.更不用改任何应 

用程序。这使得系统的开发和维护变得规范且简便。 

至于如何利用XSLT解析器解析XSLT文件的问题就 

更加容易解决了,常见的编程工具(例如Delphi等)都 

封装了解析XSLT的控件,一些公司(例如Sun、Oracle 

和Microsoft等)也有自己的XSLT解析器。这些都极 

大地方便了整个方案的实现 

2.3 XML+XSLT生成跨平台SQL脚本方案的 

应用实例 

下面结合项目中的一个实例.具体说明本文中方 

案的实现 由于篇幅问题本文中仅以生成Create语句 

为例阐述一下原理,该例中源数据库为MySQL,目标 

数据库为SQL Server 2000。 

首先,定义了一个良构的XML文件结构,用于存 

储源数据库信息,例如test.xml,其具体内容如下: 

<DataBase> 

<Table> 

T<ablelnfo> 

<!~存储表的信息一> 

<Name>TableA</Name> 

<FieldList> 

<Field> 

<!一存储字段的信息一> 

<Name>fieldone</Name> 

<DataType>integer</DataType> 

<DataLength>lO</DataLength> 

<IsPrimaryKey>Y</IsPrima— 

ryKey> 

<IsForeignKey >N</IsFor- 

eignKey> 

<IsEmpty>not null</IsEmpty> 

</Field> 

</FieldList> 

<frableInfo> 

</Table> 

</DataBase> 

文件根节点为<DataBase>.其下可包含若干 

<Table>子节点.每个<Table>节点下又包含了<Field. 

List>节点,逐级向下,形成了一个树形结构。 

为了格式化这颗树.提取所需数据,系统为每种 

转换方式(这个例子中是MySQL到SQL Server 2ooo) 

定义一个相应的XSLT样式表文件test.XS1.其具体内 

容如下: 

<xsl:output method=”text”,> 

<xsl:template match=”DataBase”> 

<!一调用主模板~> 

<xsl:call-template name= table-create”,> 

</xsl:template> 

<xsl:template name=”table—create”match=”Tablelnfo’’> 

<xsl:for-each select=’’Table/Tablelnfo’’> 

create table<xsl:value—of select= Name”,>f 

<xsl:apply—templates select=”FieldList”/> 

<xsl:if test=”FieldList/Field/lsPrimaryKey=-y ”>. 


constraint 

<xsl:value-of select=”Name”/>primary key(</xsl:if> 

<xsl:apply-templates select=”FieldList/Field”/>)go 

</xsl:for—each> 

</xsl:template> 

<xsl:template name=”field”match=”FieldList”> 

<xsl:for-each select=”Field”> 

<!__判断此字段是否是第一个字段,如果不是则 

在此字段信息前加逗号一> 

<xshif test=”position0 1=1”>.
</xsl:if> 

<xsl:value-of select=”Name”, 们2: 

<xsl:cho0se><!一此处用一个选择语句实现异构数据 

库间数据类型的转换一> 

<xshwhen test=”DataType='integer ”>int</xshwhen> 

</xsl:choose> 

(<xshvalue-of select=”DataLength”,>) 

<xsl:value-of select=”IsEmpty”,> 

</xshfor-each> 

</xshtemplate> 

<xshtemplate name”fieldname”match=”Field”> 

<xshif test=”IsPrimaryKey='Y ’><xsl:value-of select=” 

Name”/>)</xsl:if> 

现 

</xsl:template> 

代 

. 

</xsl:stylesheet> 

计 

算 

上述文档中共包含了3个模版:<xsl:template 

机 

^ 

name=”table—create”match="Tablelnfo”>.这是整个文 

总 

档中的主模板.通过利用其他的元素以及调用其他模 

第 

板来输出全部的结果.其中包含两个子模板,一个是 

二 

上 

<xshtemplate name="ifeld”match="FieldList”>.它是用 

,、 

来输出字段信息:另一个是<xsl:template name=” 

五 

期 

MODERN COMPUTER 2007.8 @ 

维普资讯

ifeldname”mateh=”Field”>.这个模板负责判断并输出 

主键名到结果中 文档解析时.根节点首先匹配主模 

板.然后解析器顺序解析主模板中的元素.当解析器 

(3)XSLT模板文件的可扩展性强.可按需求编写 

XSLT模板文件.达到随需应变的目的.无需更改应用 

程序.从而增加了系统的可维护性 

解析到调用模板语句的时候就进入后面两个模板内 

依次执行里面的语句 最终完成了从源树到结果树的 

转化.本例最终生成的SQL语句如下: 

create table TableA( 

ifeldone int(10)not null, 

3结语 

XML与XSLT的结构灵活.又具有很强的扩展 

性.所以本文中的方案也可以应用其他场合的SQL 

脚本的生成.更可以应用到其他更广的数据转换领 

域.例如代码生成等.事实证明.在数据转换领域具有 

很大潜力的XML与XSLT.在信息化中具有很大的推 

广价值 

参考文献 

constraint TableA primary key(ifeldone) 

)g0 

不同DBMS的SQL脚本相差并不大.所以只需 

稍微修改一下XSLT样式表f例如说生成的目标数据 

库系统的数据类型).即可生成转换到其他数据库平 

台所需的SQL脚本.从而将数据从一个数据库转换到 

f11李尊朝,徐颖强,饶元,曹博.基于XML的异构数据库间信 

息安全交换.计算机工程与应用。2005.41(13):163 165 

『21何震瀛,李建中,王朝坤.一种XML数据库的数据模型.软 

其他数据库中。从而实现异构数据库问的数据转换。 

2.4 XML+XSLT生成跨平台SQL脚本的方案 

优点分析 

(1)由于数据是统一导出导入,所以XML数据存 

储文件和XSLT模板文件的结构相对比较稳定.可重 

用很强,即使要修改也比较集中、方便; 

(2)XSLT文件使用XSLT解析器解析。所有逻辑 

问题都集中在XSLT模板中.并且XSLT文件开发起 

件学报,2006,17f4):759 769. 

f31熊丽,熊前兴.基于XS【.T的XML文档处理.现代计算机 

(下半月刊),2002,(3):82—84,95 

【4IMicheal Kay.XSLT Programmers Reference 2e.Wrox,2001 

f51於志勇,杨志义,於志文,李长德.XML数据存储方式的性 

能评价研究.计算机工程与应用,2006,42(17):171-173 

f61张于峰,洪志全,张翼.用XML实现异构数据库信息交换. 

西南科技大学学报,2006,21f2):40~43 

来比较简单.从而减低了系统的开发难度; 

I mplement of Data Conversion between 

HeterOgeneOUS Databases by Using XM L and XSLT 

HU Guang ,SUN Tao,YAN Ying-hui 

现 

代 

计 

(Institute of University Students Innovatibn,DaLian University of Technology,Dalian 1 16023) 

Abstract:The diferences between heterogeneous database systems bring enormous dificulties for data 

exchange and coordination among diferent departments.Through researching on operations 

about heterogeneous datbaases and analysis on existing resolutions,brings forward a new 

算 

机 

^ 

总 

第 

二 

上 

way based on XML and XSLT.By generating SQL scirpt which is needed ofr heterogeneous 

databases transformation,data conversion between hetemgeneous databases can be imple— 

mented. 

,、 

五 

Keywords:XML;XSLT;Cross-Platform SQL Script;Heterogeneous Database 

期 

@MODERN COMPUTER 2007.8 


本文标签: 数据库 文件 数据 转换 模板