摘要:在一个任务关键数据存储于不同异构源的世界中,可扩展标记语言 (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 和数据关系视图间提供双向映射。
SQL Server 2000 集成的 XML 功能允许通过最少的编程工作启用系统。
Oracle 不带任何集成 XML 特定功能。
XML 视图
XPath 支持
Transact-SQL FOR XML 扩展
Transact-SQL OPENXML 扩展
无特定功能。必须编写自定义程序。
到 SQL 的内在 XML 扩展
允许用户利用其 SQL 技能快速启用应用程序,而不必进行额外的编程工作。
SQL Server 2000 提供了到 SQL 语言的内在扩展,可以用来从标准 SQL 查询返回 XML 数据。
Oracle 提供的服务器端实用工具未对标准 SQL 进行扩展,要求额外编程才能返回 XML 数据。
Transact-SQL FOR XML 扩展
Transact-SQL OPENXML 扩展
无特定功能。必须使用 XSQL 实用工具编写自定义程序。
不同的 XML 访问方法
这些方法为通过网络连接访问 XML 数据的编程人员带来了灵活性。
SQL Server 2000 和 Oracle 均支持使用不同方法访问数据库中的 XML 数据。
HTTP 访问
OLE DB/ADO 访问
JDBC
HTTP 访问
OLE DB/ADO 访问
JDBC
XML 模板
XML 模板允许在服务器中间层上存储 XML 商业逻辑。
SQL Server 和 Oracle 均支持通过可选参数在服务器上存储 XML 查询模板。
URL/HTTP 访问
XML 模板
URL/HTTP 访问
XSQL 模板
对 XML 数据的安全
Web 访问
网络连接 Internet 应用程序要求安全的访问。
SQL Server 2000 提供了可在单表级上管理的安全性。
Oracle 提供了有限级别的安全性并支持加密整个数据库所有者,但不支持单表级的安全性。
数据库用户级安全
数据库对象级安全
数据库用户级安全
复杂 XML 文档的高级搜索选项
SQL Server 2000 和 Oracle 均提供了搜索复杂文本文档(包括 XML)的支持。
全文搜索
带分割功能的媒介文本搜索
XML 分析程序
编程人员在设计 XML 应用程序时可使用这些工具获得最大的能力和灵活性。
支持多种语言的 MSXML COM 支持分析程序
支持多种语言的 Oracle 分析程序
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 格式。要得到更有用的格式,编程人员必须编写 XSL 转换或者 Java 代码。SQL Server 2000 不仅提供类似于 RAW 的模型,而且允许直接生成更“有价值”的 XML(使用 XML 视图和 FOR XML AUTO 及 EXPLICIT 模式)。此外,SQL Server 2000 为返回 XML 流格式的查询结果提供了一个流接口。
XML 更新
Oracle 和 SQL Server 2000(带 Web 发行版)均支持批量装载。SQL Server 具有通过 XML 在服务器上提供行集的 OPENXML 以及使用 XML 语法提供更新的更新程序(Web 发行版)。Oracle 具有执行类似功能的 Java 包。
Oracle XSQL 模板与 SQL Server 2000 XML 模板
Oracle 使用 XML SQL Utility for Java(用于将数据编排为 XML 格式)和 XSQL Servlet(用于 URL 访问)来执行模板文件。SQL Server 2000 通过提供检索 XML 数据的内在支持 (FOR XML) 为执行模板文件提供了集成度更高的解决方案。Oracle 的 XSQL 模板文件只可以通过 XSQL Servlet 执行。要以其他任何方式执行 Oracle 模板,需要自定义 Java 编程。SQL Server 2000 模板既可以从 URL 执行,也可以从 ADO 程序执行。
XPath 查询
Oracle 带有一个如何向 SQL 映射 Xpath 子集的 alpha 级示范。SQL Server 2000 含有一个出售版本的 XPath 子集。
全文检索和索引
SQL Server 2000 为 OPENXML 提供了溢出列语法,可以用来从文档提取索引信息。Oracle 为从文档提取数据建立索引提供了类似的方法。Oracle 含有一个按层次执行的文本检索组件(WITHIN 子句)。虽然 Oracle 不能执行关联,但它支持多级嵌套查询。SQL Server 2000 中的全文检索系统目前不提供层级索引和以纯文本格式搜索 XML。它不包含用来识别标记和属性名称的特殊配置。
XML 流
SQL Server 2000 提供了行集语法以及来自 ADO 的 XML 流接口。Oracle 只支持行集语法。
可伸缩性和性能
SQL Server 2000 可以使用 OPENXML 和 FOR XML 查询将部分负荷从中间层推至服务器。
虽然很难比较两个产品的性能和可伸缩性,但 SQL Server 由于能够直接通过查询生成 XML 而不必使用 XSLT 或 Java 程序进行转换而具有一定优势。
对象视图
Oracle 具有对象关系支持并使用这一功能为数据库中存储的数据提供 XML 对象视图。SQL Server 2000 拥有带 ADO 对象支持的不同模型。
XML 分析程序、架构处理器和 XML 开发组件
Oracle 拥有针对不同语言的 Transviewer bean、架构处理器和 XML 分析程序。这些功能与数据库没有关系。MSXML 和第三方实用工具提供相同的功能。
XML 类生成器
跟 Oracle Transviewer bean 和 XML 分析程序一样,该功能与数据库技术没有关系。
结论
Microsoft SQL Server 2000 提供了专门为 Web 和数据库开发人员设计的 XML 功能。Web 开发人员不必学习数据库编程即可以使用 SQL Server 2000 XML 功能,这是因为 SQL Server 2000 支持标准的 XML 构造(比如 Xpath),允许开发人员与数据库进行交互。与之类似,数据库开发人员也不必学习 XML 编程即可以使用 FOR XML 子句获得 XML 查询结果或使用 OPENXML 操纵 XML 数据。最后,SQL Server 2000 为定义企业对企业事务的架构映射提供了简单的公开机制和 XML 视图。
本文档所包含的信息代表了在发布之日,Microsoft Corporation 对所讨论问题的当前看法。因为 Microsoft 必须顺应不断变化的市场条件,故该文档不应理解为 Microsoft 一方的承诺,Microsoft 不保证所给信息在发布之日以后的准确性。
本文档仅供参考。在本文档中,MICROSOFT 不做任何明示或暗示的保证。
用户必须遵守所有适用的版权法。在不对版权法所规定的权利加以限制的情况下,如未得到 Microsoft 公司明确的书面许可,不得出于任何目的、以任何形式或手段(电子的、机械的、影印、录制等等)复制、传播本文的任何部分,也不得将其存储或引入到检索系统中。
Microsoft 可能拥有本文档主题涉及到的专利、专利使用、商标、版权或其它知识产权。除非在 Microsoft 书面许可协议中明确提到,否则购买本文档并不向您提供其中的任何专利、版权或其他知识产权。
© 2000 Microsoft Corporation。保留所有权利。