分享
 
 
 

基于XML的数据库总体分析

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

我们知道当存在大量数据需要处理分析的话,最好是把这些数据放到数据库中,所以几乎所有大型的商业应用系统都是和数据库相关联的,所以如果XML需要在商业领域大展宏图的话,也必须要和数据库相联系。所以这里首先需要讨论的一点问题是,XML本身是不是数据库,从严格的意义上来说,XML仅仅意味着XML文档。因为尽管一个XML文档包含数据,但是如果不通过其他的软件的软件来进行数据处理的话,它本身只不过是一个文本文件。所以XML本身不不能和数据库挂上钩,但是加上一些其他的辅助工具,我们可以把整个XML看成是一个数据库系统,XML文本本身可以看成是数据库中的数据区,DTD或者Schemas可以看成是数据库模式设计,XQL可以看成是数据库查询语言,SAX或DOM可以看成是数据库处理工具。当然它还是缺少数据库所必须的一些东西,比如有效的存储组织、索引结构、安全性、事务处理、数据完整性、触发器、多用户处理机制等等。

但是为什么要把XML和数据库相联系呢?举个例子来说明这个问题,比如你有一个电子商务的应用程序需要使用XML来进行数据传输。你所关心的是数据本身应该具有的结构,你并不关心它在文档中实际的存储结构。如果你的应用程序很简单的话,基本的文件系统将满足你的需求,但如果应用本身很复杂的话,你就需要一个完整的开发应用环境来支持XML。从另一个方面来说,假设你有一个Web站点,它的内容是由一系列XML文档构成的,你不仅要管理这个站点,同时你需要提供给用户一个搜索该站点内容的机制。而这些都需要借助数据库来实现。选择一个数据库的最重要的因素是你是否需要数据库来存储数据或者是文档,如果你想要存储数据的话,你需要一个关系数据库或者是对象数据库来存储实际的数据,同时你需要中间件在数据库和XML文档之间建立桥梁关系,从另一方面来说,如果你想要存储文档,你需要一个内容管理系统,通过它进行文档的存储。实际上,XML文档可以分到两大类:以数据为中心或者以文档为中心。

以数据为中心的文档:数据为中心的文档有非常规则的结果,比如关于销售订单或者是饭店菜单的XML文档。以数据为中心的文档通常是为机器设计的,也就是说主要是方便机器进行处理。通常,任何Web站点可以动态的构建HTML文档,其步骤如下,根据用户的查询请求找到相关的面向数据的XML文档,然后通过XSL对XML文档进行转化,让基于HTML的浏览器能够方便的浏览结果。

以文档为中心的文档:以文档为中心的文档具有不规则的结构,而且数据的粒度也比较大。具体的例子如书本、电子邮件、广告等等。以文档为中心的文档主要是用人类而设计的。

为了存储或提取数据,你可以使用数据库和中间件,或者你可以使用XML服务器,或者是基于XML的Web服务器。为了存储文档,你需要一个内容管理系统或者是可持久化的DOM实现。可以在数据库或者是XML文档中发现大量基于数据为中心的文档。这样我们就需要工具把数据从数据库转化成XML文档,或者把一个XML文档转换到数据库中。同时需要注意的是,当把数据存储到数据库中的时候,需要抛弃一个文档的很多信息,比如它的名称和DTD,它的物理结构,比如实体定义和使用,一个节点下元素的位置排列,二进制数据的存储方式等等。同样,当从数据库中提取数据的时候,产生的XML文档通常不包含CDATA或者是实体使用的说明,而且节点下元素的排列位置只和数据库中记录的顺序位置一致。实际上一个XML文档存储到数据库中,再由该数据库生成此XML文档,这前后两个文档格式几乎不可能完全一样。

为了在数据库和XML文档之间传递数据,必须在文档结构和数据库结构之间建立映射,这种映射可以有两个分类:模板驱动和模型驱动。

1.基于模板驱动的映射:需要在一个模板中嵌入命令,并用数据传输中间件进行处理。比如,考虑下面的模板:

