Manipolazione dei messaggi mediante il programma di analisi XMLNSC

Il dominio XMLNSC rappresenta un'estensione del dominio XMLNS, che a sua volta è un'estensione del dominio XML originale.

Il dominio XMLNS aggiunge supporto per lo spazio dei nomi. Il nuovo dominio XMLNSC crea una struttura più compatta e utilizzare meno memoria durante la gestione dei messaggi di grandi dimensioni. E' stato aggiunto un nuovo dominio per per non modificare le applicazioni esistenti.

Struttura dell'albero dei messaggi

Il programma di analisi XMLNSC ottiene la struttura più compatta utilizzando un elemento nome-valore singolo per rappresentare il testo con tag anziché gli elementi nome e valore separati utilizzati dai programmi di analisi XML e XMLNS. Si valuti il messaggio seguente:
    <Folder1>
        <Folder2 Attribute1='AttributeValue1'>
            <Field1><Value1></Field1>
            <Field2 Attribute2='AttributeValue2'><Value2></Field2>  
        </Folder2> 
    </Folder1>

Nel dominio XMLNSC questo viene rappresentato da due elementi nome (Folder1 e Folder2) e da quattro elementi nome-valore, che sono costituiti da Attribute1, Field1, Field2 e Attribute2.

Inizio modificaI domini XML e XMLNS sono diversi poiché i due campi (Field1 e Field2) sono rappresentati ognunoFine modifica da un elemento nome con un elemento valore parent. Non si tratta di una differenza minima e i messaggi presentano spesso campi secondari: ad esempio,
    <Folder1>
        <Folder2>
            <Field1><Value1></Field1>
            <Field2><Value2></Field2>
            ....
            <Field100><Value100></Field100>
        </Folder2> 
    </Folder1>

In tal caso, il programma di analisi XMLNSC rappresenta il messaggio con due elementi nome e 100 nome-valore, mentre con i programmi di analisi XML eXMLNS verrebbero utilizzati 102 elementi nome e 100 elementi valore oltre a ulteriori 103 elementi valore per rappresentare lo spazio bianco implicito in messaggi formattati.

Inizio modificaI domini XML e XMLNS creano degli elementi valore-nome per i caratteri di formattazione spazi tra l'apertura e la chiusura di ogni cartella o campo. Tali elementi spazio dispongono di un nome vuoto e di un valore per lo spazio, la tabulazione, il ritorno a capo o altri caratteri utilizzati nella formattazione del documento XML. Tali elementi non dispongono di alcun valore utile e, di conseguenza, possono essere eliminati per migliorare la compressione. Per la stessa ragione, la funzionalità predefinita consiste nell'eliminare qualsiasi commento e istruzione di elaborazione XML nel flusso di input e nel non creare alcun elemento nella struttura ad albero di dominio compatta.Fine modifica

Attributi e testo con tag

Poiché gli attributi e il testo con tag vengono rappresentati da elementi nome-valore, sono distinti dall'utilizzo dei tipi di elemento. Se non viene specificato un tipo, verrà utilizzato un testo con tag. Per tale motivo, è possibile che il primo esempio riportato sopra sia prodotto da istruzioni SQL:
    SET Origin.Folder1.Folder2.(XMLNSC.Attribute)Attribute1 = 
       'AttributeValue1';
    SET Origin.Folder1.Folder2.Field1 = ‘Value1’;
    SET Origin.Folder1.Folder2.(XMLNSC.Attribute)Attribute2 = 
       'AttributeValue2';
    SET Origin.Folder1.Folder2.Field2 = ‘Value2’;

Sebbene l'istruzione ESQL sembri identica a quella utilizzata con il programma di analisi XML, le costanti di tipo utilizzate appartengono al programma di analisi XMLNSC. L'utilizzo di costanti che appartengono ad altri programmi di analisi, ad esempio XML, provoca risultati non previsti poiché costanti denominate in modo simile, ad esempio XML.Attribute, presentano valori diversi.

