Procesar y generar archivos de forma dinámica

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

Inicio >  Tutoriales >

Procesar y generar archivos de forma dinámica

Este tutorial explica cómo leer datos de varios archivos XML de origen y escribirlos en varios archivos de destino en la misma transformación. Para comprender esta característica crearemos una asignación cuyos objetivos serán:

 

1.Leer datos de varios archivos XML ubicados en el mismo directorio.
2.Pasar cada archivo XML a un esquema XML nuevo.
3.Por cada archivo XML de origen generar un archivo XML de destino nuevo bajo un esquema nuevo.
4.Eliminar la declaración XML y la declaración de espacio de nombres de los archivos generados.

 

Tutorial_Process_and_Generate_Multiple_Files

Modelo abstracto de la transformación de datos

Como ejemplo usaremos tres archivos XML de origen, ubicados en la carpeta <Documentos>\Altova\MapForce2019\MapForceExamples\Tutorial\, que se llaman bookentry1.xml, bookentry2.xml y bookentry3.xml. Cada uno de ellos contiene los datos de un solo libro.

 

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd">
  <book id="1">
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <category>Fiction</category>
    <year>1876</year>
  </book>
</books>

bookentry1.xml

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd">
  <book id="2">
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <category>Fiction</category>
    <year>1912</year>
  </book>
</books>

bookentry2.xml

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd">
  <book id="3">
    <author>Herman Melville</author>
    <title>Moby Dick</title>
    <category>Fiction</category>
    <year>1851</year>
  </book>
</books>

bookentry3.xml

Los tres archivos XML de origen usan el esquema books.xsd, ubicado en la carpeta <Documentos>\Altova\MapForce2019\MapForceExamples\Tutorial\. Para pasar los archivos de origen a otro esquema XML usaremos el esquema library.xsd (ubicado en la misma carpeta). Una vez completada la transformación, la asignación generará tres archivos basados en este nuevo esquema (consulte los fragmentos de código que aparecen a continuación). También configuraremos la asignación para que los nombres de los archivos de salida sean publication1.xml, publication2.xml y publication3.xml. Recuerde que debemos eliminar la declaración XML y la declaración de espacio de nombres.

 

<library>
  <publication>
    <id>1</id>
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <genre>Fiction</genre>
    <publish_year>1876</publish_year>
  </publication>
</library>

publication1.xml

<library>
  <publication>
    <id>2</id>
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <genre>Fiction</genre>
    <publish_year>1912</publish_year>
  </publication>
</library>

publication2.xml

<library>
  <publication>
    <id>3</id>
    <author>Herman Melville</author>
    <title>Moby Dick</title>
    <genre>Fiction</genre>
    <publish_year>1851</publish_year>
  </publication>
</library>

publication3.xml

 

Paso nº1: preparar el archivo del diseño de asignación

Como punto de partida usamos la asignación BooksToLibrary.mfd de la carpeta <Documentos>\Altova\MapForce2019\MapForceExamples\Tutorial\. Se trata de la asignación que diseñamos en el tutorial Pasar datos XML a un esquema nuevo. Para empezar abra el archivo BooksToLibrary.mfd en MapForce y guárdelo en la misma carpeta con otro nombre.

 

Asegúrese de guardar la asignación nueva en la carpeta <Documentos>\Altova\MapForce2019\MapForceExamples\Tutorial\ porque hace referencia a varios archivos que están en esa carpeta.

mfdBooksToLibrary-BAS

BooksToLibrary.mfd

 

Paso nº2: configurar la entrada

Para que MapForce procese varios archivos de instancia XML haga doble clic en el título del componente de origen y escriba bookentry*.xml en el campo Archivo XML de entrada del cuadro de diálogo "Configuración del componente".

tut-02-01-BAS

Cuadro de diálogo "Configuración del componente"

