Cargando XML en MongoDB

Existen muchas situaciones en las que puede necesitar exportar datos de XML a MongoDB.

A pesar de que los formatos XML y JSON(B) utilizados en MongoDB tienen mucho en común, también presentan algunas diferencias que los hacen no intercambiables.

Por lo tanto, antes de enfrentarse a la tarea de exportar datos de XML a MongoDB, necesitará:

  1. Es necesario escribir sus propios scripts de análisis XML;
  2. Utilizar herramientas ETL.

Aunque los modelos de lenguaje modernos pueden escribir scripts de análisis bastante bien en lenguajes como Python, estos scripts tendrán un problema grave: no estarán unificados. Para cada tipo de archivo, los modelos de lenguaje modernos generarán un script separado. Si tiene más de un tipo de XML, esto ya crea problemas significativos en el mantenimiento de más de un script de análisis.

El problema anterior suele resolverse utilizando herramientas ETL especializadas. En este artículo, analizaremos una herramienta ETL llamada SmartXML. Aunque SmartXML también admite la conversión de XML a una representación relacional, solo veremos el proceso de carga de XML en MongoDB.

El XML real puede ser extremadamente grande y complejo. Este artículo es introductorio, por lo que analizaremos una situación en la que:

  1. Todo el XML tiene la misma estructura;
  2. El modelo lógico del XML es el mismo que el modelo de almacenamiento en MongoDB;
  3. Los campos extraídos no necesitan un procesamiento complejo;

Cubriremos esos casos más adelante, pero primero, examinemos un ejemplo sencillo:

XML

 

En este ejemplo, subiremos al MongoDB solo los campos que sirven a un propósito práctico, en lugar de todo el XML.

Crear un nuevo proyecto

Se recomienda crear un nuevo proyecto desde la interfaz gráfica. Esto creará automáticamente la estructura de carpetas necesaria y las reglas de análisis. Una descripción completa de la estructura del proyecto se puede encontrar en la documentación oficial.

Todos los parámetros descritos en este artículo se pueden configurar en modo gráfico, pero para mayor claridad, nos enfocaremos en la representación textual.

Además del archivo config.txt con la configuración del proyecto, job.txt para trabajos por lotes, el proyecto en sí consta de:

  1. Plantilla de vista interna interna SmartDOM, ubicada en la carpeta del proyecto templates/data-templates.red.
  2. Reglas para el procesamiento y transformación del SmartDOM en sí, ubicadas en la carpeta rules.

Consideremos la estructura de data-templates.red:

Plain Text

 

Nota

  1. El nombre sample es el nombre de la categoría y no importa.
  2. El marketing_data es el nombre de la subcategoría. Necesitamos al menos una subcategoría de código (subtipo).
  3. Los nombres de vista intermedios no requieren coincidencias exactas con los nombres de las etiquetas XML. En este ejemplo, usamos intencionalmente el estilo snake_case.

Extraer Reglas

Las reglas se encuentran en el directorio rules en la carpeta del proyecto.

Cuando trabajamos con MongoDB, solo nos interesan dos reglas:

  1. tags-matching-rules.red – establece las coincidencias entre el árbol de etiquetas XML y SmartDOM
  2. grow-rules.red – describe la relación entre los nodos de SmartDOM y los nodos reales de XML
Plain Text

 

La clave será el nombre del nodo en SmartDOM; el valor será una matriz que contiene las variantes de escritura del nodo del archivo XML real. En nuestro ejemplo, estos nombres son iguales.

Etiquetas Ignoradas

Para evitar cargar datos menores en MongoDB en el ejemplo anterior, creamos archivos en la carpeta ignores – uno por sección, nombrado según cada sección. Estos archivos contienen listas de etiquetas para omitir durante la extracción. Para nuestro ejemplo, tendremos un archivo sample.txt que contiene:

Plain Text

 

Como resultado, al analizar la morfología, la representación intermedia tomará la siguiente forma:

Plain Text

 

Tenga en cuenta que después del análisis morfológico, solo se muestra una representación mínima que contiene datos de los nodos encontrados en primer lugar.

Aquí está el archivo JSON que se generará:

JSON

 

Configurando Conexión a MongoDB

Dado que MongoDB no admite la inserción directa de datos HTTP, se requerirá un servicio intermedio.

Instalemos las dependencias: pip install flask pymongo.

El servicio en sí:

Python

 

Vamos a configurar los ajustes de conexión a MongoDB en el archivo config.txt (ver nosql-url):

Plain Text

 

Recuerda que MongoDB creará automáticamente una base de datos y una colección del mismo nombre si no existen. Sin embargo, este comportamiento puede causar errores, por lo que se recomienda deshabilitarlo de forma predeterminada.

¡Vamos a ejecutar el servicio en sí!

Python

 

Siguientehaz clic en Parse, luego Envía JSON a NoSQL.


Ahora conecta a la consola de MongoDB de cualquier manera conveniente y ejecuta los siguientes comandos:

Plain Text

 

El resultado debería lucir como sigue:

JSON

 

Conclusión

En este ejemplo, hemos visto cómo podemos automatizar la carga de archivos XML a MongoDB sin necesidad de escribir ningún código. Aunque el ejemplo solo considera un archivo, es posible dentro del marco de un proyecto tener una gran cantidad de tipos y subtipos de archivos con estructuras diferentes, así como realizar manipulaciones bastante complejas, como la conversión de tipos y el uso de servicios externos para procesar valores de campos en tiempo real. Esto permite no solo la descarga de datos desde XML, sino también el procesamiento de algunos de los valores a través de una API externa, incluido el uso de grandes modelos de lenguaje.

Source:
https://dzone.com/articles/loading-xml-into-mongodb