XMLNAMESPACES 标量函数 (scalar function)

XMLNAMESPACES函数根据参数构造命名空间声明。 此函数仅可用于特定函数,例如XMLELEMENT函数和XMLFOREST函数。

阅读语法图跳过可视化语法图XMLNAMESPACES(,namespace-uriAS命名空间前缀DEFAULTnamespace-uriNO DEFAULT1)
注意:
  • 1 默认或非默认条款只能指定一次。

该模式是 SYSIBM。

结果是一个或多个 XML 名称空间声明,它们包含每个非空输入值的名称空间作用域。

命名空间统一资源标识符
指定一个包含命名空间名称或通用资源标识符(URI)的SQL字符串常量。 如果字符串常量与命名空间前缀一起使用,则不能为空字符串。 命名空间URI 不能是 http://www.w3.org/XML/1998/namespacehttp://www.w3.org/2000/xmlns/
AS 命名空间前缀
指定名称空间前缀。 前缀是SQL标识符,必须采用XML NCName格式。 前缀不能是“xml”或“xmlns”。 前缀在命名空间声明列表中必须是唯一的。

SQL/XML中预定义了以下命名空间前缀:“xml”、“xs”、“xsd”、“xsi”和“sqlxml”。 他们的约束是:

  • xmlns:xml = " http://www.w3.org/XML/1998/namespace "
  • xmlns:xs = " http://www.w3.org/2001/XMLSchema "
  • xmlns:xsd = " http://www.w3.org/2001/XMLSchema "
  • xmlns:xsi = " http://www.w3.org/2001/XMLSchema-instance "
  • xmlns:sqlxml= " http://standards.iso.org/iso/9075/2003/sqlxml "
默认命名空间 无默认
指定是否在此命名空间声明的范围内使用默认命名空间。

此命名空间声明的范围是指定的XML元素以及指定XML元素中包含的所有XML表达式。

默认命名空间-URI
指定要在此名称空间声明的作用域中使用的缺省名称空间。 命名空间-URI 适用于作用域中的非限定名称,除非在嵌套作用域中,它被另一个默认声明或非默认声明覆盖。

namespace-uri 指定一个包含命名空间名称或通用资源标识符(URI)的 SQL 字符串常量。 在DEFAULT子句中,字符串常量可以为空字符串。

NO DEFAULT
指定不在此名称空间声明的作用域中使用缺省名称空间。 除非在嵌套作用域中用默认声明覆盖 NO DEFAULT 子句,否则作用域中不存在默认命名空间。

函数的输出是一个XML值,它是一个XML序列,其中包含每个指定名称空间的XML名称空间声明。 结果不能为空。

示例1 :为每位员工生成一个“员工”元素。 员工元素与XML命名空间“urn:bo”相关联,该命名空间的前缀为“bo”。 该元素包含名称和租用日期子元素的属性。
SELECT e.empno, XMLSERIALIZE(XMLELEMENT(NAME "bo:employee",
                   XMLNAMESPACES('urn:bo' as "bo"),
                   XMLATTRIBUTES(e.lastname, e.firstnme),
                   XMLELEMENT(NAME "bo:hiredate", e.hiredate)) AS CLOB(50))
   FROM employee e where e.edlevel = 12;
查询结果与以下结果类似:
00029 <bo:employee xmlns:bo="urn:bo" LASTNAME="PARKER" FIRSTNME="JOHN">
      <bo:hiredate>198-5-3</bo:hiredate>
      </bo:employee>
00031 <bo:employee xmlns:bo="urn:bo" LASTNAME="SETRIGHT"
      FIRSTNME="MAUDE">
      <bo:hiredate>1964-9-12</bo:hiredate>
      </bo:employee>
示例2 :使用XMLFOREST为每位员工生成两个元素。 第一个“姓氏”元素与默认命名空间“ http://hr.org ”相关联,第二个“职位”元素与XML命名空间“ http://fed.gov ”相关联,该命名空间以前缀“d”开头。
SELECT empno, XMLSERIALIZE(XMLFOREST(
          XMLNAMESPACES(DEFAULT 'http://hr.org', 'http://fed.gov' AS "d"),
         lastname, job AS "d:job") AS CLOB(50))
FROM employee where edlevel = 12;
查询结果与以下结果类似:
00029 <LASTNAME xmlns="http://hr.org" xmlns:d="http://fed.gov">PARKER
      </LASTNAME>
      <d:job xmlns="http://hr.org" xmlns:d="http://fed.gov">
      OPERATOR</d:job>
00031 <LASTNAME xmlns="http://hr.org" xmlns:d="http://fed.gov">
      SETRIGHT</LASTNAME>
      <d:job xmlns="http://hr.org" xmlns:d="http://fed.gov">
      OPERATOR</d:job>