Inizio modificaLe seguenti costanti vengono definite nel dominio XMLNSC per la creazione di attributi:
   XMLNSC.SingleAttribute
   XMLNSC.DoubleAttribute
Fine modifica
Inizio modificaLa seguente costante viene definita nel dominio XMLNSC per la selezione di attributi:
   XMLNSC.Attribute
Fine modifica
Inizio modificaConsiderare il seguente messaggio di input XML:
    <Folder1 Item='ValueA'>
        <Item>Value1</Item>
    </Folder1>
Fine modifica
Inizio modificaPer eliminare l'ambiguità del nome Item utilizzato sia come nome attributo che come nome campo in Folder01, è possibile utilizzare il seguente ESQL:
    SET ItemAttributeValueHolder = InputRoot.XMLNSC.Folder1.(XMLNSC.Attribute)Item;
    SET ItemFieldValueHolder = InputRoot.XMLNSC.Folder1.(XMLNSC.Field)Item;
Fine modifica

Questo metodo ha un vantaggio rispetto all'utilizzo di una selezione dell'indice di array con Folder1 poiché non viene modificato se l'attributo non è presente nel flusso di input.

Gestione dei testi misti

Inizio modificaPer impostazione predefinita il testo misto viene semplicemente eliminato poiché, se presente, ha il solo scopo di formattazione degli spazi e non ha alcun significato aziendale.Fine modifica

Tuttavia, viene fornita una modalità in cui, durante l'analisi, qualsiasi testo non compreso tra un tag di apertura e un tag di chiusura (vale a dire open->open, close->close e close->open) Inizio modificaè rappresentato da un elemento Valore singolo e non specificato.Fine modifica I tipi di elemento valore supportano PCDATA, CDATA e un testo ibrido dei due.

Non è ancora presente un funzionamento dell'elemento di sintassi speciale relativo all'impostazione e all'ottenimento dei valori. E' possibile accedere agli elementi Valore da SQL solo mediante indirizzamenti espliciti. A tale scopo vengono fornite le costanti aggiuntive seguenti:
   XMLNSC.Value
   XMLNSC.PCDataValue
   XMLNSC.CDataValue
   XMLNSC.HybridValue
Inizio modificaLa modalità è controllata dall'impostazione della Modalità di mantenimento contenuto misto nel Navigator della finestra di dialogo Opzioni del programma di analisi XMLNSC su tutti i nodi di analisi del messaggio, ad esempio, sul nodo MQInput. Per un controllo programmatico utilizzando le opzioni del messaggio, vengono fornite le seguenti costanti:Fine modifica
   XMLNSC.MixedContentRetainNone = 0x0000000000000000
   XMLNSC.MixedContentRetainAll  = 0x0001000000000000
E' possibile utilizzare tali costanti nelle clausole relative all'opzione di SQL Istruzione CREATE (sezione PARSE) e Funzione ASBITSTREAM. Ad esempio:
   DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS 
   XMLNSC.MixedContentRetainAll);
   ...
   CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS 
   XMLNSC.MixedContentRetainNone);

Gestione dei commenti

Per impostazione predefinita anche i commenti vengono semplicemente eliminati poiché, se presenti, sono solo delle semplici informazioni aggiuntive.

Inizio modificaTuttavia, viene fornita una modalità in cui, durante l'analisi, qualsiasi commento presente nel documento (al di fuori della descrizione del documento) è rappresentato da un elemento nome-valore con il nome Commento. A tale scopo viene fornita la costante aggiuntiva seguente:
   XMLNSC.Comment
Fine modifica
Inizio modificaLa modalità è controllata dall'impostazione della Modalità di mantenimento commenti nel Navigator della finestra di dialogo Opzioni del programma di analisi XMLNSC su tutti i nodi di analisi del messaggio, ads Parser Options properties dialog navigator on all message parsing esempio, sul nodo MQInput. Per un controllo programmatico utilizzando le opzioni del messaggio, vengono fornite le seguenti costanti:Fine modifica
   XMLNSC.CommentsRetainNone = 0x0000000000000000
   XMLNSC.CommentsRetainAll  = 0x0002000000000000