El carácter comodín asterisco ( * ) del nombre de archivo indica que MapForce debe usar todos los archivos que tengan el prefijo bookentry- como entrada para la asignación. Como la ruta de acceso es relativa, MapForce buscará todos los archivos bookentry- que estén en el directorio del archivo de asignación. De todas maneras, también puede usar el carácter comodín * con rutas de acceso absolutas.

 

Paso nº3: configurar la salida

Para crear el nombre de archivo de cada archivo de salida usaremos la función concat. Esta función concatena (une) todos los valores que recibe como argumento.

 

1.Busque la función concat en la ventana Bibliotecas y arrástrela hasta el área de asignación. Esta función se añade a la asignación con dos parámetros predeterminados pero puede añadirle más parámetros si lo necesita. Haga clic en el símbolo Agregar parámetro ( gui_add_function_parameter ) situado dentro de la función y añádale otro parámetro más. El símbolo Eliminar parámetro ( gui_delete_function_parameter ) sirve para eliminar parámetros.

tut-02-02-BAS

2.Inserte una constante (con el comando de menú Insertar | Constante) que tenga el valor publication y con el tipo Cadena.

tut-02-03-BAS

3.Conecte la constante con el valor value1 de la función concat.

tut-02-04-BAS

4.Conecte el atributo id del componente de origen con el valor value2 de la función concat.

tut-02-05-BAS

5.Ahora busque la función get-fileext en la ventana Bibliotecas y arrástrela hasta el área de asignación. Cree una conexión entre el nodo de nivel superior del componente de origen (Archivo: books.xml) y el parámetro filepath de esta función. Después cree una conexión entre el resultado result de la función get-fileext y el valor value3 de la función concat. De este modo se extrae solamente la extensión (en este caso .xml) del nombre del archivo de origen.

tut-02-06-BAS

 

Llegados a este punto la función concat recibe como parámetros tres valores, que tras concatenarlos, crearán en nombre de los archivos de salida (p. ej. publication1.xml):

 

Partes del nombre de archivo de salida

Ejemplo

La constante publication aporta el valor de cadena constante publication.

publication

El atributo id del archivo XML de origen aporta un valor de identificador único para cada archivo. Esto evita que todos los archivos de salida tengan el mismo nombre.

1

La función get-fileext devuelve la extensión del nombre de archivo que se debe generar.

.xml

 

Ahora debemos dar a MapForce la orden de generar el nombre de archivo cuando se ejecute la asignación. Para ello haga clic en el botón btn_file o btn_file_stringdel componente de destino y seleccione el comando Usar nombres de archivo dinámicos dados por la asignación.

tut-02-07-ENT

 

MapForce ya tiene la orden de generar los archivos de instancia de forma dinámica, con el nombre dado por la asignación. En nuestro ejemplo el nombre se crea con la función concat. Por tanto, conectaremos el resultado de la función concat con el nodo Archivo: <dinámico> del componente de destino.

tut-02-08-BAS

Si hace doble clic en el título del componente de destino, observará que los campos Archivo XML de entrada y Archivo XML de salida están deshabilitados y que en el cuadro de texto aparece <nombres de archivos dados por la asignación>.

tut-02-09-BAS

 

Esto nos indica que los nombres de los archivos de instancia se obtienen de forma dinámica de la asignación y por ello ya no es necesario definirlos en la configuración del componente.

 

Por último, eliminaremos la declaración de esquema y de espacio de nombres del componente de destino. Para ello desactivamos las casillas Agregar referencia de esquema/DTD... y Escribir declaración XML en el cuadro de diálogo "Configuración del componente".

tut-02-10-BAS

 

Ahora puede ejecutar la asignación y consultar una vista previa de lo resultados y el nombre de los archivos que se generarán. Esta asignación genera varios archivos de salida y puede navegar por ellos con los botones de flecha situados en la esquina superior izquierda del panel Resultados (o seleccionando un archivo en la lista desplegable).

 

tut-02-11-BAS


© 2019 Altova GmbH