Este tema proporciona información específica para tratar los mensajes que pertenecen al dominio XMLNS y que el analizador XML genérico analiza. El dominio XMLNS es una extensión del dominio XML y proporciona soporte de espacio de nombres. Siga la información de guía proporcionada para los mensajes XML del apartado Manipular mensajes en el dominio XML, junto con la información del tema Manipular el contenido del cuerpo del mensaje.
El ejemplo siguiente muestra cómo utilizar ESQL para trabajar con espacios de nombres. El ejemplo declara constantes de espacio de nombres al principio del módulo principal para que pueda utilizar prefijos en las sentencias ESQL en lugar de los URI de espacio de nombres completos.
Las constantes de espacio de nombres sólo afectan a ESQL; no controlan los prefijos generados en el mensaje de salida. Los prefijos del mensaje de salida generado los controlan las declaraciones de espacio de nombres. Puede incluir declaraciones de espacio de nombres en el árbol utilizando el nombre de correlación XML.NamespaceDecl. Entonces estos elementos se utilizan para generar declaraciones de espacio de nombres en el mensaje de salida.
Si, cuando se genera el mensaje de salida, el espacio de nombres con el que se califica un elemento o atributo no tiene ninguna declaración de espacio de nombres correspondiente, se genera automáticamente una utilizando prefijos del formato NSn, donde n es un entero positivo.
CREATE COMPUTE MODULE xmlns_doc_flow_Compute CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN CALL CopyMessageHeaders(); -- Declaración de constantes de espacio de nombres DECLARE sp1 NAMESPACE 'http://www.ibm.com/space1'; DECLARE sp2 NAMESPACE 'http://www.ibm.com/space2'; DECLARE sp3 NAMESPACE 'http://www.ibm.com/space3'; -- Declaración de espacio de nombres para asociar el prefijo 'space1' con el espacio de nombres SET OutputRoot.XMLNS.message.(XML.NamespaceDecl)xmlns:space1 = 'http://www.ibm.com/space1'; SET OutputRoot.XMLNS.message.sp1:data1 = 'Hello!'; -- Declaración de espacio de nombres por omisión 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>
También puede especificar que un elemento XML con nombre (y sus descendientes si es un elemento complejo) se analice de forma opaca. Es decir, se crea un único elemento con nombre en el árbol de mensajes con un valor (codificado en UTF-16) que contiene la corriente de bits XML que está contenida entre los códigos de inicio y finalización del elemento opaco. Está opción puede mejorar el rendimiento si los contenidos de un elemento no son significativos en el flujo de mensajes.
Para especificar que un elemento XML se analice de forma opaca, utilice una sentencia ESQL CREATE con una cláusula PARSE para analizar el documento XML. Establezca el calificador FORMAT de la cláusula PARSE en la serie de carácteres constante sensible a las mayúsculas y minúsculas 'XMLNS_OPAQUE' y el calificador TYPE de la cláusula PARSE en el nombre del elemento XML que debe analizarse de forma opaca. La cláusula TYPE puede especificar un nombre de elemento sin espacio de nombres (para que coincida con cualquier espacio de nombres) o con un prefijo de espacio de nombres o un URI de espacio de nombres completo (para que coincida con un espacio de nombres específico).
Observe el ejemplo siguiente:
DECLARE soap NAMESPACE 'http://schemas.xmlsoap.org/soap/envelope/'; DECLARE BitStream BLOB ASBITSTREAM(InputRoot.XMLNS ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId); --Sin espacio de nombres CREATE LASTCHILD OF OutputRoot DOMAIN('XMLNS') PARSE (BitStream ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId FORMAT 'XMLNS_OPAQUE' TYPE 'Body'); --Prefijo de espacio de nombres CREATE LASTCHILD OF OutputRoot DOMAIN('XMLNS') PARSE (BitStream ENCODING InputRoot.Properties.Encoding CCSID InputRoot.Properties.CodedCharSetId FORMAT 'XMLNS_OPAQUE' TYPE 'soap:Body'); --URI de espacio de nombres 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');
El análisis opaco de elementos XML sólo está disponible en el dominio XMLNS y el control sobre cómo se especifica está sujeto a cambios en releases posteriores.
Si desea más información sobre CREATE y consultar ejemplos de su utilización, consulte el apartado Sentencia CREATE.