MapForce ofrece acceso dinámico a los nombres de los nodos

Existen situaciones, especialmente cuando se trabaja con datos de estructura poco definida, en las que puede ser necesario mapear y transformar los componentes estructurales de un flujo de datos junto con su contenido. MapForce puede acceder dinámicamente a los nombres de los nodos de los elementos XML, a los atributos o a las columnas de archivos de texto, como el contenido de los archivos CSV, para así dirigir estos elementos a componentes específicos.

El acceso dinámico a los nombres de los nodos permite la creación inmediata de elementos y atributos de destino, cuyos nombres no es necesario conocer de antemano ni identificar específicamente en el mapeo de datos. Esta función permite crear mapeos mucho más genéricos, flexibles y reutilizables, que requieren menos intervención manual en caso de que los modelos de datos evolucionen.

Aquí hay un ejemplo de un estilo muy común de archivo CSV en el que los campos de datos no se identifican mediante nombres de columna, sino mediante etiquetas que se encuentran en una celda adyacente dentro de la misma fila:

Los registros de este ejemplo no están estructurados de manera consistente, ya que uno de ellos incluye un sufijo después del apellido, mientras que otro incluye la inicial del segundo nombre.

Una necesidad común en la conversión de datos para archivos como este es mapear las celdas de la columna A como nombres de elementos XML y las celdas de la columna B como los valores correspondientes a cada elemento. Esto ahora se puede lograr fácilmente mediante el mapeo dinámico de nombres de nodos. Veamos cómo se hace.

Acceso dinámico a los nombres de los elementos XML

Comenzaremos creando un esquema XML muy sencillo para el destino de la transformación, que utiliza el elemento <xs:any> para definir un elemento complejo que puede contener cualquier elemento hijo. Aquí está representado en la vista de esquema de XMLSpy:

Comenzamos el proceso de mapeo importando el archivo CSV y utilizando una función de agrupación que creará un nuevo elemento cada vez que el valor "FirstName" aparezca en la columna A del archivo de entrada.

A continuación, insertamos el esquema XML correspondiente y hacemos clic derecho sobre el elemento

Seleccionaremos la opción "Mostrar elementos secundarios con nombre dinámico", lo que abrirá un diálogo donde podremos elegir el tipo de datos para los elementos secundarios. Esto mostrará el nombre del nodo y el contenido de los elementos secundarios de , como se muestra aquí:

Ahora, es un proceso sencillo mapear los datos del campo 1 (la columna A del archivo CSV) a los nombres de los nodos de los elementos secundarios, y del campo 2 (la columna B) al contenido de los elementos. Aquí está el mapeo de datos final:

La función "group-starting-with" ubicada en la parte superior crea un nuevo elemento "" cada vez que se encuentra la palabra "FirstName" en el archivo de entrada. Luego, para cada fila, los datos de la columna A generan los nombres de los elementos secundarios, y los datos de la columna B se convierten en los valores de cada elemento secundario.

El resultado de la correspondencia anterior se presenta de la siguiente manera:

La ventaja de utilizar un mapeo de datos que emplea un acceso dinámico a los nombres de los nodos es que no es necesario realizar un análisis exhaustivo de los datos de entrada para identificar y mapear cada posible nombre de elemento.

Consideremos un escenario de producción común en el que se reciben múltiples archivos de entrada de una o varias fuentes externas, y se automatiza la ejecución de las transformaciones con MapForce Server y FlowForce Server. Si un archivo de entrada contiene de repente un elemento secundario inesperado, como por ejemplo "OfficeLocation" o "MailStop", los datos no se perderán.

Acceso dinámico a los nombres de los nodos de los atributos XML

También puede asignar dinámicamente los nombres de los atributos XML, con la misma capacidad de crear elementos y atributos de destino de forma instantánea, sin necesidad de identificarlos todos de antemano.