Ad esempio:
   DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS 
   XMLNSC.CommentsRetainAll);
   ...
   CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS XMLNSC.CommentsRetainNone);

Gestione delle istruzioni di elaborazione

Per impostazione predefinita anche le istruzioni di elaborazione vengono semplicemente eliminate poiché, se presenti, sono solo delle semplici informazioni aggiuntive.

Tuttavia, viene fornita una modalità in cui, durante l'analisi, qualsiasi istruzione di elaborazione presente nel documento (al di fuori della descrizione del documento) è rappresentata da un elemento nome-valore con il nome e il valore appropriati. A tale scopo viene fornita la costante aggiuntiva seguente:
    XMLNSC.ProcessingInstruction
Inizio modificaLa modalità è controllata dall'impostazione della Modalità di mantenimento istruzioni di elaborazione nel Navigator della finestra di dialogo Opzioni del programma di analisi XMLNSC su tutti i nodi di analisi del messaggio, ad esempio, sul nodo MQInput. Per un controllo programmatico utilizzando le opzioni del messaggio, vengono fornite le seguenti costanti:Fine modifica
    XMLNSC.ProcessingInstructionsRetainNone = 0x0000000000000000
    XMLNSC.ProcessingInstructionsRetainAll  = 0x0004000000000000
Ad esempio:
    DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data 
    OPTIONS XMLNSC.ProcessingInstructionsRetainAll);
    ...
    CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS 
    XMLNSC.ProcessingInstructionsRetainNone);

Migrazione di un flusso esistente

Inizio modificaPer utilizzare il nuovo dominio XMLNSC e il programma di analisi, è necessario ricodificare l'ESQL per utilizzare XMLNSC nei propri percorsi. Considerare le seguenti istruzioni ESQL:
SET OutputRoot.XML.Person.Salary    = 
               CAST(InputRoot.XML.Person.Salary AS INTEGER) * 3;
SET OutputRoot.XMLNS.Person.Salary  = 
               CAST(InputRoot.XMLNS.Person.Salary AS INTEGER) * 3;
SET OutputRoot.XMLNSC.Person.Salary = 
               CAST(InputRoot.XMLNSC.Person.Salary AS INTEGER) * 3;
Fine modifica
Inizio modificaIn ciascun caso il flusso di bit XML previsto nella coda di input e scritto nella coda di output è nel formato:
    <Person><Salary>42</Salary></Person>
Fine modifica

Inizio modificaI tre esempi sono diversi poiché utilizzano programmi di analisi differenti per possedere tali elementi. Il programma di analisi di proprietà può essere impostato dal messaggio in entrata, con un'intestazione MQRFH2 con una cartella <mcd> specificando il dominio della serie di messaggi o dal dominio della serie di messaggi definito nelle proprietà predefinite del nodo di input del flusso. Se entrambi tali definizioni di dominio sono presenti, il valore per il dominio della serie di messaggi nell'intestazione MQRFH2 della cartella <mcd> ha la precedenza. Fine modifica

Inizio modificaPer migrare al dominio XMLNSC, durante l'utilizzo di intestazioni MQRFH2, il nuovo nome dominio è richiesto nel campo <Msd> della cartella <mcd>. Tenere presente che il nuovo nome dominio viene visualizzato nell'intestazione MQRFH2 del messaggio in uscita. Per proteggere le applicazioni esterne da queste modifiche, è possibile specificare la proprietà Utilizza programma di analisi compatto XMLNSC per il dominio XMLNS nel nodo di input del flusso e nel nodo Compute o Mapping. Con tali proprietà impostate, i messaggi di input e di output rimangono immutate, consentendo al valore del campo <Msd> di rimanere XMLNS. Il flusso utilizza ora il programma di analisi compatto e i percorsi ESQL vengono codificati utilizzando XMLNSC.Fine modifica

