日期:2013-01-29  浏览次数:20431 次

  本文探讨 SQL Server 2005 中内置的 XML 支持。描述了这种支持如何与 .NET 框架 V2.0 和本机代码(例如 OLEDB 和 SQLXML)均支持的客户端编程相集成。

  一、简介

  可扩展标记言语 (XML) 作为一种与平台无关的数据表示方式已被广泛采用。它对于在松散耦合且完全不同的系统,以及各种企业到企业 (B2B) 使用和任务流范畴内交换信息是很有用的。数据交换已成为 XML 技术的次要驱动力之一。.

  XML 在企业使用程序中的使用正日益广泛,它次要用于对半结构化和非结构化数据进行建模。文档管理就是这样的一种使用程序。像电子邮件这样的文档是半结构化性质的。如果文档以 XML 的方式存储在数据库服务器中,就可以开发功用强大的使用程序来依据文档内容检索文档、查询部分内容(例如查找标题包含单词“背景”的部分),以及查询文档聚合。如果存在能够生成和使用 XML 的使用程序,则这样的方案就变得可行了。例如,Microsoft Office 2003 系统允许用户以 XML 标记的方式生成 Word、Excel、Visio 和 Infopath 文档。

为什么使用关系数据库来存储 XML 数据?

  将 XML 数据存储在关系数据库中会给数据管理和查询处理带来好处。SQL Server 提供了强大的查询和修正关系数据的能力,而且曾经扩展到查询和修正 XML 数据。这使得可以利用在过去的版本上所进行的投资,就好像基于成本的优化和数据存储领域一样。例如,关系数据库中的索引技术曾经广为人知,而且曾经扩展到用于索引 XML 数据,这样就可以使用基于成本的决策来优化查询。

  XML 数据可以与现有的关系数据和 SQL 使用程序进行互操作,这样就可以在需求进行数据建模而又不破坏现有的使用程序的系统中引入 XML。数据库服务器还提供了管理功用来管理 XML 数据(例如备份、恢复和复制)。

  这些功用促进了对 SQL Server 2005 中的原生 XML 支持的需求,从而处理了不断添加的 XML 使用的问题。SQL Server 2005 中的 XML 支持将给企业使用程序开发带来好处。

  下面几部分将概述 SQL Server 2000 和 2005 中的 XML 支持,描述一些推动 XML 使用的方案,并且详细讨论服务器端和客户端的 XML 功用集。

SQL Server 2000 中的 XML 支持

  这一部分简要概述了 SQL Server 2000 中的 XML 支持,以及随后发布的 SQLXML 客户端编程平台 Web 版,它提供了丰富的支持来将关系数据映射到 XML 数据或将 XML 数据映射到关系数据。

服务器端支持

  在服务器上,XML 数据可以从表生成,并通过在 SELECT 语句中使用 FOR XML 子句来查询结果。这对于数据交换和 Web 服务使用程序是很理想的。FOR XML 的逆函数是一个名为 OpenXML 的关系行集合生成器函数;它通过求 XPath 1.0 表达式的值来从 XML 数据提取值,并将其放到行集合的列中。使用程序使用 OpenXML 来“切碎”传入 XML 数据,并将其存放到表中,或者用于通过 T-SQL 言语进行的查询。

客户端支持

  SQL Server 2000 对客户端编程的支持称为 SQLXML。这项技术的核心是 XML 视图,它是 XML 架构和关系表之间的双向映射。SQL Server 2000 只支持 XDR 架构的映射,虽然在后续的 Web 版中添加了对 XSD 的支持。XML 视图允许使用 XPath 1.0 的一个子集来进行查询,其中,可以使用映射将路径表达式转换成底层表中的 SQL 查询,并且将查询结果打包成 XML 结果。

  SQLXML 还支持您创建 XML 模板,这使得您可以创建带有动态部分的 XML 文档。在 XML 文档中,您可以嵌入 FOR XML 查询和/或映射查询之上的 XPath 1.0 表达式。在执行 XML 模板时,可以用查询的结果来替换查询块。通过这种方式,您可以创建带有某些静态内容和某些数据驱动的动态内容的 XML 文档。

  在SQL Server 2000 中,有两种访问 SQLXML 功用的次要方法:

  SQLXMLOLEDB Provider。SQLXMLOLEDB Provider 是一个 OLE DB 提供程序,它通过 ADO 地下 Microsoft SQLXML 功用。

  HTTP 访问。SQL Server 2000 中的 SQLXML 功用也可以使用 SQLXML ISAPI 过滤器通过 HTTP 进行访问。通过使用我们的配置工具,您可以建立网站来检索传入请求,从而通过 HTTP 执行 XML 模板、XML 视图之上的 FOR XML 和 XPath 1.0 语句。

