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
<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.
<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.
I 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.
Attributi e testo con tag
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.
XMLNSC.SingleAttribute XMLNSC.DoubleAttribute
XMLNSC.Attribute
<Folder1 Item='ValueA'> <Item>Value1</Item> </Folder1>
SET ItemAttributeValueHolder = InputRoot.XMLNSC.Folder1.(XMLNSC.Attribute)Item; SET ItemFieldValueHolder = InputRoot.XMLNSC.Folder1.(XMLNSC.Field)Item;
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
Per 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.
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) è rappresentato da un elemento Valore singolo
e non specificato.
I tipi di elemento valore supportano PCDATA, CDATA e un testo
ibrido dei due.
XMLNSC.Value XMLNSC.PCDataValue XMLNSC.CDataValue XMLNSC.HybridValue
XMLNSC.MixedContentRetainNone = 0x0000000000000000 XMLNSC.MixedContentRetainAll = 0x0001000000000000
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.
XMLNSC.Comment
XMLNSC.CommentsRetainNone = 0x0000000000000000 XMLNSC.CommentsRetainAll = 0x0002000000000000Ad 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.
XMLNSC.ProcessingInstruction
XMLNSC.ProcessingInstructionsRetainNone = 0x0000000000000000 XMLNSC.ProcessingInstructionsRetainAll = 0x0004000000000000Ad 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
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;
<Person><Salary>42</Salary></Person>
I 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.
Per 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.
Se 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.
Se 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.
Realizzazione delle intestazioni XML
SET OutputRoot.XML.(XML.XmlDecl)*.(XML.Version)* = '1.0';
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.
SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)Version = '1.0';
SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)Encoding = 'UTF-8'; SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)StandAlone = 'Yes';
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
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 |
SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)BodyDocument .(XMLNSC.EntityDefinition)TestDef = 'Compact Tree Parser XML Test Module Version 1.0';
-- 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';
Modalità di utilizzo di EntityDefintion e EntityReference con il programma
di analisi XMLNSC
<BookInfo dtn="BookInfo" edn="author" edv="A.N.Other"> <Identifier>ES39B103T6</Identifier> </BookInfo>
<!DOCTYPE BookInfo [<!ENTITY author "A.N.Other">]> <BookInfo><Identifier>ES39B103T7</Identifier><entref>&author;</entref></BookInfo>
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';
La 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.
<!DOCTYPE BookInfo [<!ENTITY author "Book 1">]> <BookInfo Identifier="ES39B103T6">&author;</BookInfo>
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;
XMLNSC.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.
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.
XMLNSC.MixedContentRetainNone XMLNSC.MixedContentRetainAll XMLNSC.CommentsRetainNone XMLNSC.CommentsRetainAll XMLNSC.ProcessingInstructionsRetainNone XMLNSC.ProcessingInstructionsRetainAllNell'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);