XML实现异构数据库间转换的实现与分析(转)

xml|数据|数据库|转换

XML实现异构数据库间转换的实现与分析

类型: XML/Biztalk 收录时间: 2002-4-8 9:20:00

XML中一种扩展的标记语言,它具有很好的扩展性标记.本文通过XML实现不同数据库的定义,实现对XML数据库的访问和异构数据库之间的互访.  
  关键词:XML  异构数据库  信息交换  数据库访问  
1  引言  
  XML(Extensible  Markup  Language)它是由W3C组织于1998年2月  
制定的一种通用语言规范,是SGML  的简化子集,专门为  Web  应用程序而设计.XML作为一种可扩展性标记语言,其自描述性使其非常适用于不同应用间的数据交换,而且这种交换是不以预先规定一组数据结构定义为前提.XML最大的优点是它对数据描述和数据传送能力,因此具备很强的开放性.为了使基于XML的业务数据交换成为可能,就必须实现数据库的XML数据存取,并且将XML数据同应用程序集成,进而使之同现有的业务规则相结合.开发基于XML的动态应用,如动态信息发布、动态数据交换等,前提是必须有支持XML的数据库支持.  XML  提供描述不同类型数据的标准格式  --  例如:约会记录、购买定单、数据库记录、图形、声音等  --  并且可一致而正确地解码、管理和显示信息.  XML一开始就建构在Unicode(统一码)之上,提供了对多语种的支持,具有世界通用性.  

2  XML与数据库的结合  
  XML数据源有多种多样,根据具体的应用,大概可分为下面三种:一种是XML纯文本文档;第二种是关系型数据库;第三种则来源于其他各种应用数据,如邮件、目录清单、商务报告等.其中,第一种来源,即XML纯文本文档是最基本的也是最为简单的,将数据存储于文件中,其最大的优点在于可以直接方便地读取,或者加以样式信息在浏览器中显示,或者通过DOM接口编程同其他应用相连.第二种数据来源是对第一种来源的扩展,目的是便于开发各种动态应用,其优点则在于通过数据库系统对数据进行管理,然后在利用服务器端应用(如ASP、JSP、Servlet)等进行动态存取.这种方式最适合于当前最为流行的基于三层结构的应用开发.第三种数据由于来源广泛,因此需要具体情况具体对待.本文的分析主要针对前两种数据来源进行分析.  
  对于XML文档,可以通过DOM(Document  Object  Model)读取XML文档中的节点,是最基本也是最底层的XML存取技术.  DOM是W3C的一种技术标准,实际上是提供一组API来存取XML数据.  DOM可以通过JavaScript,VBScript等脚本程序来实现,也可通过C++、Java等高级语言来实现.  
  其次,也可通过DSO(Data  Source  Object)进行XML的数据绑定可以方便地将XML节点同HTML标记捆绑,从XML文档中读取或写入数据,就象访问Microsoft  Access或Microsoft  SQL  Server一样;而  HTTP+SQL是Microsoft新近提出的SOAP方案的核心,其基本原理是通过基于HTTP协议的URL方式直接访问SQL  SERVER数据库,并返回以XML或HTML数据格式的文档.  
  XML数据库又分为两种:一种是以XML原始格式存储的数据库我们称为"native-XML数据库";另一种是以XML格式存入和导出,且它本身又是一个数据库,我们称为"XML-enabled数据库".  
2.1  native-XML数据库  
  对于native-XML数据库的访问,我们可以通过XQL语言来完成.  通过XQL我们可以对一个或多个XML文件进行查询,它返回一个封装在根元素(sql:result)的节点集,这个节点集也是一个XML文件.  
2.2  XML-enabled数据库  
  因为数据是以XML格式存入和导出,且它本身又是一个数据库,这就涉及到异构数据库间的互访问题.  XML提供了一种连接关系数据库和面向对象数据库以及其他数据库系统之间的访问技术,也就是说我们可以先对关系数据库和面向对象数据库以及其他数据库系统进行访问,然后生成XML文件,再将文件存入数据库或作其他处理.  

