Pasar datos XML a un esquema nuevo

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

Inicio >  Tutoriales >

Pasar datos XML a un esquema nuevo

Este tutorial explica cómo pasar datos de un archivo XML a otro y define los conceptos básicos del entorno de desarrollo de MapForce. Ambos archivos XML sirven para almacenar una lista de libros, pero sus elementos tienen nombres diferentes y siguen estructuras distintas (es decir, los archivos tienen diferentes esquemas).

Tutorial_Convert_XML_to_New_Schema

Modelo abstracto de la transformación de datos

El fragmento de código que aparece a continuación muestra algunos datos del archivo que usaremos como origen de datos (para mayor simplicidad se omitieron las declaraciones XML y de espacio de nombres).

 

<books>
  <book id="1">
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <category>Fiction</category>
    <year>1876</year>
  </book>
  <book id="2">
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <category>Fiction</category>
    <year>1912</year>
  </book>
</books>

books.xml

Y a continuación puede ver los mismos datos en el archivo de destino:

 

<library>
  <last_updated>2015-06-02T16:26:55+02:00</last_updated>
  <publication>
    <id>1</id>
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <genre>Fiction</genre>
    <publish_year>1876</publish_year>
  </publication>
  <publication>
    <id>2</id>
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <genre>Fiction</genre>
    <publish_year>1912</publish_year>
  </publication>
</library>

library.xml

Como puede observar, algunos nombres de elemento no coinciden en el XML de origen y de destino. Nuestro objetivo es rellenar los elementos <author>, <title>, <genre> y <publish_year> del archivo de destino con los datos de los elementos equivalentes del archivo de origen (<author>, <title>, <category>, <year>). El atributo id del archivo XML de origen debe asignarse al elemento <id> del archivo XML de destino. Por último, debemos rellenar el elemento <last_updated> del archivo XML de destino con la fecha y la hora en que se actualizó el archivo por última vez.

 

Para conseguir nuestro objetivo debemos seguir estos pasos:

 

Paso nº1: seleccionar XSLT2 como lenguaje de transformación

Esto puede hacerse de dos maneras distintas:

Haciendo clic en el botón XSLT2 toolbar_xslt2 de la barra de herramientas.
Haciendo clic en el comando XSLT 2.0 del menú Resultados.

 

Paso nº2: agregar el archivo XML de origen a la asignación

El archivo XML de origen para la asignación está en esta ruta de acceso <Documentos>\Altova\MapForce2019\MapForceExamples\Tutorial\books.xml. Hay varias maneras de añadir un archivo XML de origen a la asignación:

Haciendo clic en el botón Insertar archivo o esquema XML ic-new-schema de la barra de herramientas.
Haciendo clic en el comando Archivo o esquema XML del menú Insertar.
Arrastrando el archivo XML desde el explorador de Windows hasta el panel de asignación.

 

Una vez añadido el archivo al panel de asignación, podrá ver su estructura, definida claramente de forma gráfica. En MapForce esta estructura se denomina componente de asignación o componente sencillamente. Puede expandir y contraer los elementos del componente con los iconos gui_collapse y gui_expand o pulsando las teclas + y - del teclado numérico.

tut-01-BAS

Componente de asignación

Para mover el componente a otra posición del panel de asignación basta con arrastrarlo por la barra de título. Para ajustar su tamaño haga clic en la esquina del componente ic-bestfity arrastre el puntero del ratón. También puede hacer doble clic en la esquema y MapForce ajustará el tamaño del componente automáticamente.

 

El nodo de nivel superior component_filerepresenta el nombre del archivo (en este caso concreto se trata del nombre del archivo XML). Los elementos XML de la estructura se representan con el icono component_element, mientras que los atributos XML se representan con el icono component_attribute.

 

Los pequeños triángulos que aparecen en los laterales del componente representan entradas (si están en el lado izquierdo) o salidas (si están en el lado derecho) de la asignación. En MapForce reciben el nombre de conectores de entrada y conectores de salida respectivamente.

 

Paso nº3: agregar el esquema XML de destino a la asignación

Para generar el archivo XML de destino usaremos un esquema XML ya existente aunque también podría ser un archivo dado por un colaborador o un esquema XML nuevo creado con XMLSpy, por ejemplo. Si no tiene un esquema para los datos XML, MapForce solicita que genere uno cada vez que se añade a la asignación un archivo XML que no cuenta con la referencia de esquema correspondiente.

 

Para nuestro ejemplo usamos el esquema XML <Documentos>\Altova\MapForce2019\MapForceExamples\Tutorial\library.xsd. Para agregarlo a la asignación hacemos lo mismo que hicimos para añadir el archivo XML de origen (es decir, hacemos clic en el botón Insertar archivo o esquema XML ic-new-schema de la barra de herramientas). Cuando MapForce solicite un archivo de instancia haga clic en Omitir.

dlg_xml_supply_instance

 

En este momento el diseño de asignación tiene este aspecto:

tut-01-02-BAS

 

Paso nº4: crear las conexiones

Por cada elemento <book> del archivo XML de origen, queremos crear un elemento <publication> nuevo en el archivo XML de destino. Por tanto, crearemos una conexión de asignación entre el elemento <book> del componente de origen y el elemento <publication> del componente de destino. Para crear la conexión de asignación basta con hacer clic en el conector de salida (el triángulo situado a la derecha del elemento <book>) y arrastrarlo hasta el conector de entrada del elemento <publication> del componente de destino.

 

