Carregando XML no MongoDB

Existem muitas situações em que você pode precisar exportar dados de XML para MongoDB.

Apesar do fato de que os formatos XML e JSON(B) usados em MongoDB têm muito em comum, eles também possuem uma série de diferenças que os tornam não intercambiáveis.

Portanto, antes de enfrentar a tarefa de exportar dados de XML para MongoDB, você precisará:

  1. Escrever seus próprios scripts de análise de XML;
  2. Usar ferramentas ETL.

Embora modelos de linguagem modernos possam escrever scripts de análise muito bem em linguagens como Python, esses scripts terão um problema sério — eles não serão unificados. Para cada tipo de arquivo, modelos de linguagem modernos gerarão um script separado. Se você tiver mais de um tipo de XML, isso já cria problemas significativos na manutenção de mais de um script de análise.

O problema acima geralmente é resolvido usando ferramentas ETL especializadas. Neste artigo, veremos uma ferramenta ETL chamada SmartXML. Embora o SmartXML também suporte a conversão de XML para uma representação relacional, veremos apenas o processo de upload de XML para MongoDB.

O XML real pode ser extremamente grande e complexo. Este artigo é um artigo introdutório, então vamos dissecar uma situação em que:

  1. Todo XML tem a mesma estrutura;
  2. O modelo lógico do XML é o mesmo que o modelo de armazenamento no MongoDB;
  3. Os campos extraídos não precisam de processamento complexo;

Vamos abordar esses casos mais tarde, mas primeiro, vamos examinar um exemplo simples:

XML

 

Neste exemplo, vamos carregar no MongoDB apenas os campos que têm um propósito prático, em vez de todo o XML.

Criar um Novo Projeto

É recomendado criar um novo projeto pela interface gráfica. Isso criará automaticamente a estrutura de pastas necessária e as regras de análise. Uma descrição completa da estrutura do projeto pode ser encontrada na documentação oficial.

Todos os parâmetros descritos neste artigo podem ser configurados em modo gráfico, mas para clareza, vamos nos concentrar na representação textual.

Além do arquivo config.txt com as configurações do projeto, job.txt para trabalho em lote, o próprio projeto consiste em:

  1. Modelo da visualização interna intermediária SmartDOM, localizado na pasta do projeto templates/data-templates.red.
  2. Regras para processamento e transformação do SmartDOM em si, localizadas na pasta rules.

Vamos considerar a estrutura de data-templates.red:

Plain Text

 

Nota

  1. O nome sample é o nome da categoria, e não importa.
  2. O marketing_data é o nome da subcategoria. Precisamos de pelo menos uma subcategoria de código (subtipo).
  3. Os nomes das visualizações intermediárias não precisam corresponder exatamente aos nomes das tags XML. Neste exemplo, usamos intencionalmente o estilo snake_case.

Regras de Extração

As regras estão localizadas no diretório rules na pasta do projeto.

Ao trabalhar com MongoDB, estaremos interessados apenas em duas regras:

  1. tags-matching-rules.red — define as correspondências entre a árvore de tags XML e o SmartDOM
  2. grow-rules.red — descreve a relação entre os nós do SmartDOM e os nós XML reais
Plain Text

 

A chave será o nome do nó no SmartDOM; o valor será um array contendo as variantes de grafia do nó do arquivo XML real. No nosso exemplo, esses nomes são os mesmos.

Tags Ignoradas

Para evitar carregar dados menores no MongoDB no exemplo acima, criamos arquivos na pasta ignores — um por seção, nomeados de acordo com cada seção. Esses arquivos contêm listas de tags a serem ignoradas durante a extração. Para o nosso exemplo, teremos um arquivo sample.txt contendo:

Plain Text

 

Como resultado, ao analisar a morfologia, a representação intermediária terá a seguinte forma:

Plain Text

 

Observe que após a análise morfológica, apenas uma representação mínima é mostrada contendo dados dos primeiros nós encontrados. 

Aqui está o arquivo JSON que será gerado:

JSON

 

Configurando a Conexão com o MongoDB

Como o MongoDB não suporta inserção direta de dados via HTTP, será necessário um serviço intermediário.

Vamos instalar as dependências: pip install flask pymongo.

O serviço em si:

Python

 

Vamos configurar as definições de conexão do MongoDB no arquivo config.txt (veja nosql-url):

Plain Text

 

Lembre-se de que o MongoDB criará automaticamente um banco de dados e uma coleção com o mesmo nome se eles não existirem. No entanto, esse comportamento pode causar erros, e é recomendado desativá-lo por padrão.

Vamos executar o próprio serviço:

Python

 

Em seguidaclique em Parsedepois Enviar JSON para NoSQL.


Agora conecte-se ao console do MongoDB de qualquer maneira conveniente e execute os seguintes comandos:

Plain Text

 

O resultado deve ser semelhante ao seguinte:

JSON

 

Conclusão

Neste exemplo, vimos como podemos automatizar o upload de arquivos XML para o MongoDB sem precisar escrever nenhum código. Embora o exemplo considere apenas um arquivo, é possível, dentro do escopo de um projeto, ter um enorme número de tipos e subtipos de arquivos com diferentes estruturas, assim como realizar manipulações bastante complexas, como conversão de tipo e o uso de serviços externos para processar valores de campos em tempo real. Isso permite não apenas a descarga de dados de XML, mas também o processamento de alguns dos valores via API externa, incluindo o uso de grandes modelos de linguagem.

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