Manipulación de mensajes utilizando el analizador XMLNSC

El dominio XMLNSC es una extensión del dominio XMLNS que, a su vez, era una extensión del dominio XML original.

Con el dominio XMLNS, la intención era añadir soporte de espacio de nombres y, por razones de compatibilidad, se ha creado un dominio nuevo para que las aplicaciones existentes no quedaran afectadas. Con el nuevo dominio XMLNSC, la intención es crear un árbol más compacto y, por consiguiente, utilizar menos memoria al manejar mensajes grandes. De nuevo, por razones de compatibilidad, se ha añadido un dominio nuevo para que las aplicaciones existentes no se vean afectadas.

Estructura del árbol de mensaje

El analizador XMLNSC obtiene el árbol más compacto utilizando un solo elemento de nombre-valor para representar texto codificado, en lugar de los elementos de nombre y valor independientes utilizados por los analizadores XML y XMLNS. Examine el mensaje siguiente:
<Folder1>
<Folder2 Attribute1='AttributeValue1'>
<Field1><Value1></Field1>
<Field2 Attribute2='AttributeValue2'><Value2></Field2>
</Folder2>
</Folder1>

En el dominio XMLNSC, se representa mediante dos elementos de nombre (Folder1 y Folder2) y cuatro elementos de nombre-valor que son Attribute1, Field1, Field2 y Attribute2.

Los dominios XML y XMLNS difieren en que cada uno de los dos campos se representa mediante un elemento de nombre con un elemento de valor hijo. Es posible que estos parezca una diferencia pequeña, pero normalmente los mensajes tienen muchos campos hoja de este tipo, por ejemplo:
<Folder1>
<Folder2>
<Field1><Value1></Field1>
<Field2><Value2></Field2>
....
<Field100><Value100></Field100>
</Folder2>
</Folder1>

En este caso, el analizador XMLNSC representa el mensaje mediante dos elementos de nombre y 100 de nombre-valor, mientras que los analizadores XML y XMLNS utilizarán 102 elementos de nombre y 100 elementos de valor, más 103 elementos de valor adicionales para representar el espacio en blanco implícito en los mensajes formateados.

Atributos y texto codificado

Puesto que los atributos y el texto codificado se representan mediante elementos de nombre-valor, se distinguen por el uso de los tipos de elemento. Si no especifica un tipo, se supondrá texto codificado. Por consiguiente, el primer mensaje de ejemplo mostrado más arriba pueden haberlo producido las sentencias SQL siguientes:
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’;

Aunque el SQL anterior parece casi idéntico al que se utilizaría con el analizador XML, fíjese especialmente en que las constantes de tipo utilizadas son las que pertenecen al analizador XMLNSC. La utilización de constantes que pertenecen a otros analizadores, por ejemplo XML, produce resultados inesperados porque las constantes con nombres similares, por ejemplo XML.Attribute, tienen valores diferentes.

Manejo de texto mixto

Por omisión, el texto mixto simplemente se descarta basándose en que, si existe, es simplemente formato y no tiene ningún significado.

Sin embargo, se proporciona una modalidad en la que, al realizar el análisis, cualquier texto que aparezca en un lugar que no sea entre un código inicial y un código final (es decir, open->open, close->close y close->open) se representa mediante un solo elemento Value. Los tipos de elemento de valor soportan PCDATA, CDATA y un híbrido que es una mezcla de los dos anteriores.

Aún no existe ningún comportamiento especial de los elementos de sintaxis en lo que concierne a la obtención y al establecimiento de valores. Sólo se puede acceder a los elementos Value desde el SQL dirigiéndose a ellos explícitamente. Con este fin, se proporcionan las siguientes constantes adicionales:
XMLNSC.Value
XMLNSC.PCDataValue
XMLNSC.CDataValue
XMLNSC.HybridValue
La modalidad la controlan valores de opción de mensaje nuevos. Con este fin, se proporcionan las constantes siguientes:
XMLNSC.MixedContentRetainNone = 0x0000000000000000
XMLNSC.MixedContentRetainAll  = 0x0001000000000000
Estas constantes se pueden utilizar en las cláusulas Option de la Sentencia CREATE de SQL (sección PARSE) y la Función ASBITSTREAM. Por ejemplo:
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS
XMLNSC.MixedContentRetainAll);
...
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS
XMLNSC.MixedContentRetainNone);

Manejo de comentarios

Por omisión, los comentarios también se descartan simplemente basándose en que, si existen, sólo son información auxiliar sin significado.

Sin embargo, se proporciona una modalidad en la que, al realizar el análisis, los comentarios que se producen en el documento (que no sea en la propia descripción de documento) se representan mediante un elemento de nombre-valor con el nombre Comment. Con este fin, se proporciona el siguiente comentario adicional.
XMLNSC.Comment
La modalidad la controlan valores de opción de mensaje nuevos. Con este fin, se proporcionan las siguientes constantes:
XMLNSC.CommentsRetainNone = 0x0000000000000000
XMLNSC.CommentsRetainAll  = 0x0002000000000000
Por ejemplo:
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS
XMLNSC.CommentsRetainAll);
...
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS XMLNSC.CommentsRetainNone);

