admin 管理员组文章数量: 1086019
2024年4月19日发(作者:priceless)
维普资讯
第25卷第4期
广西师范大学学报:自然科学版
Vo1.25 No.4
2007年12月
Journal of Guangxi Normal University:Natural Science Edition
Dec.2007
关系数据库到XML数据库转换中间件的
设计与实现
崔学荣,李庆云,李娟
(中国石油大学(华东)计算机与通信工程学院,山东东营257061)
摘要:介绍了从关系数据库到XML数据库转换的两种方法:面向XML的XML模板转换和面向DB表格
模型转换;设计了面向DB的表格模型转换的中间件;实现了在B/S网络环境下用ASP调用中间件,将关系
数据库的数据模式转换为XML DTD(document type definition),将关系数据库中的数据转换为XML标记。
关键词:XML;数据库;转换;中间件
中图分类号:TP311 文献标识码:A 文章编号:1001—6600(2007)04—0132—04
XML作为新一代的Web语言,显示出强大的优越性,使许多只利用HTML难以解决的任务变得简
单,使只利用HTML不可能完成的系统得以完成l_1 J。
中间件是处于系统和应用软件中间的一种软件,它在操作系统、网络和数据库之上,应用软件的下层,
是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软
件。中间件现已与操作系统和数据库并驾齐驱,成为基础软件领域的三驾马车_4]。关系数据库到XML数
据库转换中间件的设计目标就是能将任何与ODBC兼容的关系数据库中的数据转换成符合XML DTD
的XML数据库,并具有一定的用户可配置性,能将不同形式的关系数据库表转换成符合不同DTD的
XML文档。
1 转换方法
将关系数据库转换为XML数据库主要解决两个问题:关系模式和记录值;关系数据库中的关系模式
用DTD来描述,记录值用XML标记来表示。关系数据库到XML的转换方法主要有面向XML的XML
模板转换和面向DB的表格模型转换。
1.1面向XML的XML模板转换
需要在一个XML模板中嵌入命令,并用中间件进行处理,比如下面的模板。
<?xml version一 1.0 encoding一 gb2312 ?)
<备注)DB2XML测试</备注)
<直接费用)
<Sql
费用)
select井号,直接材料费as直接材料,燃料及动力,人工费,折旧费{rom直接费用
</Sql一费用)
</直接费用)
注意其中嵌入了一个select语句。当用中间件进行处理时,<Sql~标记名称)与</Sql一标记名称)之间
的内容都会被sQL语句的执行结果所代替。
收稿日期:2007—06—3o
基金项目:国家自然科学基金资助项目(50674099)
通讯联系人:李庆云(1968一),女,黑龙江齐齐哈尔人,中国石油大学(华东)高级工程师。E—mail:liqy@hdpu.edu.cn
维普资讯
第4期 崔学荣等:关系数据库到XML数据库转换中间件的设计与实现 133
基于模板驱动[5 的映射可以是相当灵活的,比如,可以在结果集外任意设置修改XML,同时也可以修
改生成的标记名称,用(Sql一标记名称)(/Sql
标记名称)和select语句中的as来修改。
1.2面向DB的表格模型转换
用表格模型实现把数据从关系数据库转换成XML数据库,它把XML数据库表示为一个单一的表格
或者是表格的集合。
比较这两种转换方式:面向XML的XML模板转换方式比较灵活,可以在结果集外任意书写XML
信息,但是使用这种方式的用户必须熟悉XML,否则无法生成;面向DB的表格模型转换方式不够灵活,
但是即使用户不懂XMI 也可以生成正确的XML文件。本文将采用第二种方法,面向DB的表格模型转
换。
2 中间件的实现
中间件可以通过Java编写Bean或者通过VB、VC等编写DLL实现。中间件主要实现根据转换规则
将用户数据源中的数据按照用户的要求转换成XML数据库。本文主要采用了面向DB的表格模型转换方
法完成了DataBase2XML、Tab1e2XML和Query2XML中间件。DataBase2XML把整个关系数据库转换
成一个或多个XML文档,Table2XML把一个关系数据表转换成一个XML文档,Query2XML把一个标
准的SQL语句转换成一个XML文档。下面介绍在实际中应用比较多的Query2XML中间件 ]。
2.1属性(表1)
表1 Query2XML中间件的属性
Tab.1 Attributes of Query2XML mid—ware
2.2 getXML方法
getXML(sql As String,XMLDir As String,DbSchema As String,DbSchemaPosition As String,
DTDSchemaDir As String)As String转换的主要过程,生成XML文件和DTD。其中:
①sql:任意的标准SQL查询语句,例如:“select*from费用”。
②XMLDir:生成的XML文件的存放位置,如果file一…,则不存储XML文件。
③Dbschema:在生成的XML中是否描述数据库模式,即字段的数据类型、定义长度等,格式为:
“Type十TypeName十DefinedSize”(Type:用数字表示的数据类型;TypeName:数据类型的名称;De—
finedSize:数据长度),3个可以任意组合;为…,的时候,在生成的XML中不包含数据模式的描述。
@DbSchemaPosition:在哪个位置描述数据库模式,共有3个取值:“top”、“bottom”、“eachrow”,缺
省值“eachrow”。top表示在描述数据之前,首先定义数据模式;bottom表示在描述数据之后,定义数据模
式;eachrow表示在描述数据同时,定义数据模式。如果DbSchema:…,贝4不生成DbSchema,如果Db—
Schema≠ 而且DbSchemaPosition一””则生成DbSchema,DbSchemaPosition使用缺省值eachrow。
⑤DTDSchemaDir:生成的DTD的位置。如果是” 则不生成DTD,如果是“DTD”则生成内部DTD,
如果是路径十文件名则生成外部DTD。
整个表的根元素用(tablename)或者(tablename的值)表示,每条记录用(record)或者(record的值)
表示,关系表中有多少条纪录,生成的XML文档中就有多少个(record)或者(record的值),在每个
(record)或者(record的值)元素中,按照原来SQL查询字段的顺序,按照查询中列的名称(对应表中的字
段名或者SQL中用as重新命名的字段名),依次生成相应的以列的名称命名的标记。例如:
<rOWS>
维普资讯
134 广西师范大学学报:自然科学版 第25卷
<井号)桩l—l</井号>
<直接材料)993182.3(/直接材料)
</rows)
另外,根据用户需要可以在XML文档中生成对数据模式的描述,例如
(DataSchema)
<field)
(FieldName)井号(/FieldName)
(TypeName)文本(/TypeName)
(Type)202(/Type)
(DefinedSize)5 0(/DefinedSize>
</field)
</DataSchema)
3 中间件的调用
3,1在服务器上注册dll文件
通过Windows的regsvr32来完成中间件的注册,例如:regsvr32 F:\RDB2XML\Rdb2xm1.dll。
3.2在ASP中调用
< set query—server.createobject(”Rdb2xm1.query2xml”)
query.record一”直接费用”
query.tablename一”费用”
query.encoding=== GB2312
getxml=query.getxml(”select*from直接费用”,”F:\RDB2XML\test1.xml ,,,Type+Type
Name+DefinedSize”,”TOP”, DTD”)
response.write getxml ’输出生成的XML文件 )
其中第5行query.getxml(”select*from直接费用”,”F:\RDB2XML\test1.xml , Type+Type
Name+DefinedSize”,”TOP”,”DTD”)表示生成的XML中要包含DTD(描述数据的数据类型、数据类
<?Xml version一 1.0 encoding一 GB2312 ?) <?Xml version=”1.0 encoding= GB2312 ?)
<!DOCTYPE直接费用(View Source for fuU doctype
-.
一<直接费用)
))
一
<直接费用)
(费用)
<费用)
<井号)桩1-1</井号)
井号)
(井号TypeName一 文本"Type一 202")桩1-1(/
,
<直接材料)993182.3</直接材料)
<燃料及动力)68890.09</燃料及动力)
<人工费)58813.74</人工费)
<折旧费)15568.33</折旧费)
</费用)
<费用)
<井号)桩1-2</井号)
<直接材料)965902.3</直接材料)
<燃料及动力)68890.09(/燃料及动力)
<人工费)58813.74</人工费)
<折旧费)i5568.33</折旧费)
</费用)
</直接费用)
图1生成的test2.xml在IE中的显示
一
(总费用TypeName=,,双精度型,,
Type一”5 )1136454.5</总费用)
</费用)
<费用)
(井号TypeName一 文本"Type一, 202")桩1-2(/
井号)
(总费用TypeName=,,双精度型
Type一”5 )1109174.5</总费用)
</费用)
(/直接费用>
图2生成的db2xm1.xml在IE中的显示
Fig.2 Created db2xm1.xml displayed in IE
Fig.1 Created test2.xml displayed in IE
维普资讯
第4期 崔学荣等:关系数据库到XML数据库转换中间件的设计与实现 135
型的名称和数据的定义长度)并把生成的文件存放在F:\RDB2XML\test1.xml下。 ‘
如果将第5行的调用语句改为query.getxml(,,select*from直接费用”,”F:\RDB2XML\test2.
xml”, ”,~ , F:\RDB2XML\test2.dtd )则不生成对数据模式的描述,但是在F:\RDB2XML\下生成
了XML的模式test2.dtd。如图1所示。
如果将第6行的调用语句改为query.getxml(,,select井号,直接材料+燃料及动力+人工费+折旧
费as总费用from直接费用”,”F:\RDB2XML\db2xm1.xml ,"type-4-typenameⅣ,,,eachrowt,,Ⅳ,,)则
执行结果如图2所示。
4 总结
本文介绍了两种将关系数据库转换成XML的方法——面向XML的XML模板转换和面向DB的表
格模型转换。设计实现了面向数据库表格模型的转换中间件,该中间件可以实现任意关系数据库与XML
的灵活转换,与SQL Server及Oracle的导出XML相比具有更大的通用性、灵活性和可扩展性,具有广泛
的实用性和推广价值。
参考文献:
[1]吴扬扬,陈锻生.一个基于XML的Web信息源集成方案[J].计算机工程与应用,2001(1o):34—37.
[2]吴爱华,刘小玲,王洪,等.基于混合映射的XML数据的关系存储和查询[J].郑州大学学报:理学版,2007,39(2):157—
16O.
[3]吴淑雷,雷景生,陈焕东.基于XML的异构数据交换技术[J].广西师范大学学报;自然科学版,2007,25(2):78—81.
[4]卢鹏丽,袁占亭,张秋余.构件及中间件技术的研究[J].甘肃工业大学学报,2002,28(4):83—86.
[5]陈丽娟,窦迅,张金望.基于XML的数据库信息交互[J].福建电脑,2003(11):10—11.
[6]奚建清,夏志忠,刘发贵.一种关系数据库的网上发布和集成方法[J].软件学报,2000,11(6):848—852.
Design and Implementation of Mid—ware for Transformation of
Relation Database to XML Database
CUI Xue—rong,LI Qing—yun,LI Juan
(College of Computer and Communication Engineering,University of Petroleum of China,Dongying 257061,China)
Abstract:Two methods to transform relation database to XML database are given,which are oriented to
XMI template and DB table mode1.The mid—ware of transformation model oriented to db table is de—
signed,which succeeds in transferring data scheme to XML DTD(document type definition)and trans—
ferring the data in relation database to XML tags by calling the mid—ware in B/S network environment.
Key words:XML;database;transfer;mid~ware
(责任编辑黄 勇)
版权声明:本文标题:关系数据库到XML数据库转换中间件的设计与实现 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1713540101a639797.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论