El ejemplo siguiente muestra cómo utilizar ESQL para trabajar con espacios de nombres.
Las constantes de espacio de nombres se declaran al principio del módulo principal para que pueda utilizar prefijos en la sentencia ESQL en lugar de los URI de espacios de nombres completos. Las constantes de espacio de nombres sólo afectan a ESQL; no controlan los prefijos que se generan en el mensaje de salida. Los prefijos del mensaje de salida generado los controlan las declaraciones de espacio de nombres en el árbol de mensaje. Puede incluir declaraciones de espacio de nombres en el árbol utilizando el tipo de campo XML.NamespaceDec. Entonces estos elementos se utilizan para generar declaraciones de espacio de nombres en el mensaje de salida.
Si cuando se genera el mensaje de salida, el analizador encuentra un espacio de nombres para el que no se ha encontrado ninguna declaración de espacio de nombre correspondiente, se genera automáticamente un prefijo utilizando los prefijos de tipo NSn, donde n es un entero positivo.
CREATE COMPUTE MODULE xmlns_doc_flow_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
CALL CopyMessageHeaders();
-- Declaración de constantes de espacio de nombres --
Sólo las utiliza ESQL
DECLARE sp1 NAMESPACE 'http://www.ibm.com/space1';
DECLARE sp2 NAMESPACE 'http://www.ibm.com/space2';
DECLARE sp3 NAMESPACE 'http://www.ibm.com/space3';
-- Declaración de espacio de nombres para el prefijo 'space1'
SET OutputRoot.XMLNS.message.(XML.NamespaceDecl)xmlns:space1 = 'http://www.ibm.com/space1';
SET OutputRoot.XMLNS.message.sp1:data1 = 'Hello!';
-- Declaración de espacio de nombres predeterminado ( prefijo vacío )
SET OutputRoot.XMLNS.message.sp2:data2.(XML.NamespaceDecl)xmlns = 'http://www.ibm.com/space2';
SET OutputRoot.XMLNS.message.sp2:data2.sp2:subData1 = 'Hola!';
SET OutputRoot.XMLNS.message.sp2:data2.sp2:subData2 = 'Guten Tag!';
SET OutputRoot.XMLNS.message.sp3:data3 = 'Bonjour!';
RETURN TRUE;
END;
CREATE PROCEDURE CopyMessageHeaders()
BEGIN
DECLARE I INTEGER 1;
DECLARE J INTEGER CARDINALITY(InputRoot.*[]);
WHILE I < J DO SET OutputRoot.*[I] = InputRoot.*[I];
SET I = I + 1;
END WHILE;
END;
END MODULE;
Cuando se procesa este ESQL, se genera el
mensaje de salida siguiente: <message xmlns:space1="http://www.ibm.com/space1">
<space1:data1>Hello!</space1:data1>
<data2 xmlns="http://www.ibm.com/space2">
<subData1>Hola!</subData1>
<subData2>Guten Tag!</subData2>
</data2>
<NS1:data3 xmlns="http://www.ibm.com/space3>Bonjour!</NS1:data3>
</message>