Inizio modificaSe nei messaggi in entrata non sono contenute intestazioni MQRFH2 e la proprietà di dominio del messaggio del nodo di input viene utilizzata per specificare il dominio, è possibile migrare al dominio XMLNSC impostando la suddetta proprietà direttamente su XMLNS o lasciarla come XMLNS e impostare la proprietà Utilizza programma di analisi compatto XMLNSC per il dominio XMLNS. Il programma di analisi compatto viene utilizzato nel flusso e i percorsi ESQL devono essere codificati utilizzando XMLNSC con una qualsiasi di tali impostazioni.Fine modifica

Inizio modificaSe nei messaggi in uscita non sono contenute intestazioni MQRFH2, il dominio non viene visualizzato in alcun punto dei messaggi in uscita e l'impostazione della proprietà Utilizza programma di analisi compatto XMLNSC per il dominio XMLNS del nodo Compute non ha alcun effetto.Fine modifica

Realizzazione delle intestazioni XML

Nel dominio XML è valido l'ESQL seguente:
SET OutputRoot.XML.(XML.XmlDecl)*.(XML.Version)* = '1.0';
Per eseguire la migrazione in XMLNS, è sufficiente modificare il valore principale:
SET OutputRoot.XMLNS.(XML.XmlDecl)*.(XML.Version)* = '1.0';

Sebbene sia utilizzato il programma di analisi XMLNS, le costanti del tipo di elemento sono quelle che appartengono al programma di analisi XML. Ciò si verifica poiché i valori del tipo utilizzati dai programmi di analisi XML e XMLNS sono gli stessi. Per il programma di analisi XMLNSC, tuttavia, i valori del tipo sono differenti ed è pertanto necessario utilizzare le proprie costanti di tipo.

Nel dominio XMLNSC non è presente alcun tipo speciale per la versione XML; viene gestita come un attributo della dichiarazione XML. La sintassi equivalente per l'esempio riportato sopra è:
SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)Version = '1.0';
Inizio modificaIn modo simile nel dominio XMLNSC, anche il tipo di codifica XML e la modalità autonoma vengono elaborate come attributi della dichiarazione XML e possono essere impostate in ESQL nel modo seguente:
SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)Encoding = 'UTF-8';
SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)StandAlone = 'Yes';
Fine modifica

Copia delle strutture di messaggio

Quando vengono copiate le strutture, il broker considera XML e XMLNSC come programmi di analisi diversi; questo significa che tutti gli attributi nella struttura di origine vengono messi in corrispondenza con elementi nella struttura di destinazione. Questa situazione si verifica solo se vengono utilizzati entrambi i programmi di analisi nello stesso flusso, uno per l'input e uno per l'output; si consiglia pertanto di utilizzare il programma di analisi compatto per entrambi i flussi.

Se è necessario utilizzare programmi di analisi differenti per il flusso di input e il flusso di output, è possibile che sia necessario specificare in modo esplicito i tipi di elementi nei percorsi o utilizzareFunzione FIELDVALUE per garantire una copia di valori scalari anziché di strutture secondarie.

Seguire le istruzioni guida fornite per i messaggi XML in Manipolazione dei messaggi nel dominio XML, insieme alle informazioni contenute nell'argomento Manipolazione del contenuto del messaggio.

Accesso agli elementi di sintassi nel dominio XMLNSC utilizzando i nomi di correlazione

Nella tabella riportata di seguito vengono forniti i nomi di correlazione per ciascun elemento di sintassi XML. Quando si opera nel dominio XMLNSC, utilizzare tali nomi per fare riferimento agli elementi nei messaggi di input e per impostare gli elementi, gli attributi e i valori nei messaggi di output.
Tabella 1. Nomi di correlazione per elementi di sintassi XML
Elemento di sintassi Nome di correlazione Valore della costante
Cartella XMLNSC.Folder 0x01000000
Tipo documento 1 XMLNSC.DocumentType 0x01000300
Dichiarazione XML 2 XMLNSC.XmlDeclaration 0x01000400
     
