Microsoft SQL Server 2005 中的 XML 支持(10)

SQLXML — XML 和关系架构之间的映射

可以使用 SQLXML 映射技术来创建关系数据的逻辑 XML 视图。XML 视图(也称为“映射”或“带注解的架构”)是通过将特殊的注解添加到特定的 XSD 架构中创建的。于是,其他的 SQLXML 技术就可以使用这种带注解的架构,将针对逻辑 XML 视图进行的查询和更新转换成针对关系表进行的查询和更新:

当 XML 视图与 XPath 查询组合在一起时,SQLXML 将生成 FOR XML 查询来查找请求数据,并且根据架构的指定对其进行构形。

SQLXML Updategrams 表示对 XML 实例进行的更改,当与带注解的架构组合在一起时,将使用开放式并发将这些更改重新保存到关系更改中,以确保更新正确的数据。

SQLXML Bulkload 使用 XML 视图将 XML 数据“切碎”并存放到关系表中。

有关这些主题的更多信息,请访问 SQLXML documentation

创建关系表的 XML 视图

要创建数据库的 XML 视图,需要从用于 XML 数据的 XSD 架构开始。数据库表/视图中的行将映射为该架构中复杂类型的元素。数据库中的列值映射为属性或简单类型的元素。

默认情况下,如果没有给出显式注解,SQLXML 就会假定复杂类型的元素将映射到表,而简单类型的元素和属性将映射到列。只有当元素和属性的名称与数据库中表和列的名称完全相同时,这才有效。

如果元素/属性的名称与它映射到的表/视图或列的名称不同,则必须创建显式映射。下面的注解用于指定 XML 文档中的元素或属性间的映射和数据库中的表(视图)或列之间的映射:

sql:relation — 将 XML 元素映射到数据库表。

sql:field — 将元素或属性映射到数据库列。

通过映射关系创建 XML 视图中的层次

在数据库中,表可以通过外键关系来关联。在 XML 中,这些相同的关系是通过嵌套的元素层次来表示的。为了在映射中构造正确的嵌套,必须指定关联元素的方式。可以使用 sql:relationship 注解在映射架构元素中建立这些关系。在这种注解中,可以指定父表和子表,以及每个表中需要用于执行加入的列。然后,SQLXML 将利用这些信息为映射构造正确的嵌套层次。

使用溢出存储未使用的数据

当 XML 数据有正规的结构时映射是有效的。然而,在 XML 中,可能有一些数据是非结构化的,还可能有一些数据没有映射到特定的列。要存储这种数据并随后检索它,可以使用 sql:overflow 注解。sql:overflow 注解指定存储所有未使用数据的列以及查询时从何处检索数据。

通过溢出列,还可以扩展 XML,而不必将其添加到数据库。可以在任何时候将元素和属性添加到 XML 结构,而不必在数据库中添加列来存储它们。可以将它们简单地存储到溢出字段,并且在适当的时候对其进行检索。

更多信息

有关创建 XML 视图和映射示例的详细信息,请参阅 Creating XML Views by Using Annotated XSD Schemas

使用 XPath 来查询 XML 视图

一旦创建好数据库的 XML 视图,就可以使用 XPath 查询语言来查询视图,就好像它是实际的 XML 文档一样。SQLXML 支持 XPath 1.0 查询语言中的一个子集。当针对映射进行 XPath 查询时,SQLXML 将它们组合在一起,并且创建发送到 SQL Server 的 FOR XML EXPLICIT 语句。然后检索正确的数据,并根据映射对其进行构形。

请参阅 SQLXML 文档以获得关于 XML 视图中支持的 XPath 子集的详细信息。

使用 Updategrams 通过 XML 视图进行更新

可以通过 XML 视图修改(插入、更新或删除)SQL Server 中的数据库,方法是针对数据库的 XML 视图使用 Updategram。

updategram 的结构

updategram 是一个 XML 文档,带有<sync>、<before> 和<after> 元素,这些元素构成了 updategram 的语法。每个<sync> 块包含一个或多个<before> 和<after> 块。<before> 标识记录实例的现有状态(也称为“前状态”)。<after> 标识要更改的数据的新状态。updategram 是删除、插入还是更新记录实例取决于<before> 和<after> 块的内容。

插入操作

当记录实例出现在<after> 块而没有出现在相应的<before> 块中时,updategram 指示插入操作。在这种情况下,updategram 将<after> 块中的记录插入数据库。

删除操作

当记录实例出现在<before> 块而没有相应的记录出现在<after> 块中时,updategram 指示删除操作。在这种情况下,updategram 从数据库中删除<before> 块中的记录。

如果在 updategram 中指定的元素或者匹配表中的多行或者不匹配表中的任何行,则 updategram 会返回错误,并取消整个<sync> 块。updategram 中的元素一次只能删除一条记录。

更新操作

当更新现有的数据时,必须指定<before> 和<after> 块。updategram 使用<before> 块中指定的元素来标识数据库中的现有记录。<after> 块中相应的元素指示在执行更新操作之后记录的外观应该怎样。

<before>块中的元素必须只与数据库中的一个表行相匹配。如果该元素匹配多个表行或不匹配任何表行,则 updategram 都会返回错误,并且取消整个<sync> 块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值