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

转载于:https://www.cnblogs.com/vcool/archive/2008/01/21/1047172.html

XML实现异构数据库间转换的实现与分析相关推荐

  1. 13万张表+数亿行代码,迁移只需数小时,还是异构数据库

    摘要:而对企业来说,构建统一的数据底座,才能让数据供应和业务端更高效.更安全.更易共享.随着技术的日新月异,上云已非难事,但异构数据库(转换数据库类型)迁移上云在业界仍是一个巨大的挑战. 本文分享自华 ...

  2. 异构数据库转换工具的结构说明

    前篇工具介绍:http://dragonpro.cnblogs.com/archive/2006/04/09/370415.html 以下先介绍项目里各文件的作用: 1.App.config:主要放置 ...

  3. 阿里开源数据同步神器DataX异构数据源间数据同步同步MySQL与HDFS相互实战

    Datax 实战使用 继上一篇 阿里开源数据同步神器DataX异构数据源间数据同步基础介绍与快速入门之后的实战篇 1.MySQL-To-HDFS 环境 & 准备说明: 描述: 为了快速搭建测试 ...

  4. 面向对象编程与关系型数据库间的不一致(Object-relational impedance mismatch)

    转载自:http://t.dbdao.com/archives/why-is-mongodb-wildly-popular.html "如果你光给我看代码而不让我了解数据结构,我会很迷茫.如 ...

  5. 达梦DMHS异构数据库数据实时同步软件速知

    DMHS简介 DMHS(Heterogeneous database Synchronization for DM)是达梦数据库公司推出的一款异构数据库数据实时同步工具软件.同步源端支持ORACLE系 ...

  6. exp导oracle数据库,使用exp/imp 在oracle数据库间导数据

    最近工作需要将oracle数据库的表数据导出到另一个oracle数据库表,找到了oracle 自带的命令行,并记录下导数据过程. 导数据过程分以下几步: 假设源数据库为A,目标数据库为B 1.在B上通 ...

  7. kudu大量数据更新_i2Stream提升异构数据库数据的互联互通

    最早提出"大数据"时代到来的是全球知名咨询公司麦肯锡.麦肯锡称:"数据,已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素.人们对于海量数据的挖掘和运用,预示着新 ...

  8. tidb数据库_异构数据库复制到TiDB

    tidb数据库 This article is based on a talk given by Tianshuang Qin at TiDB DevCon 2020. 本文基于Tianshuang ...

  9. 华为云UGO正式公测:4大核心优势破解异构数据库迁移难题

    摘要:华为云数据库推出了数据库和应用迁移 UGO(Database and Application Migration UGO,简称为UGO),是专注于异构数据库对象迁移和应用迁移的专业化工具,帮助用 ...

  10. 异构数据库、异构数据源、分布式数据库三者的辨析区别

    异构数据库:HDB Heterogeneous DataBase 异构数据库系统是相关的多个数据库系统的集合,可以实现数据的共享和透明访问,每个数据库系统在加入异构数据库系统之前本身就已经存在,拥有自 ...

最新文章

  1. Bootstrap-datepicker设置开始时间结束时间范围
  2. Android Parcelable 源码解析
  3. 生成四位验证码php,PHP生成四位整数验证码图片及使用例子
  4. Android之在Layout中自定义View
  5. 南核目录2020pdf_北核+南核|《消费经济》2020年重点选题
  6. SAP 电商云 Spartacus UI B2B checkout 点击 Continue 不能跳转到下一页面
  7. JSR-308和Checker框架为jOOQ 3.9添加了更多类型安全性
  8. Unity3D中自带事件函数的执行顺序
  9. 安川变频器跳os_变频器常见故障代码及处理实例(经典,建议收藏)
  10. Viliv N5 GPS安装及使用方法
  11. 抽象工厂模式与单件模式C++混合实现
  12. echarts设置标题样式_Pyecharts 全局配置项之标题配置项
  13. ERROR security.UserGroupInformation: Priviledge...
  14. 循环赛日程表非递归Java_王晓东《算法设计与分析》课件.ppt
  15. 计算机桌面分区,明基XL2430T如何使用桌面分区?
  16. 5寸android智能手机,5寸刚入门 六款巨屏安卓智能手机盘点
  17. 手机触摸屏扫描信号实测波形
  18. mysql概念模型中的3种基本联系_在概念模型中,通常用实体联系图表示数据的结构,其 3 个要的元素是( )、( )和( )。_学小易找答案...
  19. 数据挖掘与机器学习经典书目
  20. 数商云:把握数字化核心趋势,推动煤炭企业数字化转型布局

热门文章

  1. RTI公司任命Elektrobit前首席执行官Alexander Kocher为其顾问委员会成员
  2. 国外常用免费博客平台
  3. pidgin qq_充分利用Pidgin的5条提示和技巧
  4. CentOS7安装Teamviewer
  5. OpenWrt开发必备软件模块——进程管理服务procd
  6. linux 查看进程树,linux怎么查看进程?linux查看和管理进程命令方法
  7. ios逆向工具theos tweak make编译错误集合
  8. USB3.0剖析(锆石科技FPGA)
  9. 微软亚洲研究院院长换帅!复旦校友周礼栋博士升任新院长
  10. java todo注释_Java自定义注解