1、第第9 9章章 XMLXML与数据库与数据库熟练掌握:熟练掌握:在在HTMLHTML中与中与XMLXML文档建立数据源连接并在文档建立数据源连接并在IEIE中中正确显示出正确显示出XMLXML数据。数据。掌握:掌握:XML数据源对象的基本概念。数据源对象的基本概念。了解:了解:XML与数据库的相关概念;与数据库的相关概念;XML与关系型数与关系型数据库和面向对象数据库的联系;基于据库和面向对象数据库的联系;基于XML的数的数据库模型及据库模型及XML在数据库中的应用模式;在数据库中的应用模式;XML数据转化成数据库的相关概念;数据转化成数据库的相关概念;XML数据库的数据库的基本概念、体系结构
2、及访问基本概念、体系结构及访问XML数据库的相关数据库的相关技术。技术。在在XMLXML技术出现之后,各种传统数据库相继推出技术出现之后,各种传统数据库相继推出了自己的支持了自己的支持XMLXML的解决方案来实现传统数据库与的解决方案来实现传统数据库与XMLXML之间的转换。作为数据存储载体,之间的转换。作为数据存储载体,XMLXML文档也可以作文档也可以作为数据文件使用,同样可以完成传统数据库存储数据为数据文件使用,同样可以完成传统数据库存储数据的任务和功能,因而提出了的任务和功能,因而提出了XMLXML数据库的概念。数据库的概念。XML XML的数据交换技术,除了的数据交换技术,除了CSS
3、CSS、XSLTXSLT外,还有数外,还有数据源技术。据源技术。数据源技术是以数据源技术是以HTTPHTTP协议来实现网络传输,并显示协议来实现网络传输,并显示XMLXML数据文件的另外一种技术。把数据文件的另外一种技术。把XMLXML数据文件嵌入数据文件嵌入HTMLHTML文本中,作为提供数据的模块,借助文本中,作为提供数据的模块,借助HTMLHTML可以方便地在可以方便地在浏览器上浏览这个浏览器上浏览这个XMLXML数据文件。数据文件。XML XML的数据源对象(的数据源对象(data source objectdata source object,DSODSO)又)又称为称为“数据岛数据
4、岛”。数据岛的实现机制是将一个数据岛的实现机制是将一个XMLXML文档或一段文档或一段XMLXML代码当代码当成一个类似数据库的对象,使用传统操作数据库的方法来成一个类似数据库的对象,使用传统操作数据库的方法来操作操作XMLXML文档中的数据,例如,数据的添加、删除、更新文档中的数据,例如,数据的添加、删除、更新和查询。有人也将其称为一个在网络上流动的数据库。另和查询。有人也将其称为一个在网络上流动的数据库。另外,数据岛提供了一种对外,数据岛提供了一种对XMLXML格式的数据和格式的数据和HTMLHTML的一些对的一些对象(如表格、文本框等)进行绑定的技术。象(如表格、文本框等)进行绑定的技术
5、。9.1 XML9.1 XML与数据库概述与数据库概述 数据库提供了对大批量数据进行有效存储管理、快数据库提供了对大批量数据进行有效存储管理、快速信息检索和查询的功能。从体系结构上看,数据库技速信息检索和查询的功能。从体系结构上看,数据库技术的发展经历了网状型数据库、层次型数据库、关系数术的发展经历了网状型数据库、层次型数据库、关系数据库、面向对象数据库等几个阶段。据库、面向对象数据库等几个阶段。虽然面向对象数据库融入了面向对象技术,但是到虽然面向对象数据库融入了面向对象技术,但是到目前为止,在各个领域使用最广泛的还是关系数据库。目前为止,在各个领域使用最广泛的还是关系数据库。因此,下面主要介
6、绍因此,下面主要介绍XMLXML与关系数据库和面向对象数据与关系数据库和面向对象数据库的相关概念。库的相关概念。9.1.1 XML9.1.1 XML与关系数据库与关系数据库 关系数据库有自己的查询语言,那就是结构化查询语关系数据库有自己的查询语言,那就是结构化查询语言言SQLSQL(structured query languagestructured query language)。)。SQL SQL是非过程性的语言。是非过程性的语言。一般情况下,大多数支持一般情况下,大多数支持SQLSQL的服务器系统均采用客的服务器系统均采用客户服务器架构,现在又发展到更为先进的分布式处理架户服务器架构,
7、现在又发展到更为先进的分布式处理架构。构。与与XMLXML文档不同,数据库将不再扮演简单的数据容器文档不同,数据库将不再扮演简单的数据容器的角色。数据库相当灵活,允许开发者将适合自己应用的角色。数据库相当灵活,允许开发者将适合自己应用需要的规则和模式存入其中,而不仅仅是单纯而枯燥的需要的规则和模式存入其中,而不仅仅是单纯而枯燥的数据。数据。针对针对XMLXML数据,一般有两种存储方式:一种是将其按数据,一般有两种存储方式:一种是将其按结构层次拆分开来分别存于不同字段,另一种是将结构层次拆分开来分别存于不同字段,另一种是将XMLXML文文档原封不动地存入数据库。档原封不动地存入数据库。9.1.2
8、 XML9.1.2 XML与面向对象数据库与面向对象数据库 面向对象数据库源于计算机编程语言中的面向对象技术。面向对象数据库源于计算机编程语言中的面向对象技术。面向对象数据库管理系统(面向对象数据库管理系统(OODBMSOODBMS)使得文本、图像、)使得文本、图像、视频和空间数据可以存储在数据库中。视频和空间数据可以存储在数据库中。XML XML的出现给面向对象数据库注入了新的生机和动力。的出现给面向对象数据库注入了新的生机和动力。当当XMLXML同关系数据库相结合时,一般需要将同关系数据库相结合时,一般需要将XMLXML文档按元文档按元素层次结构拆分后依次存入数据库中的相应字段。素层次结构
9、拆分后依次存入数据库中的相应字段。这样一来,这样一来,XMLXML文档的整体性将受到破坏,除非有一个文档的整体性将受到破坏,除非有一个预先设定的小程序对数据库中的数据进行整合,否则预先设定的小程序对数据库中的数据进行整合,否则XMLXML数数据将失去结构信息而变得一团糟。据将失去结构信息而变得一团糟。当当XMLXML同面向对象数据库相结合时,同面向对象数据库相结合时,XMLXML数据将不再数据将不再被拆分,而是被描述成一个对象存入数据库,其优点显而被拆分,而是被描述成一个对象存入数据库,其优点显而易见,易见,XMLXML数据的结构和语义信息可以完整地保留下来。数据的结构和语义信息可以完整地保留
10、下来。目前,各厂商纷纷推出一些针对目前,各厂商纷纷推出一些针对XMLXML的面向对象数据的面向对象数据库,如库,如XhiveXhive和和XML RepositoryXML Repository。著名的。著名的Object DesignObject Design公公司也调整策略,将其面向对象数据库的产品司也调整策略,将其面向对象数据库的产品ObjectStoreObjectStore融入了融入了XML ServerXML Server体系之中。体系之中。9.1.3 9.1.3 基于基于XMLXML的数据库模型的数据库模型究竟什么样的数据库才能称得上是究竟什么样的数据库才能称得上是XMLXML数
11、据库呢?数据库呢?一般认为,一个基于一般认为,一个基于XMLXML的数据库系统应该具备以下特征:的数据库系统应该具备以下特征:(1 1)能根据)能根据DTDDTD或或SchemaSchema确定数据库的模式。确定数据库的模式。(2 2)支持)支持XML XML 常用解析器,可以进行事件驱动的常用解析器,可以进行事件驱动的XMLXML处理。处理。(3 3)内置数据处理语言模块()内置数据处理语言模块(XMLXML语法分析器),能够进行语法分析器),能够进行XMLXML文档数据的语法分析,同时对数据库中的元素进行直接的文档数据的语法分析,同时对数据库中的元素进行直接的定位操作。定位操作。(4 4)
12、提供标准的)提供标准的XMLXML查询语言。通过套用一定的样式模式,输查询语言。通过套用一定的样式模式,输出多种格式的文档。出多种格式的文档。(5 5)能够处理大型数据集合,能够对置标文本的结构和内容)能够处理大型数据集合,能够对置标文本的结构和内容进行索引。进行索引。(6 6)提供开发工具包,支持)提供开发工具包,支持XML DOMXML DOM、SAXSAX、JavaScriptJavaScript语言语言等。等。(7 7)提供一定的机制保证数据的一致性。例如,通过行级或)提供一定的机制保证数据的一致性。例如,通过行级或页级共享锁、排他锁对数据加锁,满足用户对数据进行并发读页级共享锁、排他
13、锁对数据加锁,满足用户对数据进行并发读写时数据的有效性。写时数据的有效性。(8 8)支持)支持OLAPOLAP和数据仓库等高级应用。和数据仓库等高级应用。9.1.4 XML9.1.4 XML在数据库中的应用模式在数据库中的应用模式 通常,通常,XMLXML在数据库中的应用模式需要借助在数据库中的应用模式需要借助3 3层架构来实现,层架构来实现,一般会有一个代理程序运行于中间层,通过它来访问数据库管一般会有一个代理程序运行于中间层,通过它来访问数据库管理系统中的数据和输出理系统中的数据和输出XMLXML文档。文档。代理程序实际上是一种在客户端桌面应用层与底层数据层代理程序实际上是一种在客户端桌面
14、应用层与底层数据层之间传递数据的工具。利用之间传递数据的工具。利用CSSCSS或或XSLXSL技术,技术,XMLXML可以实现基于可以实现基于WebWeb浏览器的多样式可视化显示。浏览器的多样式可视化显示。代理程序还可以进行双向的基于事件的数据更新,也就是代理程序还可以进行双向的基于事件的数据更新,也就是说,客户端的数据发生了如数据的插入、删除、修改等变化时说,客户端的数据发生了如数据的插入、删除、修改等变化时可以通过代理程序反映到底层数据库,而数据库的更新也能够可以通过代理程序反映到底层数据库,而数据库的更新也能够通知到客户端。表面上看,这种机制同传统的通知到客户端。表面上看,这种机制同传统
15、的3 3层架构没有什层架构没有什么区别,但实际上是不同的,因为数据在传输过程中都已经么区别,但实际上是不同的,因为数据在传输过程中都已经XMLXML化了。化了。开发一个访问数据库的开发一个访问数据库的XMLXML应用系统需要同时借助应用系统需要同时借助XMLXML编程编程接口和数据库编程接口,前者用于对接口和数据库编程接口,前者用于对XMLXML文档的解析、定位和文档的解析、定位和查询,所需技术包括查询,所需技术包括XML DOMXML DOM和和SAXSAX;后者则是用于访问数据库,;后者则是用于访问数据库,如数据库中数据的更新和检索等,需要使用的技术有如数据库中数据的更新和检索等,需要使用
16、的技术有ODBCODBC、JDBCJDBC、ADOADO等。等。9.2 XML9.2 XML数据源对象数据源对象 数据源对象(数据源对象(data source objectdata source object,DSODSO)是在)是在HTMLHTML文文件中加载结构化数据的另外一种方法。件中加载结构化数据的另外一种方法。9.2.1 XML9.2.1 XML数据源对象的基本概念数据源对象的基本概念 不同类型的数据格式有不同类型的不同类型的数据格式有不同类型的DSODSO,不同类型的,不同类型的DSODSO有有不同的数据处理方式。不同的数据处理方式。作为一个文件形式保存在计算机系统中的作为一个文
17、件形式保存在计算机系统中的XMLXML文档,使用文档,使用DSODSO来操作它们时,类似于操作传统关系数据库。来操作它们时,类似于操作传统关系数据库。在一个关系数据库实例中,使用表格来表示数据的组织。在一个关系数据库实例中,使用表格来表示数据的组织。每个表格是一个二维表,表格的每一列叫做数据项或字段,表每个表格是一个二维表,表格的每一列叫做数据项或字段,表格的一行称为一条记录,一个表格包含若干字段和若干行。若格的一行称为一条记录,一个表格包含若干字段和若干行。若干行的集合称为记录集(干行的集合称为记录集(recordsetrecordset)。)。结构化结构化XMLXML数据可以与一个表格对应
18、。数据可以与一个表格对应。9.2.2 9.2.2 数据集操作数据集操作 在操作在操作XMLXML文档数据时,文档数据时,DSODSO允许从一行数据移动允许从一行数据移动到下一行数据,以及添加、删除、修改数据记录等,到下一行数据,以及添加、删除、修改数据记录等,这些操作使用这些操作使用recordsetrecordset对象来实现。对象来实现。属属 性性操操 作作AddNewAddNew在文件尾部加入一条新记录在文件尾部加入一条新记录bof()bof()记录集的逻辑项,当指针指向记录集的逻辑项时,该属性为真,否记录集的逻辑项,当指针指向记录集的逻辑项时,该属性为真,否则为假则为假deletede
19、lete删除当前记录删除当前记录eof()eof()记录集的逻辑底,当指针指向记录集的逻辑底时记录集的逻辑底,当指针指向记录集的逻辑底时,该属性为真,否则该属性为真,否则为假为假move(n)move(n)把记录指针移动到第把记录指针移动到第n n条记录条记录moveFirstmoveFirst记录指针指向第一条记录记录指针指向第一条记录moveLastmoveLast记录指针指向最后一条记录记录指针指向最后一条记录movePreviomovePreviousus记录指针指向当前记录的前一条记录记录指针指向当前记录的前一条记录moveNextmoveNext记录指针指向当前记录的下一条记录记录
20、指针指向当前记录的下一条记录Field()Field()表示字段的属性表示字段的属性recordsetrecordset对象的属性和方法对象的属性和方法1.1.移动记录指针移动记录指针把数据集指针移动到第把数据集指针移动到第3636条记录的操作:条记录的操作:mydatas.recordset.move(36)mydatas.recordset.move(36)把数据集指针移动到第一条记录的操作:把数据集指针移动到第一条记录的操作:mydatas.recordset.moveFirstmydatas.recordset.moveFirst把数据集指针移动到最后一条记录的操作:把数据集指针移动到
21、最后一条记录的操作:mydatas.recordset.moveLastmydatas.recordset.moveLast把数据集指针移动到当前记录的前一条记录的操作:把数据集指针移动到当前记录的前一条记录的操作:mydatas.recordset.movePreviousmydatas.recordset.movePrevious把数据集指针移动到当前记录的下一条记录的操作:把数据集指针移动到当前记录的下一条记录的操作:mydatas.recordset.moveNextmydatas.recordset.moveNext2.2.添加记录添加记录 在一个打开的记录集中增加一条新记录的操作:
22、在一个打开的记录集中增加一条新记录的操作:mydatas.recordset.AddNewmydatas.recordset.AddNew3.3.删除记录删除记录 在一个打开的记录集中删除某一条记录时,需先在一个打开的记录集中删除某一条记录时,需先移动记录指针到该记录,再执行删除操作,如删除第移动记录指针到该记录,再执行删除操作,如删除第2020条记录的操作:条记录的操作:mydatas.recordset.move(20)mydatas.recordset.move(20)mydatas.recordset.deletemydatas.recordset.delete4.4.修改记录修改记录
23、 在一个打开的记录集中修改某一记录的数据时,需先在一个打开的记录集中修改某一记录的数据时,需先移动记录指针到该记录,再使用移动记录指针到该记录,再使用field()field()属性指定要修改属性指定要修改的某个字段,如要修改第的某个字段,如要修改第6868条记录的条记录的“学号学号”字段的操作:字段的操作:mydatas.recordset.move(68)mydatas.recordset.move(68)mydatas.recordset.field(mydatas.recordset.field(学号学号)=200712016)=2007120165.5.操作的循环操作的循环 当对整个
24、记录或相邻的多个记录进行某些相同的操作时,可当对整个记录或相邻的多个记录进行某些相同的操作时,可以使用循环控制语句来实现。在基于以使用循环控制语句来实现。在基于B/SB/S的网络编程中可以使用的网络编程中可以使用JavaScriptJavaScript和和VBScriptVBScript两种脚本语言来实现。两种脚本语言来实现。使用使用JavaScriptJavaScript来实现的语句为:来实现的语句为:while(!mydatas.recordset.eof)while(!mydatas.recordset.eof)mydatas.recordset.moveNext;mydatas.rec
25、ordset.moveNext;使用使用VBScriptVBScript来实现的语句为:来实现的语句为:do while not mydatas.recordset.eofdo while not mydatas.recordset.eofmydatas.recordset.moveNext;mydatas.recordset.moveNext;looploop9.2.3 9.2.3 数据源数据源 在在HTMLHTML中,通过元素中,通过元素及指定其属性的属及指定其属性的属性值与一个性值与一个XMLXML文档建立数据源连接,再使用表单元素来文档建立数据源连接,再使用表单元素来读取和显示读取和显
26、示XMLXML文档中的数据,如文档中的数据,如inputinput元素。元素。元素元素的语法格式为:的语法格式为:属性属性idid标识为数据源提供的唯一名称,用来调用该数标识为数据源提供的唯一名称,用来调用该数据源。属性据源。属性srcsrc是连接是连接XMLXML数据源的文档。数据源的文档。举例:举例:用用srcsrc把外部把外部XMLXML文档文档9-1.xml9-1.xml调入,并用调入,并用idid属性值属性值booksbooks唯一唯一地标识该文档。地标识该文档。9.2.3 9.2.3 数据源数据源-使用数据源转换使用数据源转换XMLXML文档示例文档示例XMLXML文档如下:文档如
27、下:计算机网络计算机网络(第第5 5版版)/)谢希仁谢希仁/20062006年年8 8月本教材通过了教育部的评审,被纳入普通高等教育月本教材通过了教育部的评审,被纳入普通高等教育“十一五十一五”国家级规划教材。国家级规划教材。/402402页页/35.0035.00 0.870.87 电子工业出版社电子工业出版社/20082008年年1 1月月1 1日日/7121053861 7121053861 计算机计算机/我等不到了我等不到了/谢希仁谢希仁/写下来才发现,真实,比文学还文学。从古典,到荒诞,从平静,到写下来才发现,真实,比文学还文学。从古典,到荒诞,从平静,到高潮,应有尽有。高潮,应有尽
28、有。/293293页页/35.0035.00 0.740.74 人民文学出版社人民文学出版社/20102010年年5 5月月1 1日日/7020079997,9787020079995 7020079997,9787020079995 文学文学/英汉医学辞典英汉医学辞典(第第3 3版版)/)陈维益陈维益/英汉医学辞典英汉医学辞典(第第3 3版版)自自19841984年问世以来,已两次修订,发行数量年问世以来,已两次修订,发行数量超过超过4545万册,深受读者欢迎。万册,深受读者欢迎。/12361236页页/75.0075.00 0.730.73 上海科学技术出版社上海科学技术出版社/20092
29、009年年4 4月月1 1日日/7532394883,9787532394883 7532394883,9787532394883 工具书工具书/使用数据源转换使用数据源转换XMLXML文档示例文档示例使用数据源转换使用数据源转换XML文档,其用于转换的文档,其用于转换的HTML文档如下:文档如下:网络在线图书销售系统网络在线图书销售系统 h2color:teal;font-family:楷体楷体_gb2312 inputfont-size:12px fontfont-size:14px 网络在线销售图书信息网络在线销售图书信息 书名:书名:作者:作者:内容简介:内容简介:页数:页数:价格:价
30、格:折扣:折扣:出出 版版 社:社:出版日期:出版日期:书号:书号:类别:类别:在这个在这个HTMLHTML文档中,通过使用文档中,通过使用标签对来定义标签对来定义数据源,然后在数据源,然后在formform的的inputinput元素中引用该数据源,运行效果元素中引用该数据源,运行效果。9.2.4 9.2.4 表格转换表格转换 在在DSODSO的的XMLXML数据的格式化显示中,可以使用数据的格式化显示中,可以使用HTMLHTML中的中的tabletable、divdiv、spanspan标签进行格式化显示,从而把标签进行格式化显示,从而把XMLXML转换成表格形式。转换成表格形式。其格式为
31、:其格式为:table datasrc=div datasrc=span datasrc=网络在线图书销售系统网络在线图书销售系统 h2color:teal;Font-family:楷体楷体_gb2312;inputfont-size:12px;tdfont-size:12px;fontfont-size:14px;网络在线销售图书信息网络在线销售图书信息 书名书名 作者作者 内容简介内容简介 页数页数 价格价格 折扣折扣 出版社出版社 出版日期出版日期 书号书号 类别类别 在转换在转换XMLXML文档时,使用表格转换方法来读取文档时,使用表格转换方法来读取XMLXML文档数文档数据同样有效。
32、运行效果如图据同样有效。运行效果如图9.3 XML9.3 XML数据转换为数据库数据转换为数据库 在不考虑在不考虑XMLXML元素的类型定义和数据模型的情况元素的类型定义和数据模型的情况下,将下,将XMLXML文件直接转换成关系数据库表格是比较简文件直接转换成关系数据库表格是比较简单的。但是,如果还要考虑单的。但是,如果还要考虑XMLXML数据类型与转换成的数据类型与转换成的数据库表格字段的数据类型定义时,问题就变得比数据库表格字段的数据类型定义时,问题就变得比较复杂。如何实现较复杂。如何实现XMLXML数据与数据库之间的转换,仍数据与数据库之间的转换,仍是目前是目前XMLXML技术应用研究的
33、重要领域之一。技术应用研究的重要领域之一。9.3.1 9.3.1 转换模型转换模型 在在把把XMLXML数据转换成数据转换成关系数据库关系数据库的的实际转换过程中,会实际转换过程中,会丢失一些丢失一些XMLXML文档的信息,同时把文档的信息,同时把某元素的某元素的属性看成是属性看成是该该元元素的子元素来转换。素的子元素来转换。在把在把一个元素中又包含了子元素的一个元素中又包含了子元素的XMLXML文档的转换文档的转换成成关关系数据库系数据库时,会把子元素值进行组合,时,会把子元素值进行组合,元素所属的子元素在元素所属的子元素在表格中的所属关系信息表格中的所属关系信息就就完全消失完全消失了了,看
34、不出,看不出XMLXML文档的原文档的原有信息,所以将会丢失大量的有信息,所以将会丢失大量的XMLXML描述的数据信息。描述的数据信息。在在把把XMLXML数据转换成数据转换成关系数据库关系数据库的的实际转换过程中,会丢实际转换过程中,会丢失一些失一些XMLXML文档的信息,同时把文档的信息,同时把某元素的某元素的属性看成是属性看成是该该元素的元素的子元素来转换。子元素来转换。在把在把一个元素中又包含了子元素的一个元素中又包含了子元素的XMLXML文档的转换文档的转换成成关系关系数据库数据库时,会把子元素值进行组合,时,会把子元素值进行组合,元素所属的子元素在表元素所属的子元素在表格中的所属关
35、系信息格中的所属关系信息就就完全消失完全消失了了,看不出,看不出XMLXML文档的原有信文档的原有信息,所以将会丢失大量的息,所以将会丢失大量的XMLXML描述的数据信息。描述的数据信息。为了使转换的数据表能保留原为了使转换的数据表能保留原XMLXML文档的全部信息,需要文档的全部信息,需要把元素属性和下一级子元素分别加以考虑把元素属性和下一级子元素分别加以考虑,转换成多个表格,转换成多个表格并使用主键并使用主键。若在其他子元素中又包含有其他属性,还应为相应的元若在其他子元素中又包含有其他属性,还应为相应的元素和属性设计表格,并使用二级主键标识。依次来看,随着素和属性设计表格,并使用二级主键标
36、识。依次来看,随着XMLXML文档复杂性的增加,文档复杂性的增加,XMLXML转换成数据表会越来越困难。转换成数据表会越来越困难。9.3.2 9.3.2 数据类型数据类型 把把XMLXML文档数据转换成数据库表时,必须考虑元素数据文档数据转换成数据库表时,必须考虑元素数据的数据类型。的数据类型。一般数据库系统都定义了基本的和复合的数据类型,一般数据库系统都定义了基本的和复合的数据类型,如如intint型、型、charchar型、型、decimaldecimal型、型、floatfloat型、型、moneymoney型等。型等。在在XMLXML技术中,技术中,W3CW3C推出的推出的XML Sc
37、hemaXML Schema规范,不但可以定义规范,不但可以定义基础类型的数据,还可以在基础类型之上定义派生类型的基础类型的数据,还可以在基础类型之上定义派生类型的数据,提供的各种数据类型有数据,提供的各种数据类型有4040余种。如余种。如stringstring型、型、booleanboolean型、型、decimaldecimal型、型、floatfloat型、型、doubledouble型、型、durationduration型、型、datetimedatetime型、型、timetime型、型、datedate型、等数据类型,几乎囊括了型、等数据类型,几乎囊括了现代计算机语言中所有定义
38、的数据类型。现代计算机语言中所有定义的数据类型。在对一个实际在对一个实际XMLXML文档进行设计时,应充分使用这些文档进行设计时,应充分使用这些数据类型对数据元素进行模式设计,以约束数据类型对数据元素进行模式设计,以约束XMLXML元素的数元素的数据类型,写出规范的据类型,写出规范的XMLXML文档。文档。在在XMLXML文档元素与数据库表之间进行转换时,需根据文档元素与数据库表之间进行转换时,需根据XML SchemaXML Schema文档所定义的数据约束来设计元素的数据类型,文档所定义的数据约束来设计元素的数据类型,把一个把一个XMLXML文档元素数据转换成数据库中相应的数据类型。文档元
39、素数据转换成数据库中相应的数据类型。9.3.3 9.3.3 创建数据库创建数据库 下面用下面用SQL Server 2000SQL Server 2000来创建数据库和数据库表,并来创建数据库和数据库表,并为数据库表添加为数据库表添加XMLXML数据。数据。若已知若已知XMLXML文档的结构,可用创建数据库和数据库表语文档的结构,可用创建数据库和数据库表语句来创建相应的数据库及表,在句来创建相应的数据库及表,在SQL Server 2000SQL Server 2000中,使用中,使用的是的是T-SQLT-SQL。9.4 XML9.4 XML数据库数据库 在存储和查询在存储和查询XMLXML数
40、据时,主要有以下两种方法:数据时,主要有以下两种方法:(1 1)在已有的关系数据库系统或面向对象数据库系统)在已有的关系数据库系统或面向对象数据库系统的基础上扩充相应的功能,使其能够胜任的基础上扩充相应的功能,使其能够胜任XMLXML数据的处理,数据的处理,这种数据库又称为这种数据库又称为XMLXML使能数据库。使能数据库。(2 2)为)为XMLXML数据设置的数据库即纯数据设置的数据库即纯XMLXML数据库。纯数据库。纯XMLXML数据库充分考虑到数据库充分考虑到XMLXML数据的特点,以一种自然的方式来数据的特点,以一种自然的方式来处理处理XMLXML数据,能够从各方面很好地支持数据,能够
41、从各方面很好地支持XMLXML的存储和查询,的存储和查询,并且能够达到较好的效果,但是纯并且能够达到较好的效果,但是纯XMLXML数据库技术要走向数据库技术要走向成熟仍需经历一段时间。成熟仍需经历一段时间。9.4.1 XML9.4.1 XML数据库概念数据库概念 目前,基于目前,基于XMLXML的数据库系统有的数据库系统有XEDBXEDB(XML enable XML enable databasedatabase)和)和NXDNXD(native XML databasenative XML database)两大类。)两大类。XEDB XEDB是在传统关系数据库系统(是在传统关系数据库系统
42、(RDBMSRDBMS)的基础上增加了)的基础上增加了对对XMLXML技术的支持,从而使得传统数据库系统能够访问技术的支持,从而使得传统数据库系统能够访问XMLXML文档。文档。NXD NXD是以是以XMLXML文档为基础,可以直接操作文档为基础,可以直接操作XMLXML源文件的数据源文件的数据库管理系统。库管理系统。1.XML1.XML数据库定义数据库定义 R.Bourret R.Bourret认为,只有满足以下认为,只有满足以下3 3个条件的个条件的XMLXML数据库才数据库才能称为纯能称为纯XMLXML数据库:数据库:(1 1)为)为XMLXML文档定义了一个逻辑模型,文档定义了一个逻辑
43、模型,XMLXML数据的存储和数据的存储和查询都基于这个模型。这个模型至少要包含元素、属性及查询都基于这个模型。这个模型至少要包含元素、属性及PCDATAPCDATA等,并保持文档顺序。等,并保持文档顺序。(2 2)将)将XMLXML文档作为逻辑存储的基本单位,正如关系数文档作为逻辑存储的基本单位,正如关系数据库将行据库将行(元组元组)作为存储的基本单位。作为存储的基本单位。(3 3)不要求只能使用某一特定的底层物理模型或某种专)不要求只能使用某一特定的底层物理模型或某种专有的存储格式。有的存储格式。2.XML2.XML数据库应具有的功能数据库应具有的功能 一般来说,纯一般来说,纯XMLXML
44、数据库应该具有文档集合、查询、更数据库应该具有文档集合、查询、更新、事务、锁和并发控制、二次开发接口等诸多功能。新、事务、锁和并发控制、二次开发接口等诸多功能。XML XML数据库还应提供文档还原功能,即可以将数据库还应提供文档还原功能,即可以将XMLXML文档存文档存放在数据库中,而且能再取回放在数据库中,而且能再取回“同样的同样的”文档。文档。纯纯XMLXML数据库都能够在元素、属性、数据库都能够在元素、属性、CDATACDATA和文件顺序的和文件顺序的级别上为文档提供还原功能。级别上为文档提供还原功能。XML XML数据库比较麻烦的问题是规范化、引用完整性等。数据库比较麻烦的问题是规范化
45、、引用完整性等。这方面的研究才刚刚起步,尤其在理论上仍不成熟。这方面的研究才刚刚起步,尤其在理论上仍不成熟。XML Query应用程序XML数据y外部访问接口(API)查询分解查询优化查询执行查询分解事务管理数据库管理和维护元数据管理索引管理存取控制存储管理(包括缓冲区管理)磁 盘3.XML3.XML数据库的体系结构数据库的体系结构一个典型的纯一个典型的纯XMLXML数据库系统的体系结构如图数据库系统的体系结构如图9.4.2 9.4.2 访问访问XMLXML数据库数据库 把把XMLXML文档作为数据库使用,需要数据转换、数据文档作为数据库使用,需要数据转换、数据查询、链接等访问技术。查询、链接等访问技术。目前,主流相关技术主要有目前,主流相关技术主要有XSLTXSLT、DOMDOM和和SAXSAX等。需等。需要说明的是,这些技术仍处于发展阶段,是要说明的是,这些技术仍处于发展阶段,是XMLXML数据访数据访问处理的新技术。问处理的新技术。第9章结束!Thank you!