Manejo de instrucciones de proceso

Por omisión, las instrucciones de proceso también se descartan simplemente basándose en que, si existen, son simplemente información auxiliar sin significado.

Sin embargo, se proporciona una modalidad en la que, al realizar el análisis, las instrucciones de proceso que se producen en el documento (que no sea en la propia descripción de documento) se representan mediante un elemento de nombre-valor con el nombre y el valor apropiados. Con este fin, se proporciona la siguiente constante adicional:
XMLNSC.ProcessingInstruction
La modalidad la controlan valores de opción de mensaje nuevos. Con este fin, se proporcionan las siguientes constantes:
XMLNSC.ProcessingInstructionsRetainNone = 0x0000000000000000
XMLNSC.ProcessingInstructionsRetainAll  = 0x0004000000000000
Por ejemplo:
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data
OPTIONS XMLNSC.ProcessingInstructionsRetainAll);
...
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS
XMLNSC.ProcessingInstructionsRetainNone);

Migración de un flujo existente

El hecho de que se haya introducido un dominio nuevo significa que, cuando utilice el analizador XMLNSC, deberá volver a codificar el ESQL para utilizar XMLNSC en las vías de acceso. Examine los ejemplos siguientes:
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;
En cada caso, la corriente de bits XML esperada en la cola de entrada y grabada en la cola de salida tiene el formato:
<Person><Salary>42</Salary></Person>

Los tres casos difieren en que utilizan analizadores diferentes para ser propietarios de estos elementos. Por consiguiente, se espera un nombre de dominio diferente en la cabecera MQRFH2 del mensaje de entrada y se graba un nombre de dominio diferente en la cabecera MQRFH2 del mensaje de salida.

Para proteger las aplicaciones externas frente a estos cambios, se puede especificar la propiedad Utilizar analizador compacto XMLNSC para dominio XMLNS en el nodo de entrada del flujo y en el nodo de cálculo que contiene estas sentencias.

El primer ejemplo hace que se utilice el analizador XMLNSC para analizar el cuerpo del mensaje cuando la cabecera MQRFH2 del mensaje de entrada especifica el dominio XMLNS; eso en el nodo de cálculo hace que la cabecera MQRFH2 de salida especifique el analizador XMLNS en lugar de XMLNSC, permitiendo así que los mensajes de entrada y salida no se modifiquen.

Si los mensajes de entrada no contienen cabeceras MQRFH2 y se está utilizando el atributo de dominio de mensaje del nodo de entrada para especificar el dominio, puede establecerlo en XMLNSC o establecerlo en XMLNS y establecer también la propiedad Utilizar analizador compacto XMLNSC para dominio XMLNS.

Si los mensajes de salida no contienen cabeceras MQRFH2, el dominio no aparece en ningún lugar en los mensajes de salida y el establecimiento de la propiedad Utilizar analizador compacto XMLNSC para dominio XMLNS del nodo de cálculo no tiene ningún efecto

Creación de cabeceras XML

El ESQL siguiente es válido en el dominio XML:
SET OutputRoot.XML.(XML.XmlDecl)*.(XML.Version)* = '1.0';
Para migrar a XMLNS, basta con cambiar la raíz (root) para realizar este trabajo:
SET OutputRoot.XMLNS.(XML.XmlDecl)*.(XML.Version)* = '1.0';

Tenga en cuenta que aunque se está utilizando el analizador XMLNS, las constantes de tipo de elemento son las que pertenecen al analizador XML. Esto funciona porque los valores de tipo utilizados por los analizadores XML y XMLNS son los mismos. Sin embargo, para el analizador XMLNSC , los valores de tipo son diferentes y, por consiguiente, deberá utilizar siempre las constantes de tipo propias.

En el dominio XMLNSC, no hay ningún tipo especial para la versión XML; se trata simplemente como un atributo de la declaración XML. La sintaxis equivalente para el ejemplo anterior es:
SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.(XMLNSC.Attribute)Version = '1.0';

Copia de árboles de mensajes

Al copiar árboles, el intermediario considera XML y XMLNSC como analizadores diferentes, lo que significa que todos los atributos del árbol de origen se correlacionan con los elementos del árbol de destino. Esta situación sólo se produce si se están utilizando ambos analizadores en el mismo flujo - uno para la entrada y otro para la salida; por consiguiente, se recomienda utilizar el analizador compacto para ambos flujos.

Si se deben utilizar analizadores diferentes para el flujo de entrada y el flujo de salida, es posible que necesite especificar de forma explícita los tipos de elementos en las vías de acceso o utilizar la Función FIELDVALUE para asegurar una copia de valores escalares en lugar de subárboles.

