Trabajar con mensajes y corrientes de bits MRM

Al utilizar la función ASBITSTREAM o la sentencia CREATE FIELD con una cláusula PARSE, tenga en cuenta los puntos siguientes.

Función ASBITSTREAM

Si codifica la función ASBITSTREAM con la opción de modalidad de analizador establecida en RootBitStream, para analizar un árbol de mensaje en una corriente de bits, el resultado es un documento MRM en el formato especificado por el formato de mensaje que se crea desde los hijos del elemento de destino de la forma normal.

El elemento de destino debe ser un mensaje definido previamente en el conjunto de mensajes o puede ser un mensaje autodefinido si se utiliza un formato físico XML. Este algoritmo es idéntico al utilizado para generar la corriente de bits de salida normal. Se puede utilizar una corriente de bits de formato correcto obtenida de este modo para volver a crear el árbol original utilizando una sentencia CREATE con una cláusula PARSE.

Si codifica la función ASBITSTREAM con la opción de modalidad de analizador establecida en FolderBitStream, para analizar un árbol de mensaje en una corriente de bits, la corriente de bits generada es un elemento MRM creado desde el elemento de destino y sus hijos. A diferencia de la modalidad RootBitStream, el elemento de destino no tiene que representar un mensaje; puede representar un elemento predefinido en un mensaje o un elemento autodefinido dentro de un mensaje.

Para que el analizador MRM pueda analizar correctamente el mensaje, la vía de acceso del mensaje al elemento de destino dentro del mensaje se debe especificar en el Tipo de mensaje. El formato de la vía de acceso es el mismo que el utilizado por las vías de acceso de mensaje excepto en que no se utiliza el prefijo de tipo de mensaje.

Por ejemplo, suponga que se utiliza la siguiente estructura de mensaje:
          Message
              elem1
                   elem11
                   elem12

Para serializar el subárbol que representa el elemento elem12 y sus hijos, especifique la vía de acceso de mensaje 'message/elem1/elem12' en el tipo de mensaje.

Si un elemento de la vía de acceso se califica mediante un espacio de nombres, especifique el URI de espacio de nombres entre caracteres {} en la vía de acceso de mensaje. Por ejemplo, si el elemento elem1 se califica mediante el espacio de nombres 'http://www.ibm.com/temp', especifique la vía de acceso de mensaje como 'message/{http://www.ibm.com/temp}elem1/elem12'

Esta modalidad se puede utilizar para obtener una descripción de corriente de bits de subárboles arbitrarios que son propiedad de un analizador MRM. Cuando se está en esta modalidad, con un formato físico de XML, la corriente de bits XML generada no está entre el 'Nombre de código raíz' especificado para el mensaje en el conjunto de mensajes. No se crea ninguna declaración XML, incluso si no se suprime en las propiedades de conjunto de mensajes.

Se pueden utilizar las corrientes de bits obtenidas de este modo para volver a crear el árbol original utilizando una sentencia CREATE con una cláusula PARSE (utilizando una modalidad de FolderBitStream).

La sentencia CREATE con una cláusula PARSE

Si codifica una sentencia CREATE con una cláusula PARSE, con la opción de modalidad de analizador establecida en RootBitStream, para analizar una corriente de bits en un árbol de mensaje, la corriente de bits esperada será un documento MRM normal. Para cada campo del documento se crea un campo en el árbol. Este algoritmo es idéntico al utilizado al analizar una corriente de bits desde un nodo de entrada

Si codifica una sentencia CREATE con una cláusula PARSE, con la opción de modalidad de analizador establecida en FolderBitStream, para analizar una corriente de bits en un árbol de mensaje, la corriente de bits esperada es un documento en el formato especificado por el Formato de mensaje, que se especifica directamente o se hereda. A diferencia de la modalidad RootBitStream, la raíz del documento no tiene que representar un mensaje MRM; puede representar un elemento predefinido dentro de un mensaje o un elemento autodefinido dentro de un mensaje.

Para que el analizador MRM pueda analizar correctamente el mensaje, se debe especificar la vía de acceso del mensaje al elemento de destino del mensaje en el Tipo de mensaje. El formato de la vía de acceso de mensaje es el mismo que el utilizado para la función ASBITSTREAM que se describe más arriba.

Ejemplo de utilización de la función ASBITSTREAM y la sentencia CREATE con una cláusula PARSE en modalidad FolderBitStream

El siguiente ESQL utiliza la definición de mensaje descrita más arriba. El ESQL serializa parte del árbol de entrada utilizando la función ASBITSTREAM y, a continuación, utiliza la sentencia CREATE con una cláusula PARSE para volver a crear el subárbol en el árbol de salida. El mensaje de entrada y el mensaje de salida correspondiente se muestran bajo el ESQL.

CREATE COMPUTE MODULE DocSampleFlow_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
	BEGIN
CALL CopyMessageHeaders();
		
		-- Establecer que las opciones que ASBITSTREAM and CREATE ... PARSE utilizará
		-- sean FolderBitStream y habilitar la validación
		DECLARE parseOptions INTEGER BITOR(FolderBitStream, ValidateContent,
      							           ValidateValue, ValidateLocalError);

		-- Serializar el elemento elem12 y los hijos desde la corriente de bits de entrada
		-- en una variable
      	DECLARE subBitStream BLOB
        	CAST(ASBITSTREAM(InputRoot.MRM.elem1.elem12
        		 OPTIONS parseOptions
        		 SET 'DocSample'
        		 TYPE 'message/elem1/elem12'
        		 FORMAT 'XML1') AS BLOB);

        -- Establecer el valor del primer elemento del árbol de salida
       	SET OutputRoot.MRM.elem1.elem11 = 'val11';
       	
       	-- Analizar el subárbol serializado en el árbol de salida
        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;
       	
		-- Convertir los hijos de elem12 del árbol de salida a mayú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);
			
        -- Establecer el valor del último elemento del árbol de salida
       	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;
Mensaje de entrada :
<message>
    <elem1>
        <elem11>value11</elem11>
        <elem12>
            <elem121>value121</elem121>
            <elem122>value122</elem122>
        </elem12>
        <elem13>value13</elem13>
    </elem1>
</message>
Mensaje de salida :
<message>
    <elem1>
        <elem11>val11</elem11>
        <elem12>
            <elem121>VALUE121</elem121>
            <elem122>VALUE122</elem122>
        </elem12>
        <elem13>val13</elem13>
    </elem1
</message
Conceptos relacionados
Visión general de flujos de mensajes
Visión general de ESQL
Modelado de mensajes
Tareas relacionadas
Diseñar un flujo de mensajes
Definir el contenido del flujo de mensajes
Gestión de archivos ESQL
Desarrollo de modelos de mensaje
Referencia relacionada
Nodo Compute
Nodo Database
Nodo Filter
Función ASBITSTREAM
Sentencia CREATE
Sentencia SET
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ac20701_