XML与关系数据库之间的转换.docx
- 文档编号:23081122
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:19
- 大小:290.75KB
XML与关系数据库之间的转换.docx
《XML与关系数据库之间的转换.docx》由会员分享,可在线阅读,更多相关《XML与关系数据库之间的转换.docx(19页珍藏版)》请在冰豆网上搜索。
XML与关系数据库之间的转换
摘要:
随着XML数据的日益增多,XML已经成为了互联网上数据表示和数据交换的标准格式。
同时也涌现出大量的XML数据存储方法,比较有代表性的有XML专用数据库存储、面向对象数据库存储、关系数据库存储等。
由于关系数据库的大力发展、广泛应用和其成熟的技术,在存储管理XML的各种可能的方式中,基于关系数据库的XML数据存储成为一种可行而有前景的方式,受到了广泛的关注。
由于关系数据库的二维平面关系表结构与XML的层次结构有很大差异,怎样在关系数据库中有效地存储XML文档,同时又能保持其结构信息和文档信息成为一个难题。
为了解决这一难题,使得XML模式与关系模式之间的映射问题,成为XML文档的关系化存储技术的核心问题。
本文主要探讨了XML与数据库映射的方法。
第一章前言
近年来,互联网得到了迅猛发展,它提供了全球范围的网络互联与通信功能,其丰富的信息资源给人们的学习和生活带来了极大的便利。
作为互联网最主要应用的Web实际上已成为最大的信息资源库。
电子商务、电子出版、远程教育等基于Web的新兴领域的全面兴起使得传统的Web资源更加复杂化和多样化。
人们对Web服务功能的需求也达到更高的标准,如用户需要对Web进行智能化的语义搜索和对数据按照不同的需求进行多样化显示等个性化服务;公司和企业要为客户创建和分发大量有价值的文档信息,以及对不同平台、不同格式的数据源进行有效的数据交换和集成等等。
在这种大环境下,以简单易学、灵活通用著称的HTML,随着网络应用的日益广泛,局限性逐渐明显,越来越不能适应作为Intemet上信息交换和表示的工具了。
XML(eXtensibleMarkupLanguage)作为SGML(StandardGeneralizedMarkupLanguage)的一个优化子集,它不像HTML那样事先定义好一组标签,而是提供了一个标准,只要遵循这个标准,你可以灵活的定义自己的标记。
XML不仅能够存储数据,而且能够存储结构和语义信息,具有通用的数据表示能力,能表示结构化、半结构化及元结构化数据,可以描述不同种类应用软件中的数据,这使其在数据交互和信息共享方面拥有天然的优势,成为Web上数据表示与交换的通用标准。
XML与HTML相比主要有以下几点优势:
(1)XML简单,具有自我描述能力。
通过语义标记来说明数据的语义,容易理解且易于解析。
这使得XML具有机器可读性,具体应用可以按照各种方式解析、过滤及重构XML文档。
(2)XML具有灵活性。
HTML的标记是预定义的,具有固定的名称及语义,不能扩展,而XML的标记可由用户定义,可以被任意的扩展。
XML的嵌套结构可以表示各种复杂的数据结构,各种格式的数据都可以较容易的转换为XML数据,这使得XML非常适合于Web信息的发布和集成。
(3)XML具有平台独立性。
XML可用于不同类型、系统间的交换格式的传送,从而简化了从一个应用程序到另一个应用程序之间传递信息的工作。
(4)XML实现了结构、内容和显示相分离。
文档类型定义(DTD)或XML模式(XMLschema)描述了XML文档的结构,即元素间的嵌套关系。
XML文档实例只描述数据,使得数据具有独立性,而XML文档的显示具有多样性,XML文档的显示是由XML文档配合XSL(eXtensibleStyleLanguage)来完成的,对同一个XML文档可以根据应用的需要以不同的风格显示。
由于XML的诸多优势,出现大量的XML数据,并且保持着快速增长,使得对XML有效存储和操作方面的研究日益受到重视。
同时由于关系数据库技术的大力发展、成熟的技术和广泛的应用,使得XML文档的关系化存储成为研究的一大热点。
本文所研究的就是XML与关系数据库之间的转换方法。
第二章XML技术
XML(eXtensibleMarkupLanguage,可扩展标记语言)是由W3C[”】于1998年2月发布的一种标准,是SGML的一个简化集。
它继承了SGML的强大功能,去除了繁琐的定义,弥补了HTML作为网络标准语言的不足。
它将SGML的丰富功能和HTML的易用性结合到了万维网的应用中,深受软件开发商的支持和程序开发人员的厚爱。
目前XML在很多方面都有应用,具有如下特点:
·2.1XML的特点
XML作为一种标记语言,具有严格、规范的语法,创建XML文档必须满足一定的规范,依据XML1.0规格,所有的XML文档都必须是格式良好的(well.formed),一个格式正确的XML文档必须符合以下几点要求:
(1)声明语句。
XML声明必须以小写xml声明,并设置version属性,必须出现在第一行,其格式如下:
xmlversion=”1.0”standalone=”yes/no”encoding=”UTF一8II?
>,声明的作用是告诉浏览器或者其它处理程序:
这个文档是XML文档。
声明语句中的version表示文档遵守的XML规范的版本;standalone表示文档是否附带DTD文件,如果有,参数为no;encoding表示文档所用的语言编码,默认是UTF.8。
(2)元素。
元素组成了XML文档中的大部分内容,XML文档有且只有一个根元素,所有元素(Elemem)构成一个层次树,元素之间必须正确嵌套。
元素由一对标记组成,结束标记匹配相应的起始标记。
格式为:
<标记名>内容叫标记名>。
(3)属性。
元素可以用属性来注释,属性通常用来给元素提供所显示内容的额外信息,出现位置为元素的起始标记中,对于一个元素来说,不能存在多个相同名称的属性,元素大小写敏感。
格式为:
属性名=属性值。
(4)处理指令。
处理指令通常用来为处理XML文档的应用程序提供信息,这些信息包括如何处理文档,如何显示文档等。
处理指令的出现位置可以为元素的后裔,也可以为根元素的前面或者后面。
格式为:
targetdate?
>。
(5)注释。
XML注释出现位置可以为元素的后裔,也可以为根元素的前面或者后面。
格式为:
一注释内容_>。
(6)命名空间。
XML允许设计者定义自己的标记名,命名空间的出现解决了重名的情况。
格式为:
xmlns:
prefix=’URI’。
下图给出了一个良构的XML文档例子,如下:
图表1
·2.2XML的应用分析
作为互联网的新技术,XML的应用非常广泛,渗透到了互联网的各个角落。
借用Gartner公司的报告中的一句话:
“商业公司不能再做局外人了,不能对XML置之不理’’。
可见,XdvlL的重要性,以下是XML的主要应用场合:
(1)数据交换。
电子商务通过互联网传输和交换商务数据,并对商务数据进行人工或自动处理,这也是XML的主要应用领域之一。
XML的可扩展性和自相容性等特点,使之成为数据交换的有力工具。
(2)内容管理。
XML只用元素和属性来描述数据,而不提供数据的显示方法,它提供了一个独立于平台和语言的内容,使用象XSLT这样的语言能够轻易地将XML文件转换成各种格式文件,比如HTML,WML,PDF,flatfile,EDI,等等。
(3)WEB集成。
现在有越来越多的设备也支持XML了,为了利用互联网技术和标准为移动设备连接互联网建立全球性的同一规范,Phone.com联合了Motorola等通讯公司建立了WAP论坛,推出了WAP规范,同时W3C也定义了基于XML的手持设备置标语言HDML。
(4)配置管理。
许多应用都将配制数据存储在各种文件里,将配制数据标记为XML格式,能使其更具可读性,并能方便地集成到应用系统中去。
使用XML配制文件的应用程序能够方便地处理所需数据,不用象其他应用那样要经过重新编译才能修改和维护应用系统。
·2.3XML模式语言
XML模式语言负责定义和描述XML文档的结构和内容模式。
它可以定义XML文档中存在哪些元素和元素之间的关系,并且可以定义元素和属性的数据类型。
XML模式语言主要有两种:
DTD和XMLSchema,现分别介绍如下:
2.3.1DTD
DTD是DocumentTypeDefinition(文档类型定义)的简称。
它是一套关于标记的语法规则,详细描述一组XML文档的结构。
DTD列出了可用在文档中的元素、属性、实体和符号表示法,说明在文档中可以使用哪些标一记,哪些标记可以出现在其它标记中,哪些标记具有属性,使用的标记应按什么顺序出现等。
例如,图表2是一个XMLDTD的例子,图表1中的XML文档就是符合这
个DTD的描述的:
图表2
在DTD文档中,可以利用操作符号(0次或多次)、+(至少1次)、?
(0次或1次)、l(或选)来定义子元素的出现次数。
其中ELEMENT表示元素,ATTLIST表示属性,#PCDATA表示数据,DTD假设所有取值都只能是字符串值。
XML文档中DTD的使用方法分两种:
内部DTD,即在XML文档的序言部分中直接加入DTD的描述;外部DTD,即DTD可作为一个完全独立的文件,将DTD存储在一个后缀为.dtd的文件中,在XML文件中调用它。
可以看出,内部DTD相当繁琐,通用性低,而同一个外部DTD文件,可以被多个XML文档引用;外部DTD文件的可移植性很好,当需要修改的时候,只修改外部DTD文件,而不需逐一修改使用了该DTD的所有XML文档。
使用了DTD的XML文档必须符合该模板的要求,在分析阶段必须通过DTD的有效性验证。
随着XML技术的广泛使用,DTD逐渐暴露了自身存在的不足:
(1)DTD是基于正则表达式的,描述能力有限;
(2)DTD没有数据类型的支持,在大多数应用环境下能力不足;
(3)DTD的约束定义能力不足,无法对XML实例文档做出更细致的语义限制:
(4)DTD的结构不够结构化,重用的代价相对较高;
(5)DTD并非使用XML作为描述手段,而DTD的构建和访问并没有标准的编程接口,无法使用标准的编程方式进行DTD维护。
2.3.2XMLSchema
同DTD一样,Schema也是一种XML文档模式定义语言。
但与DTD不同的是,Schema克服了DTD的几个局限,XMLSchema与DTD相比,有如下几个优点:
(1)XMLSchema使用标准XML语法,本身就是一个XML文档,可以直接用成熟的XML文档解析器读取;
(2)XML提供了丰富的数据类型,包括数字型、布尔型、日期型等等,并且可以定义新的数据类型,允许对数据进行更严格的合法性检查;
(3)XMLSchema支持继承性,即可利用一个已有的XMLSchema产生一个新的)(MLSchema;
(4)XML支持命名空间,保证了标记的唯一性;
XMLSchema的扩展性好,它的内容模型是开放的,可以随意扩充、更新等。
下面是一个XMLSchema的例子,一般,这样的模式文件保存在一个后缀为xsd的文件中,与图表2中dtd是等价模式,同样可以描述图表1的XML文档。
图表3
2.4XML解析技术
XML文档实际上就是纯文本数据,使用XML数据格式的应用程序首先必须能对XML数据进行读取、分析,进而进行处理。
SAX(SimpleAPIsforXML)与DOM(DocumentObjectModel)是两种常用的XML应用程序接口标准。
它们在应用程序开发过程的作用如下图:
图表4
下面分别给予详细的介绍。
2.4.1SAX
SAX(TheSimpleAPIforXML)即简单编程接口,第一个被广泛采用的用Java编写的XMLAPI,是一个事实上的标准【181。
SAX是一个通用的,基于事件的XML解析的标准编程接口。
SAX是事件驱动的“推”模型,是一种基于回调(callback)机制的程序运行方法,即它不需要一次读入整个文档,是边读文档边对文档进行解析,文档的读入过程就是SAX的解析过程。
从这一点来说,SAX是一种轻量型的解析方法。
图表5
2.4.2.DOM
DOM(DocumentObjectModel)即文档对象模型,一个来自W3C的成熟标准。
DOM将XML文档看作是一个分层的对象模型,是一棵节点树,称为DOM树。
在DOM树中,有一个根节点,即根元素,其它节点都是这个根节点的后代节点,节点用来表示XML文档中的元素,属性、文本、注释、处理指令以及类似的信息。
DOM是文档驱动的,即它一次把整个XML文档读入内存,然后向应用程序提供对整个文档可操作的DOM树,可以通过这棵树来访问所需信息。
DOM解析器需要一次把XML文档读入内存,从这一点来讲j它是一种重量型的解析方法。
图表6
2.4.3.DOM与SAX比较
SAX和DOM是两类不同的XML文档解析方法,两种技术各有利弊。
主要
区别在于:
应用程序的目的:
如果必须对数据进行更改,并且作为XML将它输出,则在大多数情况下,使用DOM。
与使用XSL转换来完成的简单结构更改不一样,如果是对数据本身进行更改,则尤其应该使用DOM。
(1)数据的数量:
对于大文件,SAX是更好的选择。
(2)将如何使用数据:
如果实际上只使用一小部分数据,则使用SAX将数据抽取到应用程序中,这种方法更好些。
另一方面,如果知道将需要向后引用已经处理过的信息,则SAX可能不是正确的选择。
(3)需要速度:
通常SAX实现比DOM实现快。
(4)值得说明的是,SAX和DOM并不是互斥的,这一点很重要。
可以使用DOM来创建事件的SAX流,可以使用SAX来创建DOM树。
事实上,大多数解析器常常使用SAX来创建DOM树。
第三章XML与数据库技术
3.1XML是数据库吗?
"XML是数据库吗?
"在严格意义上将,如果"XML"是指XML文档时,答案是"否"。
尽管XML文档包含了数据,但是如果没有其他的软件来处理这些数据,它对于数据库的意义和其他文本文件没有什么区别。
如果在更为宽泛一些的意义上将,当"XML是指XML文档以及所有相关的XML的工具和技术时,答案则是"是"。
之所以肯定是由于XML提供了许多数据库中所需要的部分:
存储(XML文档),结构(DTD,XMLschema语言),查询语言(XQL,XML-QL,QUILT等),编程接口(SAX,DOM),等等。
不过...XML还缺少很多在真实的数据库中所必备的内容:
有效的存储、索引、安全、交易、数据完备性、多用户访问、触发、多文档查询等。
因此如果在数据量一般、用户较少、性能要求不高的环境下可以把XML当作数据库来使用;而在大多产品的环境中,要求有许多的用户使用、需要严格的数据完整性并且对性能有很高的要求,XML就不能胜任了。
而且,考虑到象dBase和Access等数据库既便宜又十分易用,因此甚至在第一种情况下XML都很少有理由充当数据库的角色。
3.2数据和文档的对比
在选择数据库时,最重要的判断因素可能是你是利用数据库来保存数据还是保存文档。
如果你想保存数据,你需要的数据库主要是面向数据存储(例如关系型数据库或者面向对象型数据库)以及在数据库和XML文档之间相互转换。
从另一个角度来将,如果你想存储文档,你需要一个专门设计用来存储文件的内容管理系统。
虽然你可以自己把文件保存在关系数据库或面向对象数据库中,可是你常会发现你的工作是在重复内容管理系统的功能。
类似的,虽然一个内容管理系统通常是建立在面向对象数据库或关系数据库之上,但要是把一个内容管理系统当做数据库来使用就可能非常的令人困绕。
你需要存储数据还是文档,答案常常取决于你的XML文档。
原因是XML文件分为两大类:
以数据为中心和以文档为中心
3.2.1以数据为中心的文件
以数据为中心的文件的特点是结构相当规范、数据颗粒度好(也就是说,数据中最小的独立单元是PCDATA元素或者是属性)、很少或者没有混合内容。
其中同层次元素和PCDATA的出现顺序并不重要。
典型的例子是,XML文档包含了销售定单、飞行安排、餐馆菜单等等。
数据为中心的文档常被用于机器的使用,这时XML可能是多余的---它仅仅是数据传输的手段而已。
在XML的世界中,许多内容丰富的文档实际上都是数据为中心的。
我们以显示图书信息的A网站为例。
虽然这个页面是相当巨大的文本,但是这个文本的结构是高度规范的,其中许多的部分对任何的书本描述页面都是相同的,并且特点页面中的各部分的大小都是有限的。
也就是说,该页面可以通过一个简单的、数据为中心的XML文档来建立,其中包含了从数据库中检索得到的文本信息以及一个XSL样式表。
通常,目前任何通过在模板中填充数据库数据而动态构造HTML页面的网站都可以被上面介绍的用以数据为中心的XML文档和一个或者多个的XSL样式表方式替代。
3.2.2以文档为中心的文件
以文档为中心的文档的特点是:
结构不规范、数据颗粒度更大(即,最小的独立数据单元是包含有混合内容的元素或者就是整个XML文档)以及含有大量的混合内容。
其中相同层次的元素和PCDATA出现顺序是非常重要的。
典型的例子是书、电子邮件、广告以及大多数XHTML文档。
以文档为中心的文档是用于人的使用。
3.2.3数据、文档和数据库
在现实情况中,以数据为中心的文件和文档为中心的文件之间的区别并不是很严格。
例如,一个以数据为中心的文件(如一张发票),也有可能包含粗颗粒度、不规则的数据(如发票的描述部分)。
而一个以文档为中心文件(如用户手册)也可能包含有良好颗粒度、规则的结构化数据(通常是元数据),例如作者和修订日期。
除此之外,让你的文档具有以数据为中心或者以文档为中心的特点有助于你判断是关心数据还是文档,这也将决定你需要采用什么样的系统。
要存储或检索数据,你可以使用一个数据库(通常是关系型、面向对象型或者是层次型)和中间件(字带或者是采用第三方),你也可以使用XML服务器(即创建分布式应用的平台,例如利用XML进行数据传输的电子商务应用)。
要保存文档,你将需要一个内容管理系统或者是一致性的DOM实现系统。
第四章XML与关系数据库的转换
当前XML文档数据映射的研究,主要是XML与关系数据库的映射。
将XML文档映射为关系模式进行存储,有两大类映射方法:
模型映射(modelmapping)和结构映射(structuremapping),其中基于结构的映射方法又可以分为两类,分别是:
基于DTD的结构映射方法和基于XMLSchema的结构映射方法。
对于模型映射,需要将XML文档模型(即文档树结构)映射为关系模式,关系模式表示XML文档模型的构造,对于所有XML文档都有固定的关系模式,因此,它是XMLSchema(或DTD)无关的。
而对于结构映射,需要将XMLSchema(或而对于结构映射,需要将XMLSchema(或DTD)映射为关系模式,关系模式用来表示目标XML文档的逻辑结构(即XMLSchema或DTD),它是XMLSchema(或DTD)相关的。
在进行关系数据库映射时,从XML文档的DTD或Schema推断XML元素应该怎样映射到关系表,然后再根据生成的关系模式,对XML文档进行解析分解,并将数据存入关系数据库,这样的映射策略属于结构映射方法。
在本文中只考虑模型映射。
模型映射方法
模型映射法又分为:
边模型映射方法和结点模型映射方法。
将一个XML文档看成是一个有序有向边标记图,称为XML图,设计一个(或若干个)关系存储XML图的边信息和结点值,该策略是属于基于边的模型映射方法,称为边模型映射方法。
设计若干个关系来存储XML文档树的结点信息、结点值和结构信息(通过区间编码来译码结构信息,或直接存储双亲/孩子结点对或祖先/后裔结点对),该策略是属于基于结点的模型映射方法,称为结点模型映射方法。
4.1边模型映射法
一个XML文档能够用一个有序有向边标记图来表示在这种图中,每一个XML元素用一个结点表示,结点被标上XML对象的oid:
元素与子元素(或属性)之间的关系用图中的边来表示,并在边上标上子元素(或属性)名:
为了表示XML元素中各子元素的顺序,可以对图中从某结点引出的边进行排序:
XML文档中的值作为图中叶结点(即属性或最底层子元素结点)表示。
例如图7即为图1的XML文档对应XML文档图。
图表7
有了XML图之后,就可以分别设计关系表存储XML文档的边信息和值。
对于用来存储边信息的边表有三种设计方案:
第一种是所有具有相同名称的边存放在一个边表中,这种方法称为Binary方法。
因此,图2—7所示的文档图所对应的Binary方法的book和ISBN边表,其它依次类推:
图表8
图表9
第二种是用一个表来存储图的所有边信息,这种方法称为Edge方法。
系模式为:
Edge(source,ordinal,label,flag,target)。
其中source域和target域表示引出结点和引入结点的oid,ordinal域表示该边在兄弟边中的位置序号,label与用来存储边标记(即改边所指向结点的标记名),flag属性用来反映边所指向的结点类型(叶结点类型为integer、string等,非叶结点类型为ref)。
可以看出,Binary边表与Edge边表原理相同,只是Binary边表将所有具有相同边标记的边存放在一个表中,可以说,Binary边表是Edge边表的水平分割。
因此,图表7所示的文档图所对应的Edge边表为:
图表10
第三种是采用一个边表来存储图中所有路径的边信息,该方法称为Universal方法。
对于用来存储XML文档值的值表有两种设计方案:
第一种是不单独设计值表,将值和边存储在同一个表中,在边表中直接增加一个属性value,用于存储叶结点的值,这种方法称为内联方法。
其关系模式为:
Inner_Edge(source,ordinal,label,flag,target,value)。
第二种是为每一种可能的取值类型设计一个值表,该方法称为分离值表。
其关系模式为Valuetypc(vid,value),其中vid存储叶结点的oid,value属性用来存储叶结点的值。
从上面的映射模式可以看出,XML文档图的生成是基于XML文档本身,与XMLSchema和DTD没有关系,并且映射的过程中记录了结点的位置信息,因此反过来,也可以从关系数据库复原XML文档。
综上所述,三种边表设计方案连同两种值表设计方案,合在一起一共有六种存储模式。
D.Florescu和D.Kossmann对这六种基本的存储模式的结果占关系数据库大小、执行不同类型的X/VlL查询的执行时间、从关系数据重构XML文档的时间等三个性能参数进行了量化分析,结论是:
Binary边表方法优于Edge边表方法,Edge边表方法又优于Universal边表方法;内联值表方法优于分离值表方法;Binary边表带内联值表的存储模式能获得最好的综合性能。
Binary方法和Universal方法查询性能不好的主要原因是由于边表太大,因此执行连接操作非常费时。
事实上,对于一个给定查询来说,边表中存放的数据大部分是不相关的。
换句话说,在Binary方法中仅仅相关的数据被处理,即使卷入大量的连接和回路操作,由于现代关系查询引擎有非常强的查询处理能力,也能获得很好的查询性能。
内联值表方法优于分离值表方法的主要原因是内联方法无须进行边表与值表之间的连接操作。
对于许多不同的数据类型,由于在关系数据库系统中,空值通常以一种紧缩方式进行存储,因此空间就节省了,解决了大量冗余的问题。
4.2结点模型映射法
(1)XRel模式
M.Yoshikawa,T-Amagara等基于结点模型映射方法提出了一个XML数据的关系存储模式,称为XRel[341。
XRel是通过区间编码[start,end]来反映(译码)XML文档的模型结构,并根据内容来划分,分为元素边、属性边和文本边,同时将所有路径进行存储,因此,XRel模式由四个关系表组成:
Element(pathlD,doclD,start,end,ordinal)
Attr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- XML 关系 数据库 之间 转换