<?xml version="1.0"?>

<FlightInfo>

<Intro>The following flights have available seats:</Intro>

<SelectStmt>SELECT Airline, FltNumber, Depart, Arrive FROM Flights</SelectStmt>

<Conclude>We hope one of these meets your needs</Conclude>

</FlightInfo>

注意其中嵌入了一个SELECT语句。当用数据传输中间件进行处理的时候,每一个SELECT语句都会被它的结果所代替,用XML格式化形式表现为:

<?xml version="1.0"?>

<FlightInfo>

<Intro>The following flights have available seats:</Intro>

<Flights>

<Row>

<Airline>ACME</Airline>

<FltNumber>123</FltNumber>

<Depart>Dec 12, 1998 13:43</Depart>

<Arrive>Dec 13, 1998 01:21</Arrive>

</Row>

...

</Flights>

<Conclude>We hope one of these meets your needs</Conclude>

</FlightInfo>

基于模板驱动的映射可以是相当灵活的,比如,一些产品允许你把结果集放到XML文档的任何位置,同时可以对SELECT语句设置参数,并且可以使用for循环语句和if条件语句等。值得注意的是,当前基于模板驱动的映射只能应用于在关系数据库和XML文档之间传递数据。

基于模型驱动的映射:也就是说把数据从数据库传送到XML文档是用一个具体的模型实现的,这样,XSL可以被结合到基于模型映射的产品上。在XML文档中,两种模型是很常见的:表格模型(table model)和数据专用对象模型(data-specific object model)。

2 表格模型:许多中间件软件包用表格模型在XML文档和关系数据库之间传递数据。它把XML文档表示为一个单一的表格或者是表格的集合。这样,一个XML文档的结构可以用如下的形式表示:

<database>

<table>

<row>

<column1>...</column1>

<column2>...</column2>

...

</row>

...

</table>

...

</database>

这里关键字"talbe"在把数据从数据库传递到XML文档的时候,表示一个单一的结果集,把数据从XML文档传递到数据库的时候,表示表示一个单一的表格或者视图。但是,当结果集合不只一个的时候,或者当XML文档包括多个复杂嵌套的时候,这种传递方式就不能适应了。

2 数据专用的对象模型:把一个XML文档表示为由数据对象构成的树,每一个元素类型和对象相对应。主要在面向对象和层次数据库中使用,通过传统的关系-对象模型也可以映射到关系数据库中。注意这种模型并不是文档对象模型(DOM)。比如,销售订单文档可以被看成一个对象树,其中包括五个类:Orders, SalesOrder, Customer, Line, 和Part。

当把一个XML文档看成是一个以数据为中心的对象树的时候,元素不一定和对象相对应,比如,一个元素只包含PCDATA,它能够被当成一个属性,它包括一个单一的,标量值。

实际上在XML和数据库之间进行数据转化的时候,需要考虑两个过程:一个是从数据库模式中产生DTD,另外一个是根据DTD生成数据库模式

从一个DTD中生成一个关系模式的步骤如下:

1. 对每一个元素,产生一个表和一个主键列。

2. 对每一个有混合内容的元素,产生一个独立的表格,用来存储PCDATA,并通过父表的主键和父表相联。

3. 对元素类型中的每一个单一值的属性,对具有只有PCDATA内容的子元素(该子元素按顺序出现),产生一个单独的列,如果子元素类型或者值是可以选择的话,该列就应该可以允许为NULL类型。

4. 对有多个值的属性和可以出现多次的子元素(该子元素PCDATA)的话,需要创建一个单独的表来存储这些值,并通过父表的主键和父表相联。

5. 对每一个包含元素或者混合内容的子元素来说,通过父表的主键把父元素和子元素联接起来。

从一个关系数据库模式构建DTD步骤如下:

1. 对每一个表,创建一个元素。

2. 对表中的每一列,创建一个属性或者是一个只有PCDATA 内容的子元素。

3. 根据表中的每一主键/外键关系,创建该表元素的子元素。

