|
级别: 初级 Roman Melnyk, Ph.D. (roman_b_melnyk@hotmail.com), DB2 Information Development 团队资深成员, IBM 2005 年 11 月 21 日 现在我们可以使用 SQL/XML 发布函数从关系数据生成带标记的 XML 文档。IBM® DB2® Universal Database™ (DB2 UDB) 包含内置的 SQL/XML 发布函数,很容易将存储在 DB2 数据库中的数据发布为 XML 文档。本文介绍 SQL/XML 发布函数,并通过实际的例子说明如何使用这些函数。 XML 表示 eXtensible Markup Language,是一种可扩展标记语言,发布、存储和共享结构化文档的通用数据格式。XML 可用于在计算机间交换数据。标记后的文本可以按照 XML 节点类型分类,如 “document”、“element”、“attribute” 和 “text” 等。“Namespaces” 与节点名联系在一起,如元素和属性。 SQL/XML 是 SQL 语言标准(ANSI/ISO)的扩展,包含将关系数据转化成 XML 的 XML 发布函数。IBM DB2 Universal Database for Linux®、UNIX® 和 Windows® (DB2 UDB) 包含内置的 SQL/XML 发布函数,很容易把 DB2 UDB 数据发布到 XML 文档中。这些函数允许在大型字符对象(CLOB 类型,DB2 UDB 的一种内置数据类型)中创建带标记的 XML 文档。可以使用 SELECT 语句装配需要的 XML 节点,然后通过把输出定向到文件而捕捉带标记的 XML 节点。也可使用 INSERT 语句将生成的文本插入表中。 DB2 UDB Version 8.2 支持七种 SQL/XML 发布函数:
下面分别介绍这些发布函数。虽然用这些函数可以构造的 XML 元素和属性类型基本上没有限制,本文中的例子以 XML 表格元素和属性为主。这些例子需要连接到 SAMPLE 数据库,如果没有在系统上创建 SAMPLE 数据库,您可以在命令行提示符输入 db2sampl 命令来创建它。 XMLSERIALIZE 函数将 XML 值转化成存储为 CHAR、VARCHAR 或 CLOB 值的字符串。XMLSERIALIZE 是一个类型转换函数,返回 CHAR、VARCHAR 或 CLOB 类型的值。参数必须是 XML 数据类型的表达式。注意,XML 数据类型是 XML 的内部表示,只能用作接收这种数据类型的函数(如 XMLSERIALIZE)的输入。XML 是一种中间数据类型,不能存储到数据库中。 本文中所有的例子都使用 XMLSERIALIZE 函数。其他函数返回的 XML 值都传递给 XMLSERIALIZE 函数。 XMLELEMENT 函数构造一个命名的 XML 元素节点。XMLELEMENT 是一个标量函数,返回类型为 XML 的值。参数包括一个元素名、可选的名称空间声明、可选的属性,以及零个或多个组成元素内容的表达式。XMLELEMENT 函数可以嵌套。 清单 1 中的例子在嵌套上下文中使用 XMLELEMENT 函数从 SAMPLE 数据库的 EMPLOYEE 和 DEPARTMENT 表中存储的数据生成 XML 表格数据。反复调用该函数生成嵌套在表行(<tr>)元素中的表格单元(<td>)元素。清单 1 还显示了该查询的输出结果。因为输出字符串很长,该例中每个字符串都占两行。表 1 显示了插入 XML 表格元素后的转换结果。 清单 1. 使用 XMLELEMENT 函数从关系数据生成 XML 表格元素
表 1. 对 XMLELEMENT 函数的输出序列化后的结果,可用于 XML 文档
XMLFOREST 函数构造一个 XML 元素节点序列(森林)。XMLFOREST 是一个标量函数,返回值和参数一样都是内部 XML 数据类型。 清单 2 中的例子在 XMLELEMENT 函数中嵌套使用 XMLFOREST 函数生成 XML 表格数据。只需调用 XMLFOREST 函数一次,就能生成嵌套在表行(<tr>)元素中的表格单元(<td>)元素。清单 2 还显示了该查询返回的第一条记录,同样分在两行中。表 2 显示了插入 XML 表格元素后的转换结果。 清单 2. 使用 XMLFOREST 函数从关系数据生成 XML 表格元素
表 2. 对 XMLFOREST 函数的输出序列化后可用于 XML 文档
XMLATTRIBUTES 函数为 XML 元素节点构造一个或多个 XML 属性节点。XMLATTRIBUTES 是一个标量函数,返回 XML 类型的值。 清单 3 中的例子结合使用 XMLATTRIBUTES 和 XMLELEMENT 函数生成 XML 表格数据。这里,生成的三个表格单元(<td>)元素得到了列对齐属性('align="center"')。清单 3 含显示了该查询返回的第一条记录,同样显示在两行中。表 3 显示了转换后的结果插入 XML 表格元素后的情况。 清单 3. 为 XML 元素节点构造 XML 属性节点
该例中,XMLELEMENT 函数调用 XMLATTRIBUTES 函数为输出的三列定义列对齐属性。表 3 显示了序列化的结果。 表 3. XMLELEMENT 函数结果序列化后的片段
XMLCONCAT 函数连接两个或多个 XML 值(XML 数据类型的表达式)。XMLCONCAT 是一个标量函数,返回值和参数一样都是内部 XML 数据类型。 清单 4 中的例子使用 XMLCONCAT 和 XMLELEMENT 函数生成 XML 表格数据。这里将生成的两个表格单元(<td>)元素连接在一起。清单 4 还显示了该查询返回的第一条记录。表 4 显示了插入 XML 表格元素后的转换结果。 清单 4. XMLCONCAT 函数可用于连接 XML 值,比如两个 XML 元素节点
该例中,XMLELEMENT 函数调用 XMLCONCAT 连接一对嵌套的 XML 元素节点。表 4 显示了序列化后的结果。 表 4. XMLELEMENT 函数结果序列化后的片段
XMLAGG 函数在生成的 XML 值中将 XML 值聚合为一系列的项。XMLAGG 是一种聚合(列)函数。 清单 5 中的例子使用 XMLAGG 和 XMLELEMENT 函数生成 XML 表格数据。这里对每个表行(<tr>)元素实例,聚合三个生成的表格单元(<td>)元素。清单 5 还显示了该查询的结果。表 5 显示了插入 XML 表格元素后转换的结果。 清单 5. XMLAGG 函数可用于聚合 XML 值,这里是三个 XML 元素节点
该例中,XMLELEMENT 函数调用 XMLAGG 聚合嵌套的 XML 元素节点。表 5 显示了序列化后的结果。 表 5. 序列化后的 XMLELEMENT 函数输出
XMLNAMESPACES 函数从参数中构造 XML 名称空间声明。声明在 XMLELEMENT 和 XMLFOREST 函数生成的元素的作用范围内。XMLNAMESPACES 是一个标量函数,返回 XML 类型的值。 XML 名称空间可用于限定元素或属性名,将其与特定的统一资源标识符(URI)联系在一起。它是在 XML 文档中用作元素类型和属性名的名称的集合。XML 名称空间保证元素和属性在给定文档范围之外有统一的名称,用于避免应用程序在处理类似的标记和属性时出现误解。 清单 6 中的例子结合使用 XMLNAMESPACES 和 XMLELEMENT 函数。这里,嵌套在表格单元(<td>)和表行(<tr>)元素中的 “emp” XML 元素节点,有一个设为空字符串的默认名称空间,相当于没有默认名称空间。清单 6 还显示了该查询返回的前两条记录。表 6 显示了插入 XML 表格元素后的转换结果。 清单 6. XMLNAMESPACES 函数可用于构造 XML 名称空间声明
该例中,XMLELEMENT 函数调用 XMLNAMESPACES 构造了一个设为空字符串的默认名称空间。表 6 显示了序列化后的结果。 表 6. XMLELEMENT 函数结果序列化后的片段
DB2 UDB 内置 SQL/XML 发布函数可用于从关系数据生成带标记的 XML 文档。本文介绍了各种 SQL/XML 发布函数(类型转换、标量和聚合函数),并提供了可运行的实际例子。进一步了解 SQL/XML 发布函数,或者关于本文所涉及主题的更多细节,请参阅 DB2 Information Center。 |