XML 支持的局限性

  服务器和客户端编程平台为基于表格和 XML 数据之间的映射生成和使用 XML 数据提供了丰富的支持。这能够相当好地处理结构化 XML 数据。在 SQLXML 中,查询言语是 XPath 1.0 的一个子集,并且有一些局限性。例如,不支持 descendant-or-self 轴 (//)。因此,在开发某些处理方案时会存在一定的限制。例如,不保存 XML 文档顺序,而这对于像文档管理这样的使用程序来说是非常关键的。此外,还不支持递归的 XML 架构。虽然存在这样一些局限性,但是客户端 SQLXML 和服务器 XML 功用还是在使用程序开发中得到了广泛的使用。SQL Server 2005 处理了许多这样的限制,扩展了关系 XML 交换功用,并且还提供了原生 XML 支持。

SQL Server 2005 中的 XML 支持概述

  这一部分简要概述了 SQL Server 2005 中添加的新的 XML 支持,它是通过.NET 框架 V2.0 中的支持和本机客户端数据访问(如 OLE DB)进行补充的。

XML 数据类型

  XML 数据模型具有一些特性,这些特性使得映射到关系数据模型非常困难,如果不是完全不可能的话。XML 数据具有可以递归的层次结构;关系数据库提供对层次数据(建模为外键关系)的弱支持。文档顺序是 XML 实例的固有属性,并且必须保存在查询结果中。这与关系数据构成了对比,关系数据是无序的,必须通过附加的排序列来强制进行排序。在查询时重新组合结果是很费力的,由于实际的 XML 架构将 XML 数据分解到大量的表中。

  SQL Server 2005 引入了一种称为 XML 的本机数据类型。用户可以创建这样的表,它在关系列之外还有一个或多个 XML 类型的列;此外,还允许带有变量和参数。为了更好地支持 XML 模型特征(例如文档顺序和递归结构),XML 值以内部格式存储为大型二进制对象 (BLOB)。

  SQL Server 2005 提供了 XML 架构集合,可以将其作为一种方法来以元数据的方式管理 W3C XML 架构。XML 数据类型可以与 XML 架构集合相关联,以便对 XML 实例强加架构限制。当 XML 数据与 XML 架构集合相关联时,它称为类型化的 XML;否则,就称为非类型化的 XML。在一个框架中可以同时容纳类型化的 XML 和非类型化的 XML,保留 XML 数据模型,并且强制采用 XML 语义进行查询处理。底层关系基础结构被广泛用于这一目的。它支持关系数据和 XML 数据之间的互操作,这为更广泛地采用 XML 功用开辟了道路。

XML 数据类型查询和数据修正

  可以使用 T-SQL SELECT 语句来检索 XML 实例。在 XML 数据类型中提供了五种内置的方法来查询和修正 XML 实例。

  XML 数据类型的方法接受 XQuery,它是一种新出现的 W3C 标准言语(目前处于 Last Call(最后请求)形状),并且包括导航言语 XPath 2.0。也可以使用一种言语来修正 XML 数据,比如添加或删除子树和更新标量值。与一大组函数一同,嵌入式的 XQuery 和数据修正言语为处理 XML 数据提供了丰富的支持。

  XQuery 类型系统与 W3C XML 架构类型是分歧的。大多数 SQL 类型与 XQuery 类型系统是兼容的(例如,小数)。少数类型(例如,xs:duration)是以内部格式存储的,并且可以通过适当的解释来与 XQuery 类型系统兼容。

  编译阶段检查 XQuery 表达式和数据修正语句的静态类型的正确性,并且