O exemplo a seguir mostra como é possível utilizar o ESQL para trabalhar com espaços de nomes.
As constantes de espaços de nomes são declaradas no início do módulo principal de forma que você possa utilizar prefixos nas instruções ESQL em vez de URIs integrais dos espaços de nomes. As constantes de espaços de nomes afetam somente o ESQL; não controlam os prefixos gerados na mensagem de saída. Os prefixos na mensagem de saída gerada são controlados por declarações de espaços de nomes na árvore de mensagens. Você pode incluir declarações de espaços de nomes na árvore utilizando o tipo de campo XML.NamespaceDecl. Esses elementos são, então, utilizados para gerar declarações de espaços de nomes na mensagem de saída.
Quando a mensagem de saída é gerada, se o analisador encontrar um espaço de nomes para o qual não tenha nenhuma declaração de espaço de nomes correspondente, um prefixo é gerado automaticamente utilizando prefixos no formato NSn, onde n é um inteiro positivo.
CREATE COMPUTE MODULE xmlns_doc_flow_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
CALL CopyMessageHeaders();
-- Declaration of namespace constants --
These are only used by 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';
-- Namespace declaration for prefix 'space1'
SET OutputRoot.XMLNS.message.(XML.NamespaceDecl)xmlns:space1 = 'http://www.ibm.com/space1';
SET OutputRoot.XMLNS.message.sp1:data1 = 'Hello!';
-- Default namespace declaration ( empty prefix )
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;
Quando essa ESQL for processada, será gerada a
seguinte mensagem de saída: <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>