Valore campo o attr XMLNSC.Value 0x02000000
Valore PCData XMLNSC.PCDataValue 0x02000000
Valore CData XMLNSC.CDataValue 0x02000001
Valore ibrido XMLNSC.HybridValue 0x02000002
     
Riferimento entità XMLNSC.EntityReference 0x02000100
     
Campo XMLNSC.Field 0x03000000
PCData XMLNSC.PCDataField 0x03000000
CData XMLNSC.CDataField 0x03000001
Ibrido XMLNSC.HybridField 0x03000002
     
Attributo XMLNSC.Attribute 0x03000100
Apice XMLNSC.SingleAttribute 0x03000101
Virgolette XMLNSC.DoubleAttribute 0x03000100
     
Dichiarazione spazio dei nomi XMLNSC.NamespaceDecl 0x03000102
Apice XMLNSC.SingleNamespaceDecl 0x03000103
Virgolette XMLNSC.DoubleNamespaceDecl 0x03000102
     
Dati del flusso di bit XMLNSC.BitStream 0x03000200
     
Definizione entità 1 XMLNSC.EntityDefinition 0x03000300
Apice XMLNSC.SingleEntityDefinition 0x03000301
Virgolette XMLNSC.DoubleEntityDefinition 0x03000300
     
Commento XMLNSC.Comment 0x03000400
     
Istruzioni di elaborazione XMLNSC.ProcessingInstruction 0x03000401
Note:
  1. il tipo di documento viene utilizzato solo per definizioni di entità. Ad esempio:
    SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)BodyDocument
                  .(XMLNSC.EntityDefinition)TestDef =
     		          'Compact Tree Parser XML Test Module Version 1.0';
  2. La dichiarazione XML è un tipo di cartella speciale che contiene elementi child per la versione e così via. Ad esempio:
    -- Create the XML declaration 		
    SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.Version = 1.0;
    SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.Encoding = 'UTF8';
    SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.Standalone = 'yes';

Inizio modificaModalità di utilizzo di EntityDefintion e EntityReference con il programma di analisi XMLNSCFine modifica

Inizio modificaVengono forniti due esempi per dimostrare le modalità di utilizzo di EntityDefintion e EntityReference con il programma di analisi XMLNSC utilizzando ESQL. Entrambi gli esempi utilizzano lo stesso messaggio di input:
<BookInfo dtn="BookInfo" edn="author" edv="A.N.Other">
<Identifier>ES39B103T6</Identifier>
</BookInfo>
Fine modifica
Inizio modificaIl primo esempio mostra una modalità di utilizzo di EntityDefintion e EntityReference con il programma di analisi XMLNSC. Questo è il messaggio di output generato dall'esempio:
<!DOCTYPE BookInfo [<!ENTITY author "A.N.Other">]>
<BookInfo><Identifier>ES39B103T7</Identifier><entref>&author;</entref></BookInfo>
Fine modifica
Inizio modificaNel seguente ESQL, XMLNSC.EntityDefinition viene utilizzato per definire l'autore dell'entità con codifica rigida con un valore A.N.Other derivato da edv dal messaggio di input. XMLNSC.EntityReference viene utilizzato per creare un riferimento all'autore dell'entità nel corpo del messaggio XML.
SET OutputRoot.MQMD = InputRoot.MQMD;
DECLARE cursor REFERENCE TO InputRoot.XMLNSC.BookInfo;
SET OutputRoot.XMLNSC.BookInfo.Identifier = cursor.Identifier;
SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)* NAME = cursor.dtn;
SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)*.(XMLNSC.EntityDefinition)* NAME = 'author';
SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)*.(XMLNSC.EntityDefinition)author VALUE = cursor.edv;
SET OutputRoot.XMLNSC.(XMLNSC.BookInfo).entref.(XMLNSC.EntityReference)* = 'author';
Fine modifica

