查询开放内容

2008-04-02 10:46:49来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

开放内容是 XML 文档中一组不会在文档架构中专门进行定义的元素和属性。简单地说,您能够将开放内容视为 XML 文档中您的程式不会专门去访问的的元素和属性。在四月份的专栏文章(“‘Open’ XML Content”,InstantDoc ID 37840)中,我解释了如何通过使用 OpenXMLXML Bulk Load 和 updategram 在 SQL Server 2000 中存储开放内容,使支持 XML 的应用程式实现可扩展性。该方案需要您在 SQL Server 数据库中存储一个 XML 格式的价格表,其中包括开放内容。在本文中,我们将继续讨论该方案,了解如何从 SQL Server 数据库提取开放内容,通过将该开放内容和您的客户下达定单的每个行项目包括在一起,将他发送给履行定单的提供商。假如您没有上个月的示例数据库,能够在 http://www.sqlmag.com 输入 InstantDoc ID 37840,下载代码来创建此数据库。chin a i t p oe er . co mS0SV8Pe

您能够选择几种不同的方法从数据库提取开放内容。使用一种简单的方法,您就能够通过普通的 SQL 查询检索数据(和返回 XML 的 SQL 查询正好相反),然后通过使用所选的编程 API 将结果处理为 XML(如图 1 所示)。您也能够使用直接返回 XML 的查询,在这种情况下,有两个选择。一个选择是,您能够使用 FOR XML EXPLICIT 来编写在查询中包括开放内容并返回 XML 的 SQL 查询。另一个选择是,您能够使用在虚拟 XML 文档中包括开放内容的 XML 视图,通过使用 XML 路径语言 (XPath) 能够查询虚拟 XML 文档。在这两个选择方案中,SQL Server 会将数据库中存储的开放内容和您在查询的其他部分指定的 XML 结果进行合并。选择的方法取决于您的编程环境。您能够用许多方式实现这一简单的方法 - 从简单文本操作到通过使用对象模型来处理 XML。另外两种方法使用 SQL Server 的 XML 支持,下面我们来更周详地了解上述方法。chin a i t p oe er . co mS0SV8Pe

FOR XML EXPLICIT 查询chin a i t p oe er . co mS0SV8Pe

利用 FOR XML 子句,您能够直接从 SQL Server 2000 获得 XML 结果。FOR XML 支持三种操作模式:Raw、Auto 和 Explicit。每个选项都会改变您的查询返回的 XML 的格式。Explicit 模式是唯一支持开放内容的模式。Explicit 模式使您能够完全控制 XML 查询结果的形状(有时也称为 XML 语法或架构)。使用 Explicit 模式查询,您能够指定 XML 文档的层次结构连同文档内的元素和属性的名称。chin a i t p oe er . co mS0SV8Pe

您能够通过在 SQL 查询中指定特别结构化列别名来指定这些名称。结构化列的别名包含四个逻辑字段,每个字段之间用感叹号分隔。第一个字段指定父元素的名称,第二个字段指定元素在得到的 XML 文档中的嵌套方式,第三个字段(假如不是空的)指定包含列数据的元素或属性的名称。第四个字段指定格式配置指令。格式配置指令会使得列数据以一种特别的方式进行格式配置。例如,cdata 指令包括 CDATA 节内的列数据。(CDATA 节是一种避免在列数据中用 代替字符的特别方式。有关周详信息,请参阅 XML 语言规范,网址是 http://www.w3.org/TR/REC-xml#sec-cdata-sect。)另一个格式配置指令 xmltext 指定列的内容应该和查询返回的 XML 结果合并。下面我们将讨论 xmltext 指令如何工作的示例。chin a i t p oe er . co mS0SV8Pe

在该示例的情况中,一旦您批准处理客户的定单,则需要将定单发送给履行定单的提供商,然后,提供商将货物发运给您的客户。在实际应用中,定单会包含许多要在您和履行定单提供商之间进行交换的数据。为简单起见,我们只讨论您如何在定单中包括行项目的开放内容。当您处理来自供给商的价格表时,您会存储各个产品的开放内容。现在,您需要将开放内容和发送给履行定单的提供商的定单包括在一起。chin a i t p oe er . co mS0SV8Pe

为简单起见,我不提供将示例 Orders 表和 Products 表联接起来的代码;这是个简单的关系查询。我们将重点放在如何从 Products 表提取行项目上。清单 1 说明了提取 ProductID 为 22 的产品的 FOR XML EXPLICIT 查询的使用。注意,SELECT 清单中的最后一列使用指定 xmltext 指令的列别名。此列检索开放内容。现在,我们来看看图 1 的 Overflow 列中的值。Product 元素包括重量属性和 QuantityPerUnit 子元素。由于查询中包括了 xmltext 指令,SQL Server 向图 2 展示的查询结果添加了重量属性和 QuantityPerUnit 元素。利用 xmltext 指令,能够轻松地在查询结果中包括开放内容。chin a i t p oe er . co mS0SV8Pe

要执行清单 1 中的代码,请打开查询分析器,选择 April2003 示例数据库。然后,将代码复制到查询分析器,按 F5 执行代码。现在,您应该会看到图 2 展示的结果(在执行查询检索文本结果之前按 Ctrl-T)。注意,SQL Server 在查询构造的 LineItem 元素中包括了重量属性和 QuantityPerUnit 元素。要看到 xmltext 指令对输出的效果,可从 SELECT 清单删除 Overflow 列,然后重新运行查询,或删除该指令即可。还能够尝试 xml 指令,该指令直接在 LineItem 元素内包括了 Overflow 列的完整文本。chin a i t p oe er . co mS0SV8Pe

XML 视图chin a i t p oe er . co mS0SV8Pe

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 分区技巧

下一篇: Updategram 和 Diffgram