Habilite JavaScript para visualizar esta página.

Altova MapForce 2021 Professional Edition

La especificación XML Schema permite que un elemento sea válido sin tener contenido si el atributo nillable="true" se definió para dicho elemento en el esquema. En el documento de instancia XML se puede indicar después que el valor de un elemento es nulo añadiéndole el atributo xsi:nil="true". En este apartado describimos cómo se ocupa MapForce de estos elementos en los componentes de origen y destino.

 

Diferencias entre 'xsi:nil' y 'nillable'

El atributo xsi:nil="true" se define en el documento XML de instancia.

nill2

El atributo xsi:nil="true" indica que, aunque exista, el elemento no tiene contenido. Recuerde que el atributo xsi:nil="true" afecta al valor de los elementos y no de los atributos. Un elemento con xsi:nil="true" puede tener otros atributos aunque no tenga contenido.

 

El atributo xsi:nil no se representa de forma explícita en la asignación gráfica de MapForce porque se procesa automáticamente en la mayoría de los casos. En concreto, existe un nodo con valor nulo (es decir, un nodo que tiene el atributo xsi:nil="true") pero su contenido no existe.

 

El atributo nillable="true" se define en el esquema XML. En MapForce puede estar presente tanto en el componente de origen como en el de destino.

nill1

 

Elementos que pueden ser nulos como origen de la asignación

MapForce revisa automáticamente el atributo xsi:nil si la asignación lee datos de elementos XML  con valor nulo. Si el valor de xsi:nil es true, el contenido se tratará como inexistente.

 

Cuando se crea una asignación basada en el destino entre un elemento de origen que puede ser nulo y un elemento de destino que puede ser nulo con contenido simple (un solo valor con atributos opcionales, pero sin elementos secundarios), donde se definió xsi:nil en un elemento de origen, MapForce añade el atributo xsi:nil al elemento de destino (p. ej. <OrderID xsi:nil="true"/>).

 

Cuando se crea una asignación de copia total entre un elemento de origen que puede ser nulo y un elemento de destino que puede ser nulo, donde se definió xsi:nil en un elemento de origen, MapForce añade el atributo xsi:nil al elemento de destino (por ejemplo, <OrderID xsi:nil="true"/>).

 

Para comprobar de forma explícita si un elemento de origen tiene un atributo xsi:nil con valor true, use la función is-xsi-nil. La función devuelve TRUE para los elementos con valor nulo y FALSE para los demás nodos.

 

Para sustituir el valor de un elemento de origen nulo (inexistente) con un valor concreto use la función substitute-missing.

 

Notas:

Si se conecta a un elemento de origen con valor nulo, la función exists devuelve TRUE porque el nodo de elemento existe aunque no tenga contenido.

Si se usan en elementos donde se definió xsi:nil, las funciones que esperan valores simples (como multiply y concat) no producen resultados porque no hay ningún contenido de elemento y no se puede extraer ningún valor. Estas funciones se comportan como si el nodo de origen no existiera.

 

Elementos que pueden ser nulos como destino de la asignación

Cuando se crea una asignación basada en el destino entre un elemento de origen que puede ser nulo y un elemento de destino que puede ser nulo con contenido simple (un solo valor con atributos opcionales pero sin elementos secundarios), donde se definió xsi:nil en un elemento de origen, MapForce inserta el atributo xsi:nil en el elemento de destino (por ejemplo: <OrderID xsi:nil="true"/>). Si el atributo xsi:nil="true" no se definió en el elemento XML de origen, entonces el contenido del elemento se asigna al elemento de destino.

 

Cuando se crea una asignación con un elemento de destino que puede ser nulo con tipo complejo (con elementos secundarios), el atributo xsi:nil no se escribirá automáticamente porque, a la hora de escribir los atributos del elemento, MapForce no puede saber si después vendrán elementos secundarios. En estos casos se recomienda definir una conexión de copia total para copiar el atributo xsi:nil del elemento de origen.

 

Cuando se crea una asignación entre una secuencia vacía y un elemento de destino, el elemento no se creará, independientemente de si puede ser nulo o no.

 

Para forzar la creación de un elemento de destino vacío con el atributo xsi:nil="true" conecte la función set-xsi-nil con el elemento de destino directamente. Esto sirve para elementos de destino con tipo complejo y con tipo simple.

 

Si el nodo tiene tipo simple, use la función substitute-missing-with-xsi-nil para insertar xsi:nil en el destino si no hay ningún valor disponible para la asignación. Esto puede ocurrir si el nodo de origen no existe en absoluto o si en un cálculo (en una multiplicación, por ejemplo) interviene un nodo de origen nulo y, por tanto, no se obtuvo ningún resultado.

 

Nota: las funciones que generan xsi:nil no pueden pasar por funciones ni componentes que solamente operen en valores (como la función if-else, por ejemplo).

 

 

Asignar campos de base de datos NULL a xsi:nil

Si crea una asignación entre un campo de base de datos NULL y un elemento que puede ser nulo de un esquema XML, MapForce genera solamente los elementos de destino que contengan datos de BD. Los elementos de campos de base de datos NULL no se crean en el componente de destino. Si se conecta la función de nodo exists con un elemento de origen de este tipo, se obtiene el resultado false para los campos NULL.

 

Para forzar la creación de todos los elementos en el componente de destino basta con usar la función substitute-missing-with-xsi-nil de biblioteca.

nill4

En la imagen anterior puede ver cómo puede usar la función substitute-missing-with-xsi-nil para crear elementos de destino para todos los campos de base de datos:

 

Todos los campos de base de datos NULL o que faltan contienen <OrderID xsi:nil="true"/> en el elemento de destino.

Los datos actuales de los campos de BD se asignan directamente al elemento de destino (p. ej. <OrderID>1</OrderID>).

 

Para ver los campos NULL de un componente de base de datos abra el panel Consulta de BD y ejecute una consulta en las tablas de la base de datos. En la ventana de resultados los campos nulos se designan con [NULL].

nill3

 

Asignar xsi:nil a campos de base de datos NULL

Si crea una asignación entre un elemento XML nulo y una columna de una base de datos, MapForce escribe un valor NULL en la base de datos. También puede usar la función set-null si desea que el campo de la base de datos sea nulo de forma incondicional.

© 2015-2021 Altova GmbH