Valores NULL
En esta sección explicamos cómo se ocupa MapForce de los valores NULL en los componente de origen y de destino. Para poder usar el atributo xsi:nil="true" en un archivo XML debe especificar el atributo nillable="true» en los elementos relevantes del archivo de esquema correspondiente. Para saber más sobre los atributos nillable y xsi:nil consulte la especificación del W3C. Observe que el atributo xsi:nil no es visible en la estructura de los componentes del panel Asignación.
A continuación explicamos algunos casos de uso de los valores NULL en asignaciones.
Valores NULL en componentes XML
En esta subsección vamos a ver algunos ejemplos de casos de uso de elementos de asignación que tienen un atributo xsi:nil="true".
Sólo el elemento de origen tiene xsi:nil="true"/Tanto el elemento de origen como el de destino tienen xsi:nil="true"
En este caso las condiciones son:
•La conexión está basada en destino.
•El elemento de origen es un atributo xsi:nil="true". El elemento de destino correspondiente no tiene este atributo.
•También es posible que los dos elementos, el de origen y el de destino, tengan atributos xsi:nil="true".
•Los atributos nillable="true" se deben definir en los esquemas de origen y de destino,
•Los elementos de origen y de destino son de tipo simple.
En este caso, el elemento de destino tendrá el atributo xsi:nil="true" en el archivo de salida, como se ve en el archivo de resultados de más abajo (resaltado en amarillo).
<book id="7">
<author>Edgar Allan Poe</author>
<title>The Murders in the Rue Morgue</title>
<category xsi:nil="true"/>
<year>1841</year>
<OrderID id="213"/>
</book>
Nota: | Si el atributo nillable="true" no está definido en el esquema de destino, el elemento de destino correspondiente estará vacío en el resultado. |
Sólo el elemento de destino tiene xsi:nil="true»
En este caso las condiciones son:
•La conexión está basada en destino.
•El elemento de origen no tiene un atributo xsi:nil="true".
•El elemento de destino correspondiente tiene un atributo xsi:nil="true".
•Los elementos de origen y de destino pueden ser de tipo simple o complejo.
En este caso el elemento de origen sobrescribirá el elemento de destino que contiene el atributo xsi:nil="true". En el ejemplo siguiente puede ver un archivo de resultados de ejemplo. El elemento <genre> incluye el atributo xsi:nil="true" en el elemento de destino. Sin embargo, este elemento se sobrescribe en tiempo de ejecución, por lo que el elemento <genre> (resaltado en amarillo) tiene Fiction en el resultado.
<publication>
<id>1</id>
<author>Mark Twain</author>
<title>The Adventures of Tom Sawyer</title>
<genre>Fiction</genre>
<year>1876</year>
<OrderID id="124"/>
</publication>
El elemento de tipo complejo de origen/los dos elementos de tipo complejo tienen xsi:nil="true"
En este caso las condiciones son:
•La conexión está basada en destino.
•El elemento de origen es de tipo complejo. En este ejemplo el elemento de origen tiene un atributo id="213" y un atributo xsi:nil="true». El elemento de destino correspondiente también es de tipo complejo y tiene un atributo id="124", pero no un atributo xsi:nil="true».
•También puede ser que los dos elementos, el de origen y el de destino, que son de tipo complejo, tengan atributos xsi:nil="true».
En este caso el elemento de origen sobrescribirá el elemento de destino (resaltado en amarillo). Sin embargo, el atributo xsi:nil="true" no se escribe automáticamente en el archivo de salida. Para ver el atributo xsi:nil="true" en el elemento de destio del archivo de resultados use una conexión de copia total.
<book id="7">
<author>Edgar Allan Poe</author>
<title>The Murders in the Rue Morgue</title>
<year>1841</year>
<OrderID id="213"/>
</book>
Funciones útiles
Estas funciones sirven para comprobar, reemplazar y asignar valores NULL:
•is-xsi-nil: Ayuda a comprobar de forma explícita si un elemento de origen tiene el atributo xsi:nil definido como true.
•substitute-missing: Sustituye un valor NULL en el elemento de origen con algo específico.
•set-xsi-nil: Asigna el elemento xsi:nil="true" a un elemento de destino. Esto funciona con elementos de destino de tipo simple y complejo.
•substitute-missing-with-xsi-nil: Si hay contenido, este se escribe en el elemento de destino; si falta algún valor, esta función produce un elemento de destino con el atributo xsi:nil="true» en el resultado.
•Si conecta la función exists a un elemento de origen con un valor NULL devuelve true aunque el elemento no tenga contenido.
Observe que las funciones que generan xsi:nil no pueden pasar a través de funciones o componentes que sólo operan en valores (como la función if-else).
Valores NULL en componentes de BD
En las subsecciones siguientes explicamos cómo se trata a los valores NULL en los componentes de BD.
Asignar campos de BD NULL a elementos NULL
Los elementos de destino que reciben valores NULL de campos de BD no se crean en el resultado automáticamente. Para ver esos elementos en el resultado tiene que (i) añadir atributos nillable="true» a los elementos de destino relevantes en el archivo de esquema y (ii) usar la función substitute-missing-with-xsi-nil en la asignación. En el ejemplo siguiente puede ver cómo gestionas los valores NULL en asignaciones que tienen un componente de BD de origen.
Tabla de aplicaciones en el panel Consulta de la BD
Puede encontrar la asignación de ejemplo en: Tutorial\DBNullToXML.mfd. Para este ejemplo hemos elegido una sola tabla (Application) de la BD Accounts (imagen siguiente).
Para ver la tabla Application siga estos pasos:
•Abra el panel Consulta de BD.
•Seleccione la base de datos Accounts para ver su estructura en el Explorador de BD.
•Haga clic con el botón derecho en la tabla Application y haga clic en Mostrar en Editor SQL | SELECT.
•Haga clic en el botón (Ejecutar consulta). Aparece la tabla Application en la pestaña Resultados.
Para saber más sobre consultas de BD consulte consulte Paneles de consulta de BD.
Asignación
En la tabla Application de más arriba puede ver que el segundo registro tienen valores NULL en los campos Description, Category y URL Para este ejemplo vamos a asignar casi todas las columnas directamente con los elementos de destino correspondientes. Para la columna URL vamos a usar la función substitute-missing-with-xsi-nil para que el valor NULL del elemento de destino tenga un atributo xsi:nil="true" (imagen siguiente).
Resultados
En el archivo de resultados siguiente puede ver que el primer registro de la tabla se ha escrito por completo en el resultado, mientras que el segundo se ha escrito sólo parcialmente. Los valores NULL de BD están ausentes del resultado, salvo por el elemento URL. El elemento URL tiene el atributo nillable="true» en el archivo de esquema y estamos usando la función substitute-missing-with-xsi-nil, por lo que el elemento URL ahora tiene el atributo xsi:nil="true" en el resultado (resaltado en amarillo).
<Application>
<AppID>1</AppID>
<AppName>Altova MapForce</AppName>
<Description>Best data mapping tool!</Description>
<Category>IDE</Category>
<URL>https://www.altova.com/mapforce</URL>
</Application>
<Application>
<AppID>2</AppID>
<AppName>Notepad</AppName>
<URL xsi:nil="true"/>
</Application>
Asignar elementos NULL a campos de BD NULL
Si asigna un elemento XML NULL a una columna de BD MapForce escribe el valor NULL en la columna de BD correspondiente. También puede usar la función set-null si quiere definir un campo de BD como NULL. Para saber más sobre las funciones relacionadas con bases de datos consulte la Biblioteca de bases de datos.