基于XML的数据库产品分类

根据Ronald Bourret在XML Database Products一文中的描述,XML Database中包含有七种类型的产品,分别为:

2 中间件(Middleware )

1、 与XML相结合能驱动XML的数据库(XML-Enabled Databases),比如Oralce和微软都宣称在它们最新的数据库产品都都能够和XML进行无缝的衔接。

2、 原始的XML数据库(Native XML Database)

3、 XML服务器(XML Servers)

4、 XML应用服务器,比如IBM的WebSphere

5、 内容管理系统(Content Management Systems)

2 可持久化的DOM实现(Persistent DOM Implementations)

下面我们对每一种产品做一个具体的说明和介绍

中间件:所谓中间件就是用来在XML文档和数据库之间进行处理和转化的软件。主要应用于以数据为中心的应用里面,它可以用各种各样的语言编写,一般来说它需要用到ODBC, JDBC,或者是 OLE DB. 尽管它可以通过Internet进行是数据的传输,但是一般它都是通过Web服务器来实现数据的传输。

下面我们需要考虑当把XML文档存储到数据库中,如何选择适合你应用程序的中间件。

实际上,在我们选择中间件的时候,我们要考虑下面一些因素

1. 数据类型: XML不支持数据类型,也就是说,在XML文档中的所有数据都是文本,即使数据它本身代表了另外一种数据类型,比如日期或者整数。通常,数据传输中间件将把数据转化为其他类型。

2. 二进制数据处理:有两种通常的方法存储XML文档中的二进制数据:未经过解析的实体(unparsed entities)和Base64编码。

3. Null类型处理:在关系数据库世界中,NULL表示该数据不存在,它和0或者是空字符串当然是不一样的。当然,XML也支持NULL的概念。如果一个可选择的元素类型或者属性是NULL的话,它就不包括在这个文档里面。当映射一个XML文档的结构到数据库或者根据数据库内容生成XML文档的时候,你需要考虑可选元素类型和属性跟可NULL的列之间的映射。

4. 字符集:一个XML文档可以包含任何Unicode字符,而不幸的是,许多数据库并不支持Unicode。因此如果你的数据包括非ASCII字符的时候,需要注意数据库和中间件对这些字符的处理。

5. 关于XML中的处理指令:处理指令并不是XML文档中的数据,因此中间件就很难决定如何存储它们。所以在选择中间件的时候,要看它们对处理指令的处理情况。

6. 标记存储:注意不同的中间件对标记的处理是不一样的。而且在数据库中的存储模式也不同,见下面的例子:

<description>

<b>Confusing example:</b>

</description>

在数据库中存储的形式如下:

<b>Confusing example:</b> <foo/>

这主要是因为数据库不能识别<b>和<foo>是标记还是文字。

典型的中间件有:

ADO:它可以实现数据库和XML文档之间的双向转换。XML支持把一个记录集合对象保存为一个XML文档,它也能够把一个XML文档作为一个记录集合进行处理,这样就在XML文档和数据库之间提供了一个桥梁。这种映射实际上是模型驱动的,数据可以被看成是一棵对象树,一个具有嵌套结构的树可以作为一个嵌套的记录结果集被显示,反之也是如此。另外,如果记录集合数据有变化的话,可以反映到相应的XML文档中,而XML文档中内容的变化也可以导致数据库内容的变化。

ASP2XML:主要是通过一个COM对象实现XML文档和基于ODBC或者是OLE DB的数据库之间数据的传递。该产品实际上是基于模型驱动的,把XML文档看成是一个单一的表,当把数据从数据库传递到XML文档的时候,用户指定一个SELECT语句,输出包含了ASP2XML专用的标签。当把XML文档的数据传递到数据库的时候,XML文档必须包含ASP2XML专用的标签。该COM对象是支持自动化的,也就是说它能够在剧本语言中使用,比如ASP。