Siga la información de guía proporcionada para los mensajes XML del apartado Manipulación de mensajes del dominio XML, junto con la información del tema Manipulación del contenido del texto del mensaje.

Acceso a elementos de sintaxis en el dominio XMLNSC utilizando nombres de correlación

La tabla siguiente proporciona los nombres de correlación para cada elemento de sintaxis XML. Cuando trabaje en el dominio XMLNSC, utilice estos nombres para hacer referencia a los elementos de los mensajes de entrada y para establecer elementos, atributos y valores en los mensajes de salida.
Tabla 1. Nombres de correlación para elementos de sintaxis XML
Elemento de sintaxis Nombre de correlación Valor constante
Carpeta XMLNSC.Folder 0x01000000
Tipo de documento 1 XMLNSC.DocumentType 0x01000300
Declaración XML 2 XMLNSC.XmlDeclaration 0x01000400
     
Valor de campo o atributo XMLNSC.Value 0x02000000
Valor de PCData XMLNSC.PCDataValue 0x02000000
Valor de CData XMLNSC.CDataValue 0x02000001
Valor híbrido XMLNSC.HybridValue 0x02000002
     
Referencia de entidad XMLNSC.EntityReference 0x02000100
     
Campo XMLNSC.Field 0x03000000
PCData XMLNSC.PCDataField 0x03000000
CData XMLNSC.CDataField 0x03000001
Híbrido XMLNSC.HybridField 0x03000002
     
Atributo XMLNSC.Attribute 0x03000100
Comillas simples XMLNSC.SingleAttribute 0x03000101
Comillas dobles XMLNSC.DoubleAttribute 0x03000100
     
Declaración de espacio de nombres XMLNSC.NamespaceDecl 0x03000102
Comillas simples XMLNSC.SingleNamespaceDecl 0x03000103
Comillas dobles XMLNSC.DoubleNamespaceDecl 0x03000102
     
Datos de corriente de bits XMLNSC.BitStream 0x03000200
     
Definición de entidad 1 XMLNSC.EntityDefinition 0x03000300
Comillas simples XMLNSC.SingleEntityDefinition 0x03000301
Comillas dobles XMLNSC.DoubleEntityDefinition 0x03000300
     
Comentario XMLNSC.Comment 0x03000400
     
Instrucción de proceso XMLNSC.ProcessingInstruction 0x03000401
Notas:
  1. Tipo de documento sólo se utiliza para definiciones de entidad. Por ejemplo:
    SET OutputRoot.XMLNSC.(XMLNSC.DocumentType)BodyDocument.(XMLNSC.EntityDefinition)TestDef =
    		          'Compact Tree Parser XML Test Module Version 1.0';
  2. Tenga en cuenta que la declaración XML es un tipo de carpeta especial que contiene elementos hijo para la versión, etc. Por ejemplo:
    -- Crear la declaración XML
    SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.Version = 1.0;
    SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.Encoding = 'UTF8';
    SET OutputRoot.XMLNSC.(XMLNSC.XmlDeclaration)*.Standalone = 'yes';

Modalidades de analizador XMLNSC

Por omisión, el analizador XMLNSC descarta los elementos de documento que normalmente no tienen significado de negocio. Sin embargo, las modalidades de analizador están disponibles para forzar la retención de estos elementos. Puede configurar estas modalidades en las propiedades del nodo que especifica que el mensaje se debe analizar en el dominio XMLNSC.

Las modalidades de analizador válidas para el analizador XMLNSC son:
XMLNSC.MixedContentRetainNone
XMLNSC.MixedContentRetainAll
XMLNSC.CommentsRetainNone
XMLNSC.CommentsRetainAll
XMLNSC.ProcessingInstructionsRetainNone
XMLNSC.ProcessingInstructionsRetainAll
El ejemplo siguiente utiliza las modalidades XMLNSC.ProcessingInstructionsRetainAll y XMLNSC.ProcessingInstructionsRetainNone para retener instrucciones de proceso de documentos mientras se analiza:
DECLARE X BLOB ASBITSTREAM(InputRoot.XMLNSC.Data OPTIONS XMLNSC.ProcessingInstructionsRetainAll);
...
CREATE LASTCHILD OF outputRoot PARSE(X OPTIONS XMLNSC.ProcessingInstructionsRetainNone);
Conceptos relacionados
Visión general de flujos de mensajes
Analizadores y dominios XML
Visión general de ESQL
Tareas relacionadas
Diseño de un flujo de mensajes
Definición del contenido del flujo de mensajes
Manipulación de mensajes del dominio XML
Referencia relacionada
Referencia de ESQL
Sentencia SET
Función FIELDVALUE
Función ASBITSTREAM
Sentencia CREATE
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 04/05/2006
ac26040_