Valores Nil y Nillable

www.altova.com Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Orígenes y destinos de datos > XML y esquemas XML >

Valores Nil y Nillable

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).


© 2019 Altova GmbH