在 EXPLICIT 模式中,查询书写器控制由执行查询所返回的 XML 文档的形式。必须以特定的方
式编写查询,将有关预期嵌套的附加信息显式指定为查询的一部分。可用 directive 在列级指定附
加的配置。当指定EXPLICIT 模式时,必须负责确保生成的 XML 符合语法规则并且有效(对于
XML-DATA 架构)。
1、处理 EXPLICIT 模式查询和通用表 EXPLICIT 模式将查询执行所得到的行集转换为 XML 文档。为使 EXPLICIT 模式生成 XML 文
档,行集必须具有特定的格式。这需要以某种方式编写 SELECT 查询以生成具有特定格式的行集(
称为通用表),可对该行集进行处理以生成请求的 XML 文档。
EXPLICIT 模式首先要求查询生成两个元数据列:
(1) 在 SELECT 子句中指定的第一列必须是命名 (Tag) 标记号。Tag 列存储当前元素的标记
号。Tag 是整型数据类型。
(2) 指定的第二列必须是父元素的命名 (Parent) 标记号。Parent 列存储父元素的标记号。
这些列用于确定 XML 树中的父子层次结构。这些信息随后用于生成预期的 XML 树。如果存储在
Parent 列中的父标记值是 0 或 NULL,则将行放置在 XML 层次结构的顶层。
通用表的其余部分充分描述所得到的 XML 文档。行集(通用表)中的数据垂直分区成组。每组
成为结果中的一个 XML 元素。
FOR XML EXPLICIT 模式要求 SELECT 查询以某种方式指定通用表中的列名。它要求
SELECT 查询将元素名与标记号相关联,并提供通用表列名中的特性名(默认情况下是特性名)。此
外,若要得到与父实例相关联的正确子实例,需要对行集排序,使子实例紧跟在它的父实例后。简言
之,通用表的列名、Tag 和 Parent 元列中的值以及通用表格式的数据所提供的信息都用于生成所期
望的 EXPLICIT 模式的 XML 文档。
SELECT 查询还必须指定通用表中的列名。通用表中的列名使用 XML 类属标识符和特性名进行编
码。通用表列名中的元素名、特性名和其它转换信息的编码被指定为:
ElementName!TagNumber!AttributeName!Directive
参数 ElementName
是所得到的元素类属标识符(例如,如果将 Customers 指定为 ElementName,则
<Customers> 是元素标记)。
TagNumber
是元素的标记号。借助于通用表中的两个元数据列(Tag 和 Parent),TagNumber
用于表示 XML 树中的 XML元素嵌套。每个 TagNumber 都准确对应于一个 ElementName。
AttributeName
是 XML 特性的名称(如果没有指定 Directive)或包含的元素名(如果 Directive 是
xml、cdata 或 element)。 如果指定 Directive,则 AttributeName 可以为空。这种情况下,列中包含的值直接
由具有指定 ElementName 的元素所包含。
Directive
是可选命令。如果没有指定 Directive,则必须指定 AttributeName。如果没有指定
AttributeName 且没有指定 Directive(如 Customer!1),则表示元素命令(如
Customer!1!!element)且包含数据。
Directive 有两种用途。该选项用于分别使用关键字 ID、IDREF 和 IDREFS 对 ID、 上一篇:ETL工具点评 下一篇:MSSQL 使用 EXPLICIT 模式二 |