支持XML的数据库系统(XML-Enabled Databases):数据库提供了扩展的功能,能够在XML文档和数据库之间进行数据的传输。通常是设计成为能够存储和提取以数据为中心的文档。一般来说是把XML文档进行解析以后,存储到相应的表格中,当然,也可以存储以文档为中心的文档,也就是说把整个文档作为一个单一的表中的一个字段,然后通过文本检索机制进行查询。因为许多数据库现在能够把内容发布到网站上,基于XML的数据库和XML服务器之间的差别就变得很模糊。

典型的产品有:微软的SQL Server 2000。SQL Server2000通过三种方式支持XML技术:

1 在SELECT语句中增加了FOR XML条件子句:FOR XML条件子句有三种选择,用来指定如何把SELECT语句映射到XML上去。RAW模式指定结果集为一个表格,表格中的每一行对应一个元素,每一列对应元素的属性或者是它包含的子元素。AUTO和RAW的区别在于:行的元素名称和表格名称一致,产生的XML文档是线性嵌套的,和表格在SELECT语句中出现的顺序相对应。EXPLICIT允许你使用一系列的SELECT语句的UNION来构建一个XML文档。

2 通过XPath进行信息定位:通过模式映射的方式,也就是在XML文档的元素和属性以及在数据库中的表和字段之间建立映射关系。这里把XML看成是一棵对象树,而使用XPath的一个子集来进行查询。

3 在存储过程中使用OpenXML函数:OpenXML函数被用来提取XML文档的任何一个部分,并把它当作一个表格,然后就可以用SELECT语句中的FROM指定这个表格,并通过INSERT语句在XML文档和数据库之间传递数据。并可以用XPath来指定具体的元素或者属性。

原始的XML数据库(Native XML Database):实际上,在一个数据库中存储XML文档可以有四种选择:

1. 以文本形式存储整个文档,比如在关系数据库中用BLOB类型,在文件系统用文件类型。

2. 在文件系统中以修改过的形式存储整个文档,比如,以压缩的形式或者事先解析过的形式。

3. 把文档结构映射到数据库中,比如把DOM模式映射成为数据库中表格的形式。如何建立映射,各个数据库可以有不同的实现,。

4. 把数据结构映射到数据库中,比如,把一个包含销售订单的XML文档映射到Order,Itmes,Parts和客户等表格中去。

原始的XML数据库和支持XML的数据库的区别在于原始的XML数据库一般使用方法2和方法3。而支持XML的数据库一般选用方法4。

典型的产品有斯坦福大学开发的Lore系统,它的数据库实际上是一个半结构化的数据库。所谓半结构化的例子就是我们的简历,其中既有一些结构化的信息,比如性别,年龄,通讯电话等等,也有非结构化的信息,比如个人特长等的描述。XML本身就是一个非常好的半结构化数据模式的例子,它本身是自描述的,包含了很多元数据。而且它同时可以扩展或增加新的元数据(或者说是新的字段)。

Lore是用来存储半结构化的数据库。它最开始是用来存储HTML文档数据的,但现在已经可以被用来作为XML数据库。它包括了一个查询语言(Lorel),多索引机制,查询优化器,多用户支持,日志记录和恢复等功能,并且能够倒入外部数据。因为Lore支持半结构化,所以它也能够存储没有DTD定义的XML文档。

XML服务器:一般认为,XML服务器是一个提供数据服务的平台,而这里的数据就是以XML形式出现的,而这些数据主要是为分布式应用程序服务的,比如电子商务和B2B应用等。XML服务器通常包括了一个完整的应用开发环境,并通过各种数据存储方式来使应用程序可以方便的获取和使用这些数据。存储的数据包括传统的数据库数据、电子邮件信息和文件系统等等。我们知道传统的Web服务器都是基于HTML文本进行信息传送的,随着XML技术的出现,对于基于XML的Web服务器的需求也就产生了。那么到底什么是XML服务器呢?准确定义XML Server这个概念是困难的,因为这实在是一个比较新,而且概念很广泛的东西,虽然已经有许多的产品称自己为XML Server,比如DataChannel公司的DataChannel Server 4.1;Software AG公司的Tami

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有