摘要:在一个任务关键数据存储于不同异构源的世界中,可扩展标记语言 (XML) 通过一种标准格式为不同应用程序间的数据交换和不同系统间的集成提供了强大的机制。
XML 已被紧密集成到 Microsoft® SQL Server™ 关系数据库管理系统 (RDBMS) 当中,可以帮助开发人员建立下一代 Web 和企业应用程序。本白皮书讲述了 SQL Server 2000 中的 XML 功能以及这些功能与 Oracle 中的功能比较。
为何实现 XML 与 RDBMS 的集成?
XML 支持以下商业方案下的信息交换:
企业对企业 (B2B)
不同供应商的集成供应链。
企业对消费者 (B2C)
要求从数据库获取数据的基于浏览器的应用程序。
企业内
集成,例如来自不同供应商的企业资源规划 (ERP) 和客户关系管理 (CRM) 软件。
这些商业方案要求为信息交换提供以下 XML 功能:
映射松散结合的商业系统。
SQL Server 2000 通过 XML 视图、XPath 查询和 SELECT 语句为关系数据提供 XML 视图。从 XML 数据到关系表的映射是使用 OPENXML 和注释架构提供的。
对数据库的安全 HTTP 连接。
对任意来源的 XML 数据的查询、更新和加载能力。
SQL Server 2000 为 SQL Server (SQLOLEDB) 和 Microsoft ActiveX® 数据对象 (ADO) 访问存储于 SQL Server 中的数据提供了 URL 和 Microsoft OLE DB 提供程序。
SQL Server 2000 中的 XML 提供程序
Microsoft® SQL Server™ 2000 是适合建立基于 XML 的应用程序的高度可伸缩和可靠的平台。SQL Server 2000 提供了以下 XML 功能:
HTTP 访问
用于以 XML 格式检索结果的新的 SELECT 语句选项 (FOR XML)
XML 模式
XML 视图
XPath 查询
OPENXML
OLE DB 和 ADO 访问
HTTP 访问
Microsoft® SQL Server™ 2000 为通过 HTTP 访问数据提供了三种方法:
URL 处的 SQL 语句
SQL 语句和存储过程可以直接从 URL 处执行。这允许特别迅速地访问数据库中的数据。
模板
模板是包含一个或多个嵌入式 SQL 语句的有效 XML 文档。跟 SQL 语句一样,模板可以在 URL 处或在文件中指定。模板允许使用 URL 检索 SQL 数据而不向查询者暴露数据库的结构;查询者只能知道模板名称。这省却了在 URL 处输入很长的 SQL 语句的麻烦。SQL Server 2000 在模板内支持以下功能:
SELECT 语句和实体引用。
存储过程的执行。
参数传递和默认参数的指定。
XPath 查询。
HTML 事件后集成
HTML 表单输入变量可以作为 URL 指定模板中的参数通过程序传递。可扩展样式表语言 (XSL) 样式表可用来处理客户端或 Web 服务器访问机制的输出。
使用 HTTP 访问时可用的选项
HTTP 访问方法支持以下选项:
contenttype
该关键字指定返回文档的内容类型。text/XML 是默认的文档内容类型。
xsl
该选项允许使用 XSL 文件处理查询结果。
安全
安全基于每个虚拟根目录设置,权限也在 SQL Server 上设置。ISAPI 动态链接库 (DLL) 有三种身份验证选项:
匿名访问
直接在虚拟根上设置 Microsoft Windows® 或 SQL Server 登录/密码并为所有用户所用。
基本身份验证
使用该选项时,清晰的文本 SQL Server 登录/密码要通过网络传递,因此该选项要结合安全套接字层 (SSL) 一起使用。
集成安全
使用 Windows 访问控制列表 (ACL)。
用于以 XML 格式检索结果的新的 SELECT 语句选项 (FOR XML)
您可以对已有关系数据库执行 SQL 查询并以 XML 格式而不是标准的行集格式返回结果。这些查询可以直接执行,也可以从存储过程中执行。要检索 XML 结果,请使用 SELECT 语句的 FOR XML 字句并指定 RAW、AUTO 或 EXPLICIT 等 XML 模式。
XML 模式
指定的 XML 模式决定了返回 XML 文档的形状。您可以指定以下 XML 模式:
RAW
RAW 模式获取查询结果并将结果集中的每一行转化为一个 XML 元素,并使用一个常规标识符作为元素标签,SELECT 中的列成为属性。
AUTO
AUTO 模式以简单的嵌套 XML 树返回查询结果。FROM 语句中至少有一列出现在 SELECT 语句中的表都被表示为 XML 元素。SELECT 语句中列出的列被映射为相应的元素属性。列也可以映射为子元素。结果集中元素的嵌套或者层次由 SELECT 语句中指定列所标识的表顺序决定。最左边的表将成为最顶层元素。次左边的表(由 SELECT 语句中的列标识)将嵌套在顶层元素内,依次类推。
EXPLICIT
在 EXPLICIT 模式下,您可以显式地定义结果 XML 树的形状。使用该模式要求以特殊方式书写查询,有关所需嵌套的附加信息也作为查询的一部分显式指定。
下图(图 1)显示了在 URL 中使用虚拟路径和 SQL 串以 AUTO 模式输出的结果。
图 1 在 URL 中使用虚拟路径和 SQL 串以 AUTO 模式输出的结果示例
使用 XML 模式时可用的选项
XML 模式支持以下选项:
XMLDATA
该选项随 XML 文档返回文档架构。
BINARY base64
在查询中指定该选项可以返回 base64 编码格式的二进制数据。在 RAW 和 EXPLICIT 模式下,不指定该选项检索二进制数据的结果是产生错误。
ELEMENTS
如果指定了该选项,列将以子元素形式返回,如下图(图 2)所示。否则,列将被映射为 XML 属性。该选项只支持在 AUTO 模式下使用。
图 2 使用元素选项的输出示例
XML 视图
Microsoft® SQL Server™ 2000 引入了几个 XML-数据架构语言注释以便提供数据库的 XML 视图。您可以在 XML-数据架构下使用这些注释来指定 XML-到-关系的双向映射。这包括 XML-数据架构中元素和属性到数据库中表和列的映射,以及反向的映射。默认情况下,注释架构中元素名映射于指定数据库中相同名称的表(视图),而属性映射于相同名称的列。这些注释还可以用于指定 XML 中的层次关系。
XPath 查询
SQL Server 2000 支持 XPath 语言的一个子集,使用它和前面讲述的 XML 视图技术可以从数据库获取 XML 结果。
OPENXML
OPENXML 是一个 Transact-SQL 关键字,可以在内存中的 XML 文档内提供关系/行集视图。OPENXML 是类似于表或视图的行集提供者。OPENXML 通过将数据从 XML 文档传入关系表而提供了在 Transact-SQL 上下文中访问 XML 数据的机制。因此,OPENXML 允许您管理 XML 文档及其与相关环境的交互。
OPENXML 可以用在 SELECT、INSERT、UPDATE 和 DELETE 等语句中。您可以指定 OPENXML 代替指定数据源表或视图。
XML 文档可以作为文本参数(char、nchar、varchar、nvarchar、text、ntext)传递给存储过程。OPENXML 语句可与其他 Transact-SQL 语句一起使用来提供 XML 数据的行集视图,因此执行插入、更新、删除和联接等关系操作时可以将 XML 文档作为数据源。这可以用来通过单个存储过程调用对数据库执行多行、多表更新。
OLE DB 和 ADO 访问
SQLOLEDB 已为 XML 和 Xpath 做了扩展。添加了一个新的 ICommandStream 接口用来向 OLE DB 传递需要处理的模板。另外,OLE-DB 提供程序的属性集也得到扩展,允许支持 IStream 的对象规范返回 XML 结果以及支持使用通过映射架构定义的 XML 视图进行 XPath 查询。流对象是在 ADO 2.5 中引入的,现在可以与新引入的语言分支一起用来向数据库发送 XPath 查询和从数据库接收 XML 结果。
Oracle 比较分析
SQL Server 2000 中的 XML 功能与 Oracle 中的功能类似。其主要差别在于 Oracle 建立了一个常规的 XML 框架,而 Microsoft 在 SQL Server 2000 内建立了特殊的 XML 支持。SQL Server 2000 支持通过简单的“即插即用”公开机制(XML 视图)在松散结合的商业系统间提供映射。例如,它直接包含了对检索 (FOR XML) 和存储 (OPENXML) XML 数据的支持。而 Oracle 的 XML 技术即使执行简单的 XML 任务也需要复杂的编程工作。与 Oracle 的解决方案不同,SQL Server 2000 为生成不同格式的 XML 文档提供了内在支持,而不必进行 XSL 转换。
功能列表
SQL Server 2000 和 Oracle XML 功能比较
尽管 Oracle 提供了一个常规 XML 框架,但您必须编写自定义程序才能使用其大部分 XML 功能。Oracle 提供了可被扩展以识别 XML 标记的 XML 文本搜索功能。
本文将比较以下 SQL Server 2000 和 Oracle XML 功能。
XML 视图
SQL Server 2000 包括为关系数据提供 XML 视图的技术。而 Oracle 目前必须编写自定义程序提供映射。
对数据库的内在扩展
数据库中的集成功能与外部实现的功能相比可以提供更高的性能。建立 SQL Server 2000 内在 XML 功能的决定考虑了这些性能因素。Oracle 不带内在 XML 支持。
检索动态 XML 格式
Oracle 查询产生类似于以元素为中心的 RAW 格式的固定 XML 格