Questo argomento fornisce informazioni specifiche per la gestione dei messaggi che appartengono al dominio XMLNS e che sono analizzati da un programma di analisi XML generico. Il dominio XMLNS è un'estensione del dominio XML e fornisce supporto spazio dei nomi. Seguire la guida fornita per i messaggi XML in Manipolazione dei messaggi nel dominio XML, insieme alle informazioni presenti nell'argomento Manipolazione del contenuto del messaggio.
Il seguente esempio mostra come utilizzare ESQL per gestire gli spazi dei nomi. L'esempio dichiara delle costanti per lo spazio dei nomi all'inizio del modulo principale in modo che si possano utilizzare i prefissi nelle istruzioni ESQL invece di URI completi dello spazio dei nomi.
Le costanti per lo spazio dei nomi hanno effetto solo sull'ESQL; esse non controllano i prefissi generati nel messaggio di output. I prefissi nel messaggio di output generato sono controllati dalle dichiarazioni dello spazio dei nomi. E' possibile includere dichiarazioni spazio dei nomi nella struttura ad albero utilizzando il nome di correlazione XML.NamespaceDecl. Questi elementi sono quindi utilizzati per generare le dichiarazioni spazio dei nomi nel messaggio di output.
Se, quando viene generato il messaggio di output, lo spazio dei nomi con cui è qualificato un elemento o attributo non ha una dichiarazione dello spazio dei nomi corrispondente, ne viene generata una automaticamente utilizzando i prefissi del formato NSn dove n è un numero intero positivo.
CREATE COMPUTE MODULE xmlns_doc_flow_Compute CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN CALL CopyMessageHeaders(); -- Dichiarazione delle costanti spazio dei nomi DECLARE sp1 NAMESPACE 'http://www.ibm.com/space1'; DECLARE sp2 NAMESPACE 'http://www.ibm.com/space2'; DECLARE sp3 NAMESPACE 'http://www.ibm.com/space3'; -- Dichiarazione spazio dei nomi per associare il prefisso 'space1' allo spazio dei nomi SET OutputRoot.XMLNS.message.(XML.NamespaceDecl)xmlns:space1 = 'http://www.ibm.com/space1'; SET OutputRoot.XMLNS.message.sp1:data1 = 'Hello!'; -- Dichiarazione spazio dei nomi predefinito SET OutputRoot.XMLNS.message.sp2:data2.(XML.NamespaceDecl)xmlns = 'http://www.ibm.com/space2'; SET OutputRoot.XMLNS.message.sp2:data2.sp2:subData1 = 'Hola!'; SET OutputRoot.XMLNS.message.sp2:data2.sp2:subData2 = 'Guten Tag!'; SET OutputRoot.XMLNS.message.sp3:data3 = 'Bonjour!'; SET OutputRoot.Properties.MessageDomain = 'XMLNS'; 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;
<message xmlns:space1="http://www.ibm.com/space1"> <space1:data1>Hello!</space1:data1> <data2 xmlns="http://www.ibm.com/space2"> <subData1>Hola!</subData1> <subData2>Guten Tag!</subData2> </data2> <NS1:data3 xmlns:NS1="http://www.ibm.com/space3">Bonjour!</NS1:data3> </message>
È inoltre possibile specificare un'analisi opaca per un elemento nominato XML (e suoi discendenti, se è un elemento complesso). In altre parole, viene creato un singolo elemento denominato nell'albero dei messaggi con un valore (codificato in UTF-16) che contiene l'attuale flusso di dati XML contenuto tra i tag di inizio e fine dell'elemento opaco. Questa opzione può fornire benefici alle prestazioni se i contenuti di un elemento non risultano importanti all'interno del flusso di messaggi.
Per assegnare l'analisi opaca su un elemento XML, utilizzare un'istruzione ESQL CREATE con clausola PARSE per analizzare il documento XML. Impostare il qualificatore FORMAT della clausola PARSE sulla stringa costante e sensibile al maiuscolo/minuscolo 'XMLNS_OPAQUE' e il qualificatore TYPE della clausola PARSE sul nome dell'elemento XML da analizzare in modo opaco. La clausola TYPE può indicare il nome dell'elemento senza spazio dei nomi (per poter corrispondere ogni spazio dei nomi), con un prefisso di spazio dei nomi o un URI dello spazio dei nomi completo (per corrispondere uno specifico spazio dei nomi).
Prendere in considerazione il seguente esempio:
DECLARE soap NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/'; DECLARE BitStream BLOB ASBITSTREAM(InputRoot.XMLNS ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId); --No spazio dei nomi CREATE LASTCHILD OF OutputRoot DOMAIN('XMLNS') PARSE (BitStream ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId FORMAT 'XMLNS_OPAQUE' TYPE 'Body'); --Prefisso spazio dei nomi CREATE LASTCHILD OF OutputRoot DOMAIN('XMLNS') PARSE (BitStream ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId FORMAT 'XMLNS_OPAQUE' TYPE 'soap:Body'); --URI dello spazio dei nomi CREATE LASTCHILD OF OutputRoot DOMAIN('XMLNS') PARSE (BitStream ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId FORMAT 'XMLNS_OPAQUE' TYPE '{http://schemas.xmlsoap.org/soap/envelope/}Body');
L'analisi opaca degli elementi XML è disponibile solo nel dominio XMLNS; e il controllo sulla relativa specifica può subire modifiche nei rilasci successivi.
Per ulteriori informazioni su CREATE ed esempi relativi al suo utilizzo, consultare Istruzione CREATE.