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 por mensagens XML em Manipulando Mensagens no Domínio XML, em conjunto com as informações do 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 FUNCTION 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 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;
<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>
Você também pode especificar que um elemento XML nomeado (e seus descendentes, se for um elemento complexo) seja analisado obscuramente. Ou seja, um único elemento nomeado é criado na árvore de mensagens com um valor (codificado em UTF-16) que contém o fluxo de bits XML real que está contido entre as tags de início e fim do elemento obscuro. Essa opção pode fornecer benefícios de desempenho, se o conteúdo de um elemento não for significante dentro do seu fluxo de mensagens.
Para especificar que um elemento XML deva ser analisado obscuramente, utilize uma instrução ESQL CREATE com uma cláusula PARSE para analisar o documento XML. Configure o qualificador FORMAT da cláusula PARSE para a cadeia constante com cadeia 'XMLNS_OPAQUE' e configure o qualificador TYPE da cláusula PARSE para o nome do elemento XML que deve ser analisado de uma maneira obscura. A cláusula TYPE pode especificar o nome de elemento sem espaço de nomes (para corresponder a qualquer espaço de nomes) ou com um prefixo de espaço de nomes ou URI de espaço de nomes completo (para corresponder a um espaço de nomes específico).
Considere o seguinte exemplo:
DECLARE soap NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/'; DECLARE BitStream BLOB ASBITSTREAM(InputRoot.XMLNS ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId); --No Namespace CREATE LASTCHILD OF OutputRoot DOMAIN('XMLNS') PARSE (BitStream ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId FORMAT 'XMLNS_OPAQUE' TYPE 'Body'); --Namespace Prefix CREATE LASTCHILD OF OutputRoot DOMAIN('XMLNS') PARSE (BitStream ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId FORMAT 'XMLNS_OPAQUE' TYPE 'soap:Body'); --Namespace URI CREATE LASTCHILD OF OutputRoot DOMAIN('XMLNS') PARSE (BitStream ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId FORMAT 'XMLNS_OPAQUE' TYPE '{http://schemas.xmlsoap.org/soap/envelope/}Body');
A análise obscura dos elementos XML está disponível apenas no domínio XMLNS e o controle sobre como isso é especificado está sujeito à alteração em releases posteriores.
Para obter informações adicionais sobre o CREATE e exemplos de seu uso, consulte Instrução CREATE.