Inizio modificaLa variabile cursore viene utilizzata per specificare le seguenti variabili: dtn, il nome del tipo di documento; edv, il valore di definizione entità e il valore per Identificativo. I valori per tali variabili derivano dal messaggio di input.Fine modifica

Inizio modificaQuesto secondo esempio dimostra le modalità di creazione di un messaggio di output contenente una definizione di entità e un riferimento a tale entità basato sul contenuto dello stesso messaggio di input. Questo è il messaggio di output generato dall'esempio, che mostra una definizione di entità denominato autore e un riferimento all'entità nel corpo del messaggio XML:
<!DOCTYPE BookInfo [<!ENTITY author "Book 1">]>
<BookInfo Identifier="ES39B103T6">&author;</BookInfo>
Fine modifica
Inizio modificaIl seguente ESQL utilizza EntityDefintion e EntityReference con il programma di analisi XMLNSC per generare il precedente messaggio di output:
SET OutputRoot.MQMD = InputRoot.MQMD;
DECLARE cursor REFERENCE TO InputRoot.XMLNSC.BookInfo;
CREATE FIELD OutputRoot.XMLNSC.BookInfo;
SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)* NAME = cursor.dtn;
SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)*.(XMLNSC.EntityDefinition)* NAME = cursor.edn;
SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)*.(XMLNSC.EntityDefinition)* VALUE = 'Book 1';
SET OutputRoot.XMLNSC.(XMLNSC.Folder)*[<].(XMLNSC.EntityReference)* = cursor.edn;
SET OutputRoot.XMLNSC.Identifier.(XMLNSC.DoubleAttribute)Identifier = cursor.Identifier;
Fine modifica

Inizio modificaXMLNSC.EntityDefinition viene utilizzato per definire l'entità autore con il valore Libro 1. Un riferimento all'entità dell'autore viene quindi creato nel messaggio utilizzando XMLNSC.EntityReference. La variabile cursore viene utilizzata per specificare le variabili: dtn, il nome del tipo di documento; edn, il valore per Identificativo. Tali variabili derivano tutte dal messaggio di input. Il codice XMLNSC.DoubleAttribute viene utilizzato per aggiungere le virgolette doppie all'Identificativo. Per aggiungere solo virgolette semplici all'Identificativo, è possibile utilizzare XMLNSC.SingleAttribute.Fine modifica

Modalità del programma di analisi XMLNSC

Per impostazioni predefinita il programma di analisi XMLNSC elimina gli elementi del documento che solitamente non hanno rilevanza economica. Tuttavia, le modalità del programma di analisi sono disponibili per forzare la conservazione di questi elementi. E' possibile configurare tali modalità nelle proprietà del nodo che specificano di eseguire l'analisi del messaggio nel dominio XMLNSC.

Modalità valide per il programma di analisi XMLNSC sono:
XMLNSC.MixedContentRetainNone
XMLNSC.MixedContentRetainAll
XMLNSC.CommentsRetainNone
XMLNSC.CommentsRetainAll
XMLNSC.ProcessingInstructionsRetainNone
XMLNSC.ProcessingInstructionsRetainAll
Nell'esempio riportato di seguito vengono utilizzate le modalità XMLNSC.ProcessingInstructionsRetainAll e XMLNSC.ProcessingInstructionsRetainNone per conservare le istruzioni di elaborazione del documento durante l'analisi:
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS XMLNSC
                          .ProcessingInstructionsRetainAll);
...     
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS XMLNSC
                          .ProcessingInstructionsRetainNone);
Concetti correlati
Panoramica dei flussi di messaggi
Domini e programmi di analisi XML
Panoramica di ESQL
Attività correlate
Progettazione di un flusso di messaggi
Definizione del contenuto del flusso di messaggi
Manipolazione dei messaggi nel dominio XML
Riferimenti correlati
Riferimento ESQL
Istruzione SET
Funzione FIELDVALUE
Funzione ASBITSTREAM
Istruzione CREATE
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ac26040_