Este tópico fornece informações específicas para tratar mensagens que pertencem ao domínio XMLNS e que são analisadas pelo analisador genérico XML. O domínio XMLNS é uma extensão do domínio XML e fornece suporte para espaço de nomes. Siga a orientação fornecida para mensagens XML em Manipulando Mensagens no Domínio XML, em conjunto com as informações no tópico Manipulando o Conteúdo do Corpo da Mensagem.
O exemplo a seguir mostra como é possível utilizar o ESQL para trabalhar com espaços de nomes. O exemplo declara constantes de espaços de nomes no início do módulo principal, para que você possa utilizar prefixos nas instruções ESQL ao invés de URIs de espaço de nomes completas.
As constantes de espaço 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. Você pode incluir declarações de espaços de nomes na árvore utilizando o nome de correlação XML.NamespaceDecl. Esses elementos são, então, utilizados para gerar declarações de espaços de nomes na mensagem de saída.
Se, quando a mensagem de saída for gerada, o espaço de nomes com o qual um elemento ou atributo estiver qualificado não possuir declaração de espaço de nomes correspondente, será gerada uma automaticamente utilizando prefixos do formato NSn, em que n indica um inteiro positivo.
CREATE COMPUTE MODULE xmlns_doc_flow_Compute CREATE ROUTINE Main() RETURNS BOOLEAN BEGIN CALL CopyMessageHeaders(); -- Declaração de constantes de espaço de nomes DECLARE sp1 NAMESPACE 'http://www.ibm.com/space1'; DECLARE sp2 NAMESPACE 'http://www.ibm.com/space2'; DECLARE sp3 NAMESPACE 'http://www.ibm.com/space3'; -- Declaração do espaço de nomes para associar o prefixo 'space1' ao espaço de nomes SET OutputRoot.XMLNS.message.(XML.NamespaceDecl)xmlns:space1 = 'http://www.ibm.com/space1'; SET OutputRoot.XMLNS.message.sp1:data1 = 'Hello!'; -- Declaração do Espaço de Nomes padrã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!'; SET OutputRoot.Properties.MessageDomain = 'XMLNS'; RETURN TRUE; END; CREATE ROUTINE 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;
<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:NS1="http://www.ibm.com/space3">Bonjour!</NS1:data3> </message>