您的位置信息之舟电 脑硬件栏目首页数据库类其它 收藏本页

→ XML和数据库:从文档结构到数据库结构的映射

www.kepusoft.com 信息之舟电脑软件应用栏目

    信息之舟电脑软件应用栏目编者按:

    摘要:本论文简要的探讨了XML和数据库之间的关系,同时列出一些可以使用数据库处理XML文档的软件。虽然这里不打算详尽地介绍这些软件,但是笔者希望它能够描述使用数据库处理XML文档中的主要部分。

    5.2 从文档结构到数据库结构的映射

    为了在XML和数据库之间传输数据,需要在文档结构和数据库结构之间进行相互的映射。这样的映射通常分为两大类: 模板驱动和模式驱动。

    5.2.1 模板驱动的映射

    在以模板驱动的映射中,没有预先定义文档结构和数据库结构之间的映射关系

    ,而是使用将命令语句内嵌入模板的方法,让数据传输中间件来处理该模板。例如,考虑下面的模板(注意该模板并不适用任何实际的产品),在<SelectStmt>元素中内嵌了SELECT语句:

    <?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语句都将被各自的执行结果所替换,得到下面的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>

    这种以模板驱动的映射可以相当的灵活。例如,有些产品可以允许你在任何结果集合中替换你想要的内容(包括在SELECT中使用参数),而不是象上面的例子中简单地格式化结果。另外它还支持使用编程来进行构造,例如循环和条件判断结构。还有一些还支持SELECT语句的参数化,例如通过HTTP来传递参数。

    目前,以模板驱动的映射只支持从一个关系型数据库转换成XML文档的情况。

    5.2.2 模型驱动的映射

    在以模型驱动的映射中,利用XML文档结构对应的数据模型显式或隐式地将映射成数据库的结构,而且反之亦然。它的缺点是灵活性不够,但是却简单易用,这是因为它是基于具体的数据模型来进行映射的,通常能够为用户实现很多地转换工作。由于将数据从数据库转换成XML的结果依照了单个模型,

    因此通常在这种方式下通常结合XSL来提供模板驱动的系统中所具有的灵活性。

    在XML文档中的数据视图通常有两种模型:表格模型和特定数据对象模型。有时候也可能会出现其他的模型。例如,通过采用ID和IDREF属性,一个XML文档可以用来一个指定的图形。不过,很多现有的中间件并不支持这些模型。

    5.2.2.1 表格模型

    许多中间件软件包都采用表格模型在XML和关系型数据库之间进行转换。它把XML的模型看成是一个单独的表格或者是一系列的表格。也就是说,XML的文档的结构和下面的例子相类似,其中在单个表格的情况下,<database>并不出现:

    <database>

    <table>

    <row>

    <column1>...</column1>

    <column2>...</column2>

    ...

    </row>

    ...

    </table>

    ...

    </database>

    其中的术语"table"可理解为单个的结果集(当从数据库向XML中转换数据时),或者是一个单独的表格或可更新的视图(当从XML向数据库转换数据时)。如果数据需要来自多个结果集(当数据来自数据库中时)或者与仅仅表达成一系列表格的集合(当转换数据到数据库时)相比,XML的文档包含有更深层次的嵌套元素,那么类似的转换几乎是不可能的。

    5.2.2.2 特定数据对象模型

    XML文档中第二种普遍的数据模型是特定数据对象的树型结构。在该模型中,元素类型通常对应对象,而XML中的内容模型、属性和PCDATA则对应对象的属性。这种模型直接映射成面向对象的数据库和层次型数据库,当然借助于传统的对象-关系映射技术和SQL

    3对象视图也可以映射成关系数据库。要注意的是,这种模型并不是文档对象模型(DOM)。DOM是对文档本身进行建模,而不是对文档中的数据。如

    href="http://www.newasp.net/tech/net/"#writeyourown">6.1.2小节所述,DOM用来在关系型数据库的基础上建立内容管理系统。

    例如,上面的销售定单文档就可以看作是由五个类所组成的树型结构。如下面的视图所示,包括Orders, SalesOrder, Customer,

    Line和Part类:

    Orders

    |

    SalesOrder

    / | Customer Line Line

    | |

    Part Part

    当把一个XML文档建模为一棵特定数据对象树时,就没有必要要求元素一定要对应于对象。例如,如果一个元素只包含PCDATA,如销售定单文档中的CustName元素,它可以当作一个属性进行处理,因此属性只包含单一的、标量型数值。类似的,有时将混合元素或元素内容模型化成属性也是非常有用的。一个现成的例子就是在销售定单文档中对Description元素的处理:尽管它在XHTML的格式中有混合内容,但是将Description元素看作单个的属性会更有用些,因为它的组成部分本身并没有什么意义。

www.kepusoft.com 信息之舟电脑之家收集整理推荐文章