XML与关系数据库
- 格式:doc
- 大小:235.00 KB
- 文档页数:8
年月(下)1X ML 技术介绍XML (Exte nsible Markup Language ,可扩展标记语言)是由W3C (W orld Wide We b Cons ortium )组织于1998年2月制定的一种通用语言规范,它是专门为W eb 应用程序而设计的SGML 的简化子集。
X ML 作为一种可扩展性标记语言,其描述性使其非常适用于不同应用间的数据交换,而这种交换不是以预先规定一组数据结构定义为前提的。
X ML 最大的优点在于它的数据描述和传送能力,因此具有很强的开放性。
2关系数据库与XML 之间的映射方法根据映射关系的建立方式不同,我们可以得到两种数据转换方法:基于模板驱动的转换方法和基于模型驱动的转换方法。
基于模板的映射方法并不事先定义好X ML 文档与其他数据之间的映射关系,而是在X ML 文档中嵌入带参数的SQL 命令。
这些命令在转换过程中被系统所识别和执行,执行的结果被替换到指令所在的位置,从而生成目标X ML 文档,并用数据传输诸如中间件等实体软件进行处理。
基于模型驱动的映射,当把数据从数据库传送到X ML 文档或把数据从XML 文档传送到数据库时,不是仅仅依赖内嵌SQL 命令,而是用一个具体的模型实现的。
基于模型的转换方法用这个事先定义好的数据模型来映射X ML 与关系数据库数据之间的关系。
3关系数据库到XML 的转换技术3.1关系模式转换为XML 模式在将关系模式映射为X ML 模式时,由两条路线组成,第一条路线是得到X MLS che m a 首先需要从具体的关系数据库中反求出关系模式,再根据关系模式重构其有向图,由有向图再生成映射的结构,根据映射结构和有向图将关系模式映射为X MLSchem a ;第二条路线是根据得到的S che m a 从关系数据库中提取数据嵌入XML 事例文档。
整个流程如图1所示:图1关系模式映射为XM L 流程3.2关系模式的提取和重构由图1表达的流程图可以看出,由具体的关系数据库提取出关系模式是整个算法实现的前提。
XML文档在关系数据库中存储与查询的实现近年来,Web上涌现了大量的XML数据,XML因自身描述能力强、格式简单,实现了结构、内容、表现这三者的分离,在各个领域都得到了非常广泛的应用。
XML现已成为Web上数据表示、集成和交换的标准。
基于关系数据库的存储和查询技术是目前存储和查询XML的各种方式中最成熟的一种数据管理技术。
目前很多学者都已提出了各种各样的XML查询和存储管理的方式方法来对XML数据进行有效地加工、分析和处理。
由于XML文档在关系数据库中的存储与查询存在着各个方面的问题,本文就此展开了深入的研究和探讨。
提出了一种解决方法。
该方法不必建立任何的索引结构,也不用考虑XML文档DTD的模式信息。
而是将XML文档树中的全部节点信息无损的存储在一个关系表中。
具体地来说,本文做了如下的主要工作:1、提出了一种不同与以往的关系存储方法,该方法是XML文档数据基于路径的存储方法,它是采用一个关系数据表完整地记录了XML 文档中的所有信息,即采用一个固定的关系模式来存储结构各异的XML文档,具体存储XML文档中的各个节点、边、还有值的信息,即在关系表中存储了各个元素和属性的id、name、xlevel、attribute、cdata、parentid、xvalue和所有的元素或者属性的path信息,减少了表连接,提高了查询的效率。
2、提出了一种查询处理机制,该方法基于表连接并适用于以上存储方法,并给出了相应的查询转换算法。
该算法可将路径表达式转换为对应的SQL语句来处理。
3、提出了一种存储方法与查询机制的优化策略。
如果XML文档层次较多,就会有对相同路径的存储冗余的现象发生,当进行存储时引入一个路径关系表,可避免此情况;若XML数据进行查询的路径表达式为线性结构,则为了减少表连接的次数,可采用串匹配的方法,同时也能减少输入和输出数量。
4、通过构建存储与查询系统验证本论文提出的存储转换和查询处理算法,采用网上搜集的不同大小的XML文档实例测试了文档的存储时间和查询响应时间等方面的数据,最终用数据证明,所提出的方法是可行且高效的。
XML与关系数据库
前面我们讲到了XML的数据存取机制,从一个较高的层面上分析了数据存取的多种方式。
作为其中的一种,数据库的数据存取机制似乎倍受青睐,但我们并未对此作比较深入的探讨,这一节里我们对XML与数据库的关系进行更进一步的详细分析。
我们知道,关系数据库提供了对于大批量数据的有效存储管理和快速信息检索、查询的功能。
从体系结构上看,数据库技术的发展历经了网络型数据库、层次型数据库、关系数据库、面向对象数据库。
虽然面向对象数据库融入了面向对象技术,但是到目前为止,在各个领域使用最广的还是关系数据库。
关系数据库管理系统(RDBMS)采用二维表格作为存储数据的模型,如下图10-1所示,
字段字段字段
行
行
行
行
图10-1 关系数据库二维表
表格由行和列组成,一般情况下,列被称作“字段”,用于表示组成数据有效信息的属性,而行则用于指示一条完整的数据记录。
由于数据间的相关性可以通过表与表之间关键字(外键)来关联,由此产生了“关系”类型数据库的由来。
关系数据库有自己的查询语言——结构化查询语言(Structured Query Languag e,SQL)。
SQL最初由IBM提出,后经不断发展,已于1986年成为业界标准并被广泛采用。
SQL 是非过程性的。
当SQL语句传送到数据库服务器后,服务器返回满足条件的结果或结果集(视具体查询项目而定)。
一般情况下,大多数支持SQL 的服务器系统均采用客户/服务器架构,现在又发展到更为先进的分布式处理架构。
这样一来,SQL服务器既可以接收客户应用程序发送的查询请求,也可以接收其他服务器的查询请求,这些服务器可能是其他SQL服务器,也可以是XML服务器。
就数据存储而言,关系型数据库已经是相当成熟的应用,从80年代商用产品出现至今,早已深入企业储存及数据应用的核心。
相较之下,XML部分技术尚且在发展阶段。
关系型数据库是透过详细定义和控制结构化数据的方式,达到数据增、删、查询的目的。
因此它是以字段数据型态的精确定义,将数据以列的方式一笔笔储存,再透过数据表之间的互相关联,建构出数据和数据结合后的复杂结果,因此
企业在日常营运可以仰赖这种方式来储存数据。
但是,定义好的关系型数据库一旦要修改字段,牵动的范围相当大,既会影响到过去的数据,也会影响到其它相关联的数据表。
因此它在变动的弹性上较小。
然而由于企业内产生的数据并非总是这么规矩,一旦遇到非结构化的数据型态,关系型数据库便显得左右支绌,施展不开手脚。
相对而言,由于XML是以阶层式的树状结构作为储存架构,通过元素(Eleme nt)和属性(Attribute)来包含数据,再利用XML schema控制数据的正确性。
这种架构特性,让XML随时可以新增字段,只要吻合XML schema的定义,字段便可以弹性置入。
此外,XML透过元素和属性描述数据,以及不需转译编码的文字型态,让它可以不受操作系统和应用程序的限制,在数据交换上相当容易进行,而且它的内容除了可以被人类解读之外,也能被机器或应用程序所辨读。
鉴于这些X ML的优势,可以解决关系型数据库在应用及储存上的不足,因此传统数据库大厂纷纷在关系数据库的基础上推出支持XML的方式。
关系型数据库在支持XML上大致有三种方式:一种是把xml文件原封不动的存储在关系数据库的字段里面(严格的说这不是一种新的支持方式,而是关系数据库天生就有的功能。
);另一种是将XML的树状结构数据拆解成数成关系型数据库的之后再存入数据库,一旦需要存取时,再通过组合,还原成XML文件;还有一种则是保留XML原有的运作方式,又称之为原生XML数据库,原生型数据库的做法则是保留阶层式的XML格式存进数据库,并且利用XML的树状节点特性,进行查询节点数据或新增、删除数据。
实际应用中,第一种方式的应用环境将受到一定限制,因为关系数据库不能很好地处理大容量的结构化的信息和文本数据;第二种方式,因为关系型数据库并不能很好地支持层次、顺序、包含等在结构化置标语言中十分本质的关系,所以在开发中也仍有很多问题要解决;由于XML本身是档案型的数据储存方式,在安全管理的机制上并没有良善的处理方式,只要一旦储存在数据库中,就可以享有数据库本身的安全机制。
这样看来原生XML数据库似乎更受欢迎。
但相较之下,关系型数据库在技术的成熟度上,查询速度上都是更有效率的数据处理方式,在目前是处于主导地位。
如非必要,在需要XML与数据库进行数据交换的时候,使用“将XML的树状结构数据拆解成数成关系型数据库”的方式即可,因此本节里我们不再讨论使用关系数据库来存储XML文档,也不再讨论原生XML数据库,而是重点关注如何将XML的树状结构数据拆解成数成关系型数据库的型态,进而达到XML数据与关系数据库之间的数据交换,下面通过一个实例来了解这样常用数据交换方式。
在该实例的开发过程中我们侧重于JSP功能实现与X ML数据文件的使用,对于网页的显示的样式的修饰,在这里没有做太多的要求。
数据库使用MYSQL。
本实例是让用户输入要查询的客户的姓名信息,提交后自动根据用户输入的信息从数据库里提取相关的记录组装成XML文件存储起来,最后把存储好的XML 文件内容发送给查询用户。
首先新建一个数据库,名称为kehu,它存储公司的是客户信息。
它包含一个表
名为kehus,此表共有三个字段组成:id、name、add、tel,它们分别记录客户的序号、姓名、地址和电话等信息(在这个实例中需要预先向kehus表加入客户信息记录若干条)。
其次创建第一个显示视图文件view.html,用来收取用户输入信息,打开记事本输入下列代码:
在tomcat的webapps文件夹下新建一个站点Example,将view.html保存在Ex ample文件夹下,打开IE浏览器,在地址栏里输入“http://localhost:8080/Example/v
iew.html”,单击【转到】会显示如图10-2所示窗口。
check()函数是对表单的简单验证,即输入不能为空,如果为空会显示如图10-3所示窗口。
图10-2 客户端视图图10-3 JavaScript 验证如果用户输入的值符合要求,那么这个值就会被提交到model1.jsp来处理。
下面创建另外一个页面model1.jsp。
打开记事本,输入如下例10-2所示代码。
将该页面保存在Example文件夹下,文件名字为model1.jsp。
这个页面主要完成的功能:一是从view.html页面中获取输入的参数;二是以获取的参数为查询的条件,获得数据库中相关的记录,获得记录后形成一个XML文件;三是把形成的X ML作为HTML的数据源发送到客户端。
文件的脚本程序从整体上来看可以分为两个部分,一部分是从数据库里提取所需的数据,另一部分则是把提取出来的数据形成XML文档。
通过“String name=r equest.getParameter("name");”来获得从view.html文件里提交的数据,也就是一个查询的条件。
在这里有一点要注意的是,如果提交的信息是中文字符,在这里必须使用“name=new String(name.getBytes("ISO-8859-1"));”进行相应的转换,转换后的字符才可以在中文中直接使用。
再下面的代码大家都非常熟悉了,通过指定一个select语句来获得一个Result Set对象,通过一个while循环把获得的信息全部提取出来,并保存到相应的数组中,然后利用数组里保存的数据来创建XML文档,其创建文档的方法参见第六章。
最后把控制权转向刚刚产生的“ch.xml”,在浏览器里把相应的数据显示出来。
在测试本实例之前一定要把MTSQL的驱动程序(MySQL-connector-java-5.0.5-bin.jar,是一个jar文件,网上可以下载)放到Example\WEB-INF\lib文件夹下。
打开IE浏览器在地址栏里输入“http://localhost:8080/Example/view.html”,网页打开后在客户名输入框里写入“刘”,如下图10-4所示,单击【提交】按钮结果如下图10 -5所示
图10-4 用户查询窗口图10-5 查询结果这时到Example目录下查看一下会发现多了一个ch.xml文件,用记事本打开其
内容如下图10-6:
图10-6 生成的XML文档。