Manipulación de mensajes en el dominio XMLNS

Este tema le proporciona información específica sobre cómo manejar los mensajes pertenecientes al dominio XMLNS y que analiza el analizador XML genérico. El dominio XMLNS es una extensión del dominio XML y proporciona soporte de espacio de nombres. Siga las indicaciones que se proporcionan en Manipulación de mensajes en el dominio XML para mensajes XML, junto con la información del tema Manipular el contenido del cuerpo del mensaje.

El ejemplo siguiente le muestra cómo utilizar ESQL para trabajar con espacios de nombres. El ejemplo declara las constantes de espacio de nombre al principio del módulo principal, de modo que puede utilizar prefijos en las sentencias ESQL en lugar de los URI de espacio de nombres completos.

Las constantes de espacio de nombre solo afectan al ESQL y no controlan los prefijos generados en el mensaje de salida. Los prefijos del mensaje de salida generado se controlan mediante declaraciones de espacio de nombres. Puede incluir declaraciones de espacios de nombres en el árbol utilizando el nombre de correlación de XML.NamespaceDecl. Estos elementos se utilizan a continuación para generar las 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 una declaración de espacio de nombres correspondiente, se genera una automáticamente utilizando prefijos con formato NSn, siendo n un entero positivo.

CREATE COMPUTE MODULE xmlns_doc_flow_Compute
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
CALL CopyMessageHeaders();

-- Declaración de las constantes del 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 del 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 del 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;
Cuando se ejecuta este ESQL, se genera el siguiente mensaje de salida:
<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>

Conceptos relacionados
Flujos de mensajes
Dominios y analizador XML
ESQL

Tareas relacionadas
Diseño de un flujo de mensajes
Definición del contenido del flujo de mensajes
Manipulación de mensajes en el dominio XML

Referencia relacionada
ESQL
Sentencia DECLARE
Sentencia SET