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 no MongoDB têm muitas semelhanças, eles também têm algumas 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 XML;
  2. Usar ferramentas ETL.

Embora os modelos de linguagem modernos possam escrever scripts de análise muito bem em idiomas como Python, esses scripts terão um problema sério — eles não serão unificados. Para cada tipo de arquivo, os 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, vamos analisar uma ferramenta ETL chamada SmartXML. Embora o SmartXML também suporte a conversão de XML para uma representação relacional, vamos apenas analisar o processo de carregamento de XML no MongoDB.  

O XML real pode ser extremamente grande e complexo. Este artigo é um artigo introdutório, então iremos analisar 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 fazer o upload no MongoDB apenas dos campos que servem a um propósito prático, em vez de todo o XML.

Criar um Novo Projeto

É recomendável criar um novo projeto pela GUI. 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 no 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 projeto em si consiste em:

  1. Modelo de visualização interna intermediária SmartDOM, localizado na pasta do projeto templates/data-templates.red.
  2. Regras para processamento e transformação do próprio SmartDOM, 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 de visualização intermediários não exigem correspondências exatas com os 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 o relacionamento 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, nomeado 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 a 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 configurações de conexão com o 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 é recomendável desativá-lo por padrão.

Vamos executar o serviço em si:

Python

 

Em seguidaclique em Analisare depois 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 se parecer com o 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, lidar com um grande número de tipos e subtipos de arquivos com estruturas diferentes, bem 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 o descarregamento de dados do XML, mas também o processamento de alguns valores por meio de API externa, incluindo o uso de grandes modelos de linguagem.

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