3  使用JSP连接数据库并进行查询生成  XML文档   
  我们有许多方法可做到连接数据库并进行查询,生成  XML文档.以下是通过JSP技术对SQL  Server存储的  XML  文档进行查寻并提取这些文档,然后将其传送给用户.(SQL  Server数据库本身就支持XML格式.对于不支持  XML  的数据库,您可以将  XML  文档存储为字符大对象(CLOB),并以文本块的方式检索文档.)Java语言应用程序的开发者提供了一个通用的SQL数据库访问和存储结构,即JDBC,它是一种用于数据库访问的应用程序编程接口(API),开发者可以通过JDBC产品组件之一JDBC-ODBC桥来完成:与数据库建立连接、发送语句、处理结果等工作.在与数据库建立连接之前,必须将桥驱动程序类sun.jdbc.odbc.JdbcOdbcDriver添加到名为jdbc.drivers的java.lang.System属性中,或用Java类加载器将其显式加载.显式加载代码如下:  
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
  该驱动程序可用于Oracle、Sybase、等数据库.我们可以用一个简单的例子来说明如何在用JDBC接口来实现数据库的连接,执行一个查询(其结果为一组  XML  文档),分析查询结果,并将分析过的数据写入输出流中.以下是与此关系最密切的代码部分:  
