Un mensaje empresarial puede contener campos que estén vacíos o que tengan un valor específico fuera de rango. En estos casos, se espera que la aplicación que recibe el mensaje trate el campo como si no tuviera un valor. El árbol de mensaje lógico da soporte a este concepto permitiendo que el valor de cualquier elemento se establezca en NULL.
En un documento XML, el modo normal de representar un valor nulo es dejar el elemento o el atributo vacío.
Por ejemplo:<price></price> o <element price=""/>
El atributo xsi:nil proporciona una forma de que esto sea más explícito: price=<xsi:nil="true"/>
Algunos mensajes empresariales utilizan un valor especial para representar un valor nulo: <price>-999</price>. Este estilo de representación sólo está soportado por los analizadores DFDL y MRM.
El analizador DFDL puede detectar un valor nulo que esté representado por un valor fuera de rango. El valor nulo debe especificarse en el esquema DFDL y puede ser igual o diferente para cada elemento. En DFDL se denomina valor nulo. Al realizar el análisis, el analizador DFDL comprueba el valor nulo para cada elemento del mensaje. Si el valor de la corriente de bits coincide con el valor nulo en el esquema DFDL, el analizador DFDL establece el valor del árbol de mensaje en NULL. Se realiza la misma comprobación cuando se convierte un árbol de mensaje en una corriente de bits. Si el valor del árbol de mensaje es NULL, el analizador genera el valor nulo del esquema DFDL.
Para obtener más información, consulte Especificación DFDL 1.0, sección 13.15.
Utilizando ESQL, puede establecer el valor de un elemento de árbol de mensajes en NULL:
SET OutputRoot.XMLNSC.myField VALUE = NULL;
Tenga en cuenta que esto es diferente de SET OutputRoot.XMLNSC.myField = NULL; que haría que myField se suprimiera del árbol de mensaje.
Se puede lograr el mismo efecto utilizando Java.
Normalmente, los analizadores XML (XMLNSC, XMLNS y XML) no crean valores nulos en el árbol de mensaje; un valor de elemento vacío o de atributo vacío simplemente genera un valor de serie vacía en el árbol de mensaje.
Si la validación está habilitada, el analizador XMLNSC detecta y procesa cualquier atributo xsi:nil en el documento de entrada. Si el atributo xsi:nil está establecido en 'true', y el elemento puede tener un valor nulo, el elemento padre del atributo en el árbol de mensaje recibe un valor nulo.
Si desea obtener más información sobre el soporte del analizador XML para los elementos vacíos y los valores nulos, consulte Elementos vacíos y valores nulos XMLNSC y Elementos vacíos y valores nulos XMLNS.
Formato físico XML
Al realizar el análisis, el analizador MRM XML puede detectar y procesar los atributos xsi:nil en el documento XML de entrada. Si el atributo xsi:nil está establecido en 'true', y el elemento puede tener un valor nulo, el elemento padre del atributo en el árbol de mensaje recibe un valor nulo.
Si desea obtener información sobre la habilitación del soporte xsi:nil en el analizador MRM, consulte Conjuntos de mensajes: opciones de manejo de nulos XML.
Los temas siguientes proporcionan más información sobre el manejo de valores nulos en el analizador MRM:
Todos los formatos físicos
El analizador MRM puede detectar un valor nulo que esté representado por un valor fuera de rango. El valor nulo debe especificarse en el formato físico del conjunto de mensajes.
Al realizar el análisis, el analizador MRM comprueba el valor nulo de cada elemento en el mensaje. Si el valor de la corriente de bits coincide con el valor nulo en el conjunto de mensajes, el analizador MRM establece el valor en el árbol de mensaje en NULL.
Se realiza la misma comprobación cuando se convierte un árbol de mensaje en una corriente de bits. Si el valor del árbol de mensaje es NULL, el analizador MRM genera el valor nulo del conjunto de mensajes.
El formato JSON admite NULL como un tipo de valor JSON.
Cuando un mensaje JSON incluye un objeto con un valor nulo, el analizador JSON establece el valor en el árbol de mensaje en NULL.
Al serializar un elemento del árbol de mensaje con un valor nulo, la corriente de bits JSON se construye como un objeto JSON con un valor de null.