XML与关系数据库
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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文档。