注意,在安装数据库以后,您需要完成以下三件事情才能使此代码工作:  
首先,将  DbOwner、DbUserid  和  DbPasswd  变量改为适合系统的适当值.  
//  一定要正确更改这三个字符串,否则servlet  不会工作.  
DbUserid  =  "xxxxxx";  
DbPasswd  =  "xxxxxx";  
DbOwner  =  "xxxxxx";  
<!--使用SQL数据库-->  
<!--首先导入一些必要的packages-->  
<!--开始导入packages-->  
<%@  page  info="package  dbxml.sax"%>  
<%@  page  import="org.xml.sax.*"%>  
<%@  page  import="org.xml.sax.InputSource"%>  
<%@  page  info="database  handler"%>  
<%@  page  import="java.io.*"%>  
<%@  page  import="java.util.*"%>  
<%@  page  import="java.sql.*"%>  
<%@  page  import="javax.servlet.*"%>  
<%@  page  import="javax.servlet.http.*"%>  
<!--导入结束-->  
<%  
try  
{  
res.setContentType("text/xml");  
//加载使用适合您的系统的驱动程序  
//下面的代码为加载JDBD-ODBC驱动程序  
try  
{  
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  
}  
catch  (Exception  e)  
{  
System.out.println("Can't  get  the  driver!");  
e.printStackTrace();  
}  
//建立连接  
//第二步是用适当的驱动程序连接到DBMS,假定已建立源数据库test,在test中已建立表name  
String  url="jdbc:odbc:test";  
Connection  con=DriverManager.getConnection(url,  "administrator",  "password");  
//"administrator","password"是用户名和口令  
//然后创建一个JDBC声明  
Statement  stmt  =  con.createStatement();  
//执行声明,显示结果集。我们从每行取出  XML  文档,  
//对其进行分析,然后打印  DOM  树。当没有更多的行时,rs.next()  返回false。  
ResultSet  rs=stmt.executeQuery(SQL);  
while  (rs.next())  
 {  
String  nextOrder  =  rs.getString(1).trim();  
Document  doc  =  null;  
StringReader  sr  =  new  StringReader(nextOrder);  
InputSource  iSrc  =  new  InputSource(sr);  
try  
{  
parser.parse(iSrc);  
doc  =  parser.getDocument();  
}  
catch  (Exception  e)  
{  
System.err.println("Sorry,  an  error  occurred:  "  +  e);  
}  

if  (doc  !=  null)  
printDOMTree(doc,  out);  
  }  

rs.close();  
stmt.close();  
con.close();  
%>  
  返回的XML文档可以通过指定的XML模式来定义,三种模式为:RAW、AUTO、EXPLICIT。还可以用SELECT语句中附加FOR  XML来返回XML格式数据作为对XML模式的一种补充,通过在FOR  XML中指定DTD或XML  schema来达到对返回XML文档的格式化.此外我们利用基于XML的UPDATE语句来更新数据库中的记录,SQL  Server支持基于XML的插入、删除、修改等数据库更新操作.  

4  XML模式与关系模式的相互转换  
  为了完成异构数据库间的通讯,必须实现RDMS→XML→RDMS的转换.一个具体的XML模式到关系模式的数据转换需要涉及较为复杂的XML格式分析处理及相应的数据库操作及有效性校验.我们通过对XML的数据模型与关系模型的特征的比较,认为两者转换的实质是(1)  从XML中的数据(存在方式可以是Content、属性值、元素名等)到关系模式中字段的映射;(2)  从XML中数据的相互位置关系到关系模式中元组与元组的关系及元组与字段的关系的映射.  XML模式与关系模式的转换的核心与实质就是按XPDL编写的转换规则和转换规则的执行解释方法,下面就依次分别介绍从XML模式到关系模式的转换规则的组成部分和执行方法,以及从关系模式到XML模式的转换规则的组成部分和执行方法.从XML模式到关系模式转换的转换规则脚本:由关系模式的定义和XML模式到关系模式转换规则的定义组成;从关系模式到XML模式转换的转换规则脚本:由关系模式的定义和关系模式到XML模式转换规则的定义组成.  
4.1  XML模式到关系模式转换  
(1)关系模式定义  
下面是一个关系模式定义的例子  
<DataSchemaDefinition>  
<DataSource  id="iCategoryData"  type="ODBC"  sourcename="iCatSRC"  username="sa"  password=""  />  
<DataSchema>  
<Entity  id="category"  datasource="iCategoryData">  
<Structure>  
<Field  id="nodeid"  type="char"  length="10"  cannull="no"  primary_key="yes"  />  
…  
</Structure>  
<Constrain>  
<Reference  field="fathernodeid"  refentity="category"  reffield="nodeid">  
<ExceptionValue  value="0"  />  
</Reference>  
…  
</Constrain>  
</Entity>  
…  
</DataSchema>  
</DataSchemaDefinition>  
  一个关系模式的定义分两部分:数据源(Data  Source)定义和实体(包括关系实体)的定义。数据源的定义不外乎ODBC/JDBC/BDE等几种,定义它的目的在于转换程序的跨平台的通用性。实体定义包含两部分:结构定义和约束定义。结构定义类似关系数据库的表定义,包含对每个字段的类型、长度等的定义。约束定义则主要包含对字段的外键和引用的约束定义。  
(2)XML模式到关系模式转换规则(X2RConversion)的定义  
XML模式到关系模式的转换的目标,是将某一种XML  Schema定义好的XML文档中的Content部分、属性值部分转换成关系模式中的某个元组的某个字段的值,而将他们之间的位置关系转换成关系模式中的外键等应用关系。  
<X2RConversion>  
<Entrance>  
<Record  entity="category"  id="st_category"  path=".department">  
<Default  field="fathernodeid"  value="0"  />  
<Node  path="#id"  field="nodeid"  />  
…  
<Reference  field="rootnodeid"  reftype="entity"  refvalue="category[nodeid]"  refpos="0"  />  
<Record  entity="category"  id="run_category"  path=".department">  
<Node  path="#id"  field="nodeid"  />  
…  
<Reference  field="fathernodeid"  reftype="entity"  refvalue="category[nodeid]"  refpos="-2"  />  
…  
</Record>  
…  
</Record>  
</Entrance>  
</X2RConversion>  
  转换的基本算法是遍历等待转换的XML文档的DOM树,对于每个结点而言,从根到该结点的路径作为其转换标识.每一个转换入口是一个转换标识后缀,当某一转换入口转换标识后缀匹配当前结点的转换标识,则启动当前转换入口对应的转换规则.所有的转换入口都定义在Entrance元素内.每一个转换规则都是由一个Record元素开始的,一个Record元素的下层元素表示了其对应的元组的新记录的创建、数据的转换规则及其关联元组的的新记录的创建、数据的转换规则,也就是说Record元素是可嵌套的.  
  此外,转换还将遵循以下原则:任意两个Record转换实例的转换位置所对应的元素绝不相同,但被Node标定的元素并不受该限制,也就是说在转换算法中只记住每个Record实例的执行位置;而在同层规则执行顺序上,是按Default元素、Node元素、Reference元素、Record元素的次序的,一个次序在后的有效操作是可以覆盖次序在前的有效操作的.  
4.2  关系模式到XML模式转换  
(1)关系模式到XML模式的转换规则(R2XConversion)的定义  
  从关系模式到XML模式的转换,实质上是一个将一个预先定义好的视图运行,并将当前视图内容转化成XML格式显示.在具体实现上,我们是将格式和视图定义融合在一起.在关系模式到XML模式的转换中,关系模式定义段中的entity可以对应一个SQL查询语句,也就是使用SQL语句代替原先在id中指明的表名,所有的数据准备基本在关系模式定义段已经完成.下面是一个关系模式到XML模式的转换规则的示例,它的执行是通过深度遍历转换规则,逐个分枝拓展创建,并最终完成整个XML文档DOM树的创建.同样,其中仅支持一条路径扩展出的子树中的相对位置的关联转化,其具体结构与前面类似这里就不赘述.  

5  结束语  
  目前数据库已不再仅仅局限于存储数据,而是向着更深层次、更多样化发展,它已经广泛运用于OLAP、OLTP、数据仓库、数据挖掘、移动计算、嵌入式计算和Web应用等诸多方面.现在,数据库技术也已经深入到各行各业,尤其在媒体、金融、交通、商业等领域得到了广泛应用.本文则着重讲解了对XML数据库的访问技术和异构数据库之间通过转换成XML实现互访.我们有理由相信,XML同数据库的相结合将随着XML技术的发展,会实现更强大的功能.  

参  考  文  献  
[1]  http://www.xmlsoftware.com/  
[2]  杨钰,卢银娟,赵昊彤等,JSP网络开发技术.人民邮电出版社  
[4]  http://www.microsoft.com/xml/xsl/msxsl-f.htm  
[5]  http://www.51xml.com/forum/search_forum_xml.xml  
[6  ]  Michael  Morrison,et  al.XML揭秘---入门-应用-精通.  清华大学出版社,2000.8

时间: 2024-11-01 04:45:53

XML实现异构数据库间转换的实现与分析(转)的相关文章

如何理解异构数据库

问:什么是异构数据库? 答:异构数据库系统是相关的多个数据库系统的集合,可以实现数据的共享和透明访问,每个数据库系统在加入异构数据库系统之前本身就已经存在,拥有自己的DMBS.异构数据库的各个组成部分具有自身的自治性,实现数据共享的同时,每个数据库系统仍保有自己的应用特性.完整性控制和安全性控制.异构数据库系统的异构性主要体现在以下几个方面: 计算机体系结构的异构 各个参与的数据库可以分别运行在大型机.小型机.工作站.PC或嵌入式系统中. 基础操作系统的异构 各个数据库系统的基础操作系统可以是U

Oracle技术:异构数据库初始化大字段处理

一.source端 SOURCEISTABLE SOURCEDB oracle RMTHOST 127.0.0.1, MGRPORT 7820 RMTFILE D:\ogg\oracle\dirdat\i1 table dbo.t_v; table dbo.t_t; 二.target端 SPECIALRUN END RUNTIME SETENV (NLS_LANG =AMERICAN_AMERICA.ZHS16GBK) userid ogg,password xifenfei EXTFILE D

基于Windows服务的异构数据库同步应用

随着电子信息化的发展与应用,各个企业各个单位之间都开发和应用了自己的 信息化系统.各个单位之间使用了不同的开发技术和后台数据库,它们之间是分 离,没有关系的.企业集成不仅仅能创建一个三(表现层.业务层.数据访问层) 层应用结构,还能使一个应用分布到多台计算机上.分布式应用中,单个的一层 是无法自己运行的,而集成应用中的每一个应用都能独立运行,它们时间通过偶 合完成功能.异步消息传递体系结构来集成多个应用,异构数据库的同步问题是 实际项目中急待解决的问题 1 系统需求 电子数据交换最主要的任务是实

异构存储间的复制居然“很简单”

   之前,我们在<数据迁移"妙招儿">中讨论了Dell Storage中Compellent存储与Equallogic存储之间的数据迁移功能.现在,我们讨论一下两种异构存储之间的数据复制功能. 这些特点能够让用户对自己的数据使用起来更灵活,更高效.同时,已经拥有Dell Equallogic存储的用户,在存储产品硬件更新时,如果购买的是Dell Compellent存储,可以在Compellnet存储和Equallogic存储之间构建复制关系.这样,用户可以使用性能更好的

基于HBase的医疗卫生数据中心构建与异构数据库同步研究

基于HBase的医疗卫生数据中心构建与异构数据库同步研究 电子科技大学 方诗伟 为确定数据模型,提出以关系数据库的E-R建模基础提出HBase的C-O-R建模思想,然后综合分析卫生部颁布医疗卫生元数据标准和部分医疗卫生机构的实际情况,实现医疗卫生信息的HBase数据中心构建.为实现把各医疗机构的异构关系数据库中的数据透明无差异的同步到数据中心,提出以下方案.首先,在数据格式上提出异构数据库产生的异构数据进行标准化的XML和JSON通用数据格式封装实现屏蔽异构数据库的数据差异;其次是传输协议简单及

以xml文件作为数据库的程序一例

xml|程序|数据|数据库   <%...@ Language=VBScript %> <!--#include file="config.asp"--> <%...   f=trim(Request("id"))   biaoti=Request("title")   neirong=Request("neirong")IF biaoti="" then     Respon

xml数据存入数据库的解决办法

xml|解决|数据|数据库     当我们要把xml格式的数据存到数据库中.通常的办法是解析xml文件,读出xml中的数据类型并根据它创建数据库表和表之间的结构,读出xml中的数据,存入到数据库之中. 在读nodeType是要注意二个问题: 1.读某个节点数据类型可以对上一个节点的孩子,或直接使本节点的类型,只不过要严格注意定位正确,不要混淆. 例:link.getElementsByTagName("link").item(0).getFirstChild().getNodeType

Microsoft SQL Server 7.0数据库升级转换问题

数据库升级转换所需时间? 影响数据库升级转换所需时间的因素很多, 除了硬件的因素外,由于需要重新创建每个SQL Server 6.X的对象,数据库复杂与否也会有影响,一般来说大致的速度如下 数据库大小 估计所需时间 400 MB 少于20分钟 1 GB 少于1小时 5 GB 少于4小时 10 GB 少于12小时 100 GB 少于24小时 升级转换数据库的方法? 在同一台计算机上升级转换数据库:管线(pipeline):所需空间约为原有数据库的1.5 倍,升级转换完成后,如果原来的数据库已不需,

异构数据库复制技术的研究与实现(上)

数据|数据库 异构数据库复制技术的研究与实现   1 引言网络技术的飞速发展和广泛应用,特别是因特网的普及,大大方便了企业的跨地域发展.同时,为了适应不断增长的商业竞争环境,许多企业通过不断重组和分散经营来提高效率,形成了分散.异构的环境特点.同时这些组织在地域上虽然分散,但在管理上相对集中,往往既要有各部门的局部控制和分散管理,也要有整个组织的全局控制和高层次的协同管理.这种协同管理要求各部门之间的信息既能灵活交流和共享,又能统一管理和使用. 当前,分布式数据库技术已经成熟,并且因计算机成本的