A continuación MapForce crea automáticamente una conexión entre todos los elementos secundarios de <book> y los elementos del mismo nombre del componente de destino. Es decir, MapForce crea 4 conexiones simultáneamente. Esta característica recibe el nombre de conexión automática de secundarios equivalentes y puede deshabilitarse o configurarse, según corresponda.

tut-01-03-BAS

La función de conexión automática de secundarios equivalentes se puede habilitar y deshabilitar de dos formas distintas:

 

Haciendo clic en el botón Alternar la conexión automática de secundarios ic-conn-child de la barra de herramientas.
Haciendo clic en el comando Conectar automáticamente los secundarios equivalentes del menú Conexión.

 

Observe que MapForce resaltó en color naranja algunos conectores de entrada del componente de destino. Esto significa que estos elementos son obligatorios. Para garantizar la validez del archivo XML de destino es necesario indicar valores para estos elementos obligatorios:

 

Conectamos el elemento <category> del componente de origen con el elemento <genre> del componente de destino.
Conectamos el elemento <year> del componente de origen con el elemento <publish_year> del componente de destino.

 

Por último debemos indicar un valor para el elemento <last_updated>. Si pasamos el puntero por encima de su conector de entrada podemos ver que el elemento es de tipo xs:dateTime. Recuerde que para poder ver esta información rápida debe habilitar el botón Mostrar información rápida ic-show-lib-info de la barra de herramientas.

tut-01-05-BAS

También puede cambiar la configuración para que el tipo de datos siempre esté visible (haciendo clic en el botón Mostrar tipos de datos ic-show-types de la barra de herramientas).

Para obtener la fecha y hora actuales (es decir, el valor xs:dateTime) podemos usar una función XSLT de fecha y hora. Para buscar esta función XSLT tecleamos date en el cuadro de texto situado en la parte inferior de la ventana Bibliotecas. También puede hacer doble clic en un área vacía de la asignación y comenzar a teclear "current-date".

tut-01-06-BAS

Tal y como puede ver en la imagen anterior, al pasar el puntero por la segunda columna de la función, aparece su descripción. Para que esta descripción aparezca debe estar habilitado el botón Mostrar información rápida ic-show-lib-info de la barra de herramientas.

Para agregar la función a la asignación arrástrela hasta el panel de asignación y conecte su salida a la entrada del elemento <last_updated>.

tut-01-07-BAS

El diseño de asignación ya está terminado y pasa los datos del archivo de instancia books.xml (que tiene el esquema books.xsd) a un archivo nuevo llamado library.xml (que tiene el esquema library.xsd). Si hacemos doble clic en el título de un componente, aparece el cuadro de diálogo "Configuración del componente":

tut-01-10-BAS

Configuración del componente de origen

tut-01-11-BAS

Configuración del componente de destino

 

Paso nº5: validar y guardar la asignación de datos

El paso de validar la asignación de datos es opcional pero importante porque permite corregir errores y ver advertencias antes de ejecutar la asignación. Hay dos maneras de comprobar si la asignación es válida:

 

Haciendo clic en el comando Validar asignación del menú Archivo.
Haciendo clic en el botón Validar ic-val-mapping de la barra de herramientas.

 

La ventana Mensajes muestra los resultados de la validación:

gui_messages_window

Ventana Mensajes

Llegados a este también puede guardar la asignación en un archivo:

 

Haciendo clic en el comando Guardar del menú Archivo.
Haciendo clic en el botón Guardar toolbar_btn_save de la barra de herramientas.

 

Este diseño de asignación está en esta ruta de acceso: <Documentos>\Altova\MapForce2019\MapForceExamples\Tutorial\\BooksToLibrary.mfd. Es decir, a partir de ahora puede continuar trabajando con el archivo de asignación que creó siguiendo las instrucciones del tutorial o continuar con el archivo BooksToLibrary.mfd.

 

Paso nº6: vista previa del resultado de la asignación

MapForce puede ofrecer una vista previa de lo resultados de la asignación de datos. Para obtener esta vista previa basta con hacer clic en el botón Resultados situado en la parte inferior del panel de asignación. MapForce ejecuta la transformación de datos y muestra los resultados en el panel Resultados.

 

tut-01-08-BAS

Panel Resultados

Ahora puede ver en MapForce los resultados de la transformación.

 

La vista previa del panel Resultados no se guarda en disco, sino que MapForce crea archivos de resultados temporales. Para guardar en disco el archivo que muestra el panel Resultados, seleccione el comando Resultados Guardar el archivo de salida o haga clic en el botón Guardar resultado generado ic-save-sel-string de la barra de herramientas.

 

Si quiere que MapForce escriba los resultados en archivos finales directamente, haga clic en Herramientas | Opciones | Generales y marque la casilla Escribir directamente en archivos de salida finales. Sin embargo, no recomendamos marcar esta casilla mientras realiza el tutorial para evitar sobrescribir datos en los archivos del tutorial originales.

 

También puede crear una vista previa del código XSLT generado que realiza la transformación. Para ello basta con hacer clic en el botón XSLT2 situado en la parte inferior del panel de asignación.

tut-01-09-BAS

Panel XSLT2

Para generar y guardar el código XSLT2 en un archivo seleccione el comando Archivo | Generar código en | XSLT 2.0. Cuando se le solicite, seleccione la carpeta donde se debe guardar el código generado. Una vez generado el código, la carpeta de destino incluirá estos dos archivos:

 

1.Un archivo de transformación XSLT que se llama como el esquema de destino (p. ej. MappingMaptolibrary.xslt).
2.Un archivo DoTransform.bat, que sirve para ejecutar la transformación XSLT con RaptorXML Server (consulte https://www.altova.com/es/raptorxml.html para obtener más información).

 


© 2019 Altova GmbH