XMLNAMESPACES 标量函数 (scalar function)
XMLNAMESPACES函数根据参数构造命名空间声明。 此函数仅可用于特定函数,例如XMLELEMENT函数和XMLFOREST函数。
该模式是 SYSIBM。
结果是一个或多个 XML 名称空间声明,它们包含每个非空输入值的名称空间作用域。
- 命名空间统一资源标识符
- 指定一个包含命名空间名称或通用资源标识符(URI)的SQL字符串常量。 如果字符串常量与命名空间前缀一起使用,则不能为空字符串。 命名空间URI 不能是
http://www.w3.org/XML/1998/namespace或http://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>