Gestione dei messaggi MRM e dei flussi di bit

Quando si utilizza la funzione ASBITSTREAM o l'istruzione CREATE FIELD con una clausola PARSE tenere presente i seguenti punti.

La funzione ASBITSTREAM

Se si codifica la funzione ASBITSTREAM con l'opzione della modalità del programma di analisi impostata su RootBitStream, per analizzare una struttura ad albero del messaggio in un flusso di bit, il risultato è un documento MRM nel formato specificato dal formato del messaggio creato dai child dell'elemento di destinazione nel modo usuale.

L'elemento di destinazione deve essere un messaggio predefinito definito all'interno della serie di messaggi o può trattarsi di un messaggio a definizione automatica se si utilizza un formato fisico XML. Questo algoritmo è identico a quello utilizzato per generare il normale flusso di bit di output. Un flusso di bit con formato corretto ottenuto in questo modo può essere utilizzato per creare nuovamente la struttura ad albero originale utilizzando un'istruzione CREATE con una clausola PARSE.

Se si codifica la funzione ASBITSTREAM con l'opzione della modalità del programma di analisi impostata su FolderBitStream, per analizzare una struttura ad albero del messaggio in un flusso di bit, il flusso di bit generato è un elemento MRM creato dall'elemento di destinazione e dai relativi child. A differenza della modalità RootBitStream l'elemento di destinazione non deve rappresentare un messaggio; esso può rappresentare un elemento predefinito all'interno del messaggio o un elemento a definizione automatica all'interno di un messaggio.

Affinché il programma di analisi MRM possa analizzare correttamente il messaggio, il percorso dal messaggio all'elemento di destinazione all'interno del messaggio deve essere specificato nel Tipo messaggio. Il formato del percorso è lo stesso utilizzato dai percorsi del messaggio tranne che il prefisso del tipo di messaggio non è utilizzato.

Ad esempio, ipotizziamo che venga utilizzata la seguente struttura del messaggio:
          Message
              elem1
                   elem11
                   elem12

Per serializzare la struttura ad albero secondaria che rappresenta l'elemento elem12 e i relativi child, specificare il percorso del messaggio 'message/elem1/elem12' nel Tipo messaggio.

Se un elemento nel percorso è qualificato da uno spazio dei nomi, specificare l'URI dello spazio dei nomi tra i caratteri {} nel percorso del messaggio. Ad esempio se l'elemento elem1 è qualificato da uno spazio dei nomi 'http://www.ibm.com/temp', specificare il percorso del messaggio come 'message/{http://www.ibm.com/temp}elem1/elem12'

Questa modalità può essere utilizzata per ottenere una descrizione del flusso di bit di strutture ad albero arbitrarie secondarie che appartengono ad un programma di analisi MRM. Quando si opera in questa modalità, con un formato fisico XML, il flusso di bit XML generato non è contenuto nel 'Root Tag Name' specificato per il messaggio nella Serie di messaggi. Non viene creata alcuna dichiarazione XML, anche se non è eliminata nelle proprietà della serie di messaggi.

I flussi di bit ottenuti in questo modo possono essere utilizzati per ricreare la struttura ad albero originale utilizzando un'istruzione CREATE con una clausola PARSE (utilizzando una modalità FolderBitStream).

L'istruzione CREATE con una clausola PARSE

Se si codifica un'istruzione CREATE con una clausola PARSE, con l'opzione della modalità del programma di analisi impostata su RootBitStream, per analizzare un flusso di bit in una struttura ad albero del messaggio, il flusso di bit previsto è un normale documento MRM. Viene creato un campo nella struttura ad albero per ogni campo nel documento. Questo algoritmo è identico a quello utilizzato durante l'analisi di un flusso di bit da un nodo di input

Se si codifica un'istruzione CREATE con una clausola PARSE, con l'opzione della modalità del programma di analisi impostata su FolderBitStream, per analizzare un flusso di bit in una struttura ad albero del messaggio, il flusso di bit previsto è un documento nel formato specificato dal Formato del messaggio, che è specificato direttamente o ereditato. A differenza della modalità RootBitStream la root del documento non deve rappresentare un messaggio MRM; essa può rappresentare un elemento predefinito all'interno di un messaggio o un elemento a definizione automatica all'interno di un messaggio.

Affinché il programma di analisi MRM possa analizzare correttamente il messaggio, il percorso dal messaggio all'elemento di destinazione all'interno del messaggio deve essere specificato nel Tipo messaggio. Il formato del percorso del messaggio è lo stesso di quello utilizzato dalla funzione ASBITSTREAM sopra descritta.

Esempio relativo all'utilizzo della funzione ASBITSTREAM e dell'istruzione CREATE con una clausola PARSE in modalità FolderBitStream

Il seguente ESQL utilizza la definizione del messaggio sopra descritta. L'ESQL serializza parte della struttura ad albero di input utilizzando la funzione ASBITSTREAM e quindi utilizza l'istruzione CREATE con una clausola PARSE per creare nuovamente la struttura ad albero secondaria dell'albero di output. Il messaggio Input e il messaggio Output corrispondente sono riportati sotto il codice ESQL.

CREATE COMPUTE MODULE DocSampleFlow_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
	BEGIN
CALL CopyMessageHeaders();
		
		-- Impostare le opzioni che dovranno essere utilizzate da ASBITSTREAM e CREATE ... PARSE
		-- su FolderBitStream e abilitare la convalida
		DECLARE parseOptions INTEGER BITOR(FolderBitStream, ValidateContent,
      							           ValidateValue, ValidateLocalError);

		-- Serializzare l'elemento elem12 e i relativi child dal flusso di bit di input
		-- in una variabile
      	DECLARE subBitStream BLOB
        	CAST(ASBITSTREAM(InputRoot.MRM.elem1.elem12
        		 OPTIONS parseOptions
        		 SET 'DocSample'
        		 TYPE 'message/elem1/elem12'
        		 FORMAT 'XML1') AS BLOB);

        -- Impostare il valore del primo elemento nella struttura ad albero di output  		
       	SET OutputRoot.MRM.elem1.elem11 = 'val11';
       	
       	-- Analizzare la struttura ad albero secondaria nell'albero di output
        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;
       	
		-- Convertire i child di elem12 nell'albero di output in maiuscolo
		SET OutputRoot.MRM.elem1.elem12.elem121 =
			UCASE(OutputRoot.MRM.elem1.elem12.elem121);
			
		SET OutputRoot.MRM.elem1.elem12.elem122 =
			UCASE(OutputRoot.MRM.elem1.elem12.elem122);
			
        -- Impostare il valore dell'ultimo elemento nell'albero di output  		
       	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;
Messaggio Input :
<message>
    <elem1>
        <elem11>value11</elem11>
        <elem12>
            <elem121>value121</elem121>
            <elem122>value122</elem122>
        </elem12>
        <elem13>value13</elem13>
    </elem1>
</message>
Messaggio Output :
<message>
    <elem1>
        <elem11>val11</elem11>
        <elem12>
            <elem121>VALUE121</elem121>
            <elem122>VALUE122</elem122>
        </elem12>
        <elem13>val13</elem13>
    </elem1
</message
Concetti correlati
Panoramica dei flussi di messaggi
Panoramica di ESQL
Creazione di modelli di messaggio
Attività correlate
Progettazione di un flusso di messaggi
Definizione del contenuto del flusso di messaggi
Gestione dei file ESQL
Sviluppo di modelli di messaggio
Riferimenti correlati
Nodo Compute
Nodo Database
Nodo Filter
Funzione ASBITSTREAM
Istruzione CREATE
Istruzione SET
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac20701_