Trabalhando com Mensagens e Fluxos de Bits MRM

Quando utilizar a função ASBITSTREAM ou a instrução CREATE FIELD com uma cláusula PARSE, lembre-se dos seguintes pontos.

A função ASBITSTREAM

Se você codificar a função ASBITSTREAM com a opção de modo do analisador configurada como RootBitStream, para analisar uma árvore de mensagens para um fluxo de bits, o resultado será um documento MRM no formato especificado pelo formato da mensagem construída a partir dos filhos do elemento de destino de forma normal.

O elemento de destino deve ser uma mensagem predefinida definida no conjunto de mensagens ou pode ser uma mensagem auto definida, se estiver utilizando um formato físico XML. Esse algoritmo é idêntico ao utilizado para gerar o fluxo de bits de saída normal. Um fluxo de bits bem formado, obtido desta forma, pode ser utilizado para recriar a árvore original, usando a instrução CREATE com uma cláusula PARSE.

Se você codificar a função ASBITSTREAM com a opção de modo do analisador configurada como FolderBitStream, para analisar uma árvore de mensagens para um fluxo de bits, o fluxo de bits gerado será um elemento MRM construído a partir do elemento de destino e seus filhos. Diferente do modo RootBitStream, o elemento de destino não precisa representar uma mensagem; ele pode representar um elemento predefinido em uma mensagem ou um elemento autodefinido em uma mensagem.

Para que o analisador MRM possa analisar corretamente a mensagem, o caminho da mensagem para o elemento de destino na mensagem deve ser especificado em Tipo de Mensagem. O formato do caminho é o mesmo utilizado pelos caminhos de mensagens, exceto que o prefixo do tipo de mensagem não é utilizado.

Por exemplo, suponha que seja utilizada a seguinte estrutura da mensagem:
Mensagem
elem1
elem11
elem12

Para serializar a subárvore que representa o elemento elem12 e seus filhos, especifique o caminho da mensagem 'message/elem1/elem12' no Tipo de Mensagem.

Se um elemento no caminho estiver qualificado por um espaço de nomes, especifique o URI do espaço de nomes entre os caracteres {} no caminho da mensagem. Por exemplo, se o elemento elem1 for qualificado pelo espaço de nomes 'http://www.ibm.com/temp', especifique o caminho da mensagem como 'message/{http://www.ibm.com/temp}elem1/elem12'

Este modo pode ser utilizado para obter uma descrição do fluxo de bits de subárvores arbitrárias pertencentes a um analisador MRM. Quando neste modo, com um formato físico de XML, o fluxo de bits XML gerado não está cercado pelo 'Nome da Tag Raiz' especificado para a Mensagem no Conjunto de Mensagens. Não é criada nenhuma declaração XML, mesmo que não seja suprimida nas propriedades do conjunto de mensagens.

Os fluxos de bits obtidos desta maneira podem ser utilizados para recriar a árvore original utilizando uma instrução CREATE com uma cláusula PARSE (utilizando um modo de FolderBitStream).

A instrução CREATE com uma cláusula PARSE

Se você codificar uma instrução CREATE com uma cláusula PARSE, com a opção de modo do analisador configurada como RootBitStream, para analisar um fluxo de bits para uma árvore de mensagens, o fluxo de bits esperado será um documento MRM normal. Cria-se um campo na árvore para cada campo no documento. Este algoritmo é idêntico ao utilizado durante a análise de um fluxo de bits a partir de um nó input

Se você codificar uma instrução CREATE com uma cláusula PARSE, com a opção de modo do analisador configurada como FolderBitStream, para analisar um fluxo de bits para uma árvore de mensagens, o fluxo de bits esperado será um documento no formato especificado pelo Formato da Mensagem, que é especificado diretamente ou herdado. Diferente do modo RootBitStream, a raiz do documento não precisa representar uma mensagem MRM; ela pode representar um elemento predefinido em uma mensagem ou um elemento autodefinido em uma mensagem.

Para que o analisador MRM possa analisar corretamente a mensagem, o caminho da mensagem para o elemento de destino na mensagem deve ser especificado em Tipo de Mensagem. O formato do caminho da mensagem é o mesmo utilizado para a função ASBITSTREAM descrita acima.

Exemplo de Utilização da Função ASBITSTREAM e da Instrução CREATE com uma Cláusula PARSE em Modo FolderBitStream

O ESQL a seguir utiliza a definição de mensagem descrita acima. O ESQL serializa parte da árvore de entrada utilizando a função ASBITSTREAM e, em seguida, utiliza a instrução CREATE com uma cláusula PARSE para recriar a subárvore na árvore de saída. A mensagem de Entrada e a mensagem de Saída correspondentes são mostradas abaixo do ESQL.

CREATE COMPUTE MODULE DocSampleFlow_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
  BEGIN
CALL CopyMessageHeaders();
		-- Configure as opções a serem utilizadas por ASBITSTREAM e CREATE ... PARSE
		-- para serem FolderBitStream e ative a validação
		DECLARE parseOptions INTEGER BITOR(FolderBitStream, ValidateContent,
							           ValidateValue, ValidateLocalError);
		-- Serialize o elemento elem12 e seus filhos a partir do fluxo de bits de entrada
		-- para uma variável
	DECLARE subBitStream BLOB
	CAST(ASBITSTREAM(InputRoot.MRM.elem1.elem12
OPTIONS parseOptions
SET 'DocSample'
TYPE 'message/elem1/elem12'
		 FORMAT 'XML1') AS BLOB);
-- Configure o valor do primeiro elemento na árvore de saída
	SET OutputRoot.MRM.elem1.elem11 = 'val11';
	-- Analise a subárvore serializada para a árvore de saída
IF subBitStream IS NOT NULL THEN
CREATE LASTCHILD OF OutputRoot.MRM.elem1
PARSE ( subBitStream
OPTIONS parseOptions
SET 'DocSample'
TYPE 'message/elem1/elem12'
FORMAT 'XML1');
END IF;
		-- Converta os filhos de elem12 na árvore de saída em maiúsculas
		SET OutputRoot.MRM.elem1.elem12.elem121 =
			UCASE(OutputRoot.MRM.elem1.elem12.elem121);
		SET OutputRoot.MRM.elem1.elem12.elem122 =
			UCASE(OutputRoot.MRM.elem1.elem12.elem122);
-- Configure o valor do último elemento na árvore de saída
SET OutputRoot.MRM.elem1.elem13 = 'val13';
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;
Mensagem de entrada:
<mensagem>
<elem1>
<elem11>value11</elem11>
<elem12>
<elem121>value121</elem121>
<elem122>value122</elem122>
</elem12>
<elem13>value13</elem13>
</elem1>
</message>
Mensagem de saída:
<mensagem>
<elem1>
<elem11>val11</elem11>
<elem12>
<elem121>VALUE121</elem121>
<elem122>VALUE122</elem122>
</elem12>
<elem13>val13</elem13>
</elem1
</message
Conceitos relacionados
Visão Geral de Fluxos de Mensagens
Visão Geral do ESQL
Modelagem de Mensagens
Tarefas relacionadas
Projetando um Fluxo de Mensagens
Definindo o Conteúdo do Fluxo de Mensagens
Gerenciando Arquivos ESQL
Desenvolvendo Modelos de Mensagens
Referências relacionadas
Nó Compute
Nó Database
Nó Filter
função ASBITSTREAM
Instrução CREATE
Instrução SET
Notices | Trademarks | Downloads | Library | Support | Feedback
Copyright IBM Corporation 1999, 2006 Last updated: 5월 25, 2006
ac20701_