XML inladen in MongoDB

Er zijn veel situaties waarin u gegevens van XML naar MongoDB moet exporteren.

Ondanks het feit dat XML en JSON(B)-indelingen die in MongoDB worden gebruikt veel gemeen hebben, hebben ze ook een aantal verschillen die ze niet uitwisselbaar maken.

Daarom zult u voordat u de taak van het exporteren van gegevens van XML naar MongoDB onder ogen ziet, het volgende moeten doen:

  1. Uw eigen XML-analyse-scripts schrijven;
  2. ETL-tools gebruiken.

Hoewel moderne taalmodellen redelijk goed analyse-scripts kunnen schrijven in talen zoals Python, zullen deze scripts een ernstig probleem hebben — ze zullen niet eenduidig zijn. Voor elk bestandstype zullen moderne taalmodellen een apart script genereren. Als u meer dan één type XML heeft, leidt dit al tot aanzienlijke problemen bij het onderhouden van meer dan één analyse-script.

Het bovenstaande probleem wordt meestal opgelost met gespecialiseerde ETL-tools. In dit artikel zullen we kijken naar een ETL-tool genaamd SmartXML. Hoewel SmartXML ook het omzetten van XML naar een relationele representatie ondersteunt, zullen we alleen kijken naar het proces van het uploaden van XML naar MongoDB.  

De werkelijke XML kan extreem groot en complex zijn. Dit artikel is een inleidend artikel, dus we zullen een situatie ontleden waarin:

  1. Alle XML dezelfde structuur heeft;
  2. Het logische model van de XML is hetzelfde als het opslagmodel in MongoDB;
  3. Geëxtraheerde velden hebben geen complexe verwerking nodig;

We zullen die gevallen later behandelen, maar laten we eerst een eenvoudig voorbeeld bekijken:

XML

 

In dit voorbeeld zullen we in MongoDB alleen de velden uploaden die een praktisch doel dienen, in plaats van de volledige XML.

Maak een nieuw project aan

Het wordt aanbevolen om een nieuw project vanuit de GUI aan te maken. Hiermee wordt automatisch de benodigde mapstructuur en parseerregels aangemaakt. Een volledige beschrijving van de projectstructuur is te vinden in de officiële documentatie.

Alle parameters die in dit artikel worden beschreven, kunnen geconfigureerd worden in de grafische modus, maar voor duidelijkheid richten we ons op de tekstuele weergave.

Naast het config.txt bestand met projectinstellingen, job.txt voor batchwerk, bestaat het project zelf uit:

  1. Template van het interne tussenliggende SmartDOM weergave, gelegen in de projectmap templates/data-templates.red.
  2. Regels voor de verwerking en transformatie van SmartDOM zelf, gelegen in de rules map.

Laten we de structuur van data-templates.red bekijken:

Plain Text

 

Opmerking

  1. De naam sample is de naam van de categorie en doet er niet toe.
  2. De marketing_data is de naam van de subcategorie. We hebben minstens één code subcategorie (subtype) nodig.
  3. De namen van de tussenweergaven hoeven niet exact overeen te komen met de XML-tag namen. In dit voorbeeld hebben we opzettelijk de snake_case stijl gebruikt.

Extractieregels

De regels bevinden zich in de map regels in de projectmap.

Bij het werken met MongoDB zullen we alleen geïnteresseerd zijn in twee regels:

  1. tags-matching-rules.red — stelt de overeenkomsten in tussen de XML-tagstructuur en SmartDOM
  2. grow-rules.red — beschrijft de relatie tussen SmartDOM-nodes en echte XML-nodes
Plain Text

 

De sleutel zal de naam van de node in SmartDOM zijn; de waarde zal een array zijn met de node spellingvarianten uit het echte XML-bestand. In ons voorbeeld zijn deze namen hetzelfde.

Genegeerde Tags

Om te voorkomen dat er onbelangrijke gegevens in MongoDB worden geladen in het bovenstaande voorbeeld, maken we bestanden aan in de map negeert — één per sectie, vernoemd naar elke sectie. Deze bestanden bevatten lijsten met tags die tijdens de extractie moeten worden overgeslagen. Voor ons voorbeeld zullen we een sample.txt bestand hebben met:

Plain Text

 

Als resultaat zal de tussenweergave bij het analyseren van de morfologie de volgende vorm aannemen:

Plain Text

 

Merk op dat na morfologische analyse alleen een minimale weergave wordt getoond met gegevens van de eerst gevonden nodes. 

Hier is het JSON-bestand dat zal worden gegenereerd:

JSON

 

Verbinding configureren met MongoDB

Aangezien MongoDB geen directe HTTP-gegevensinvoer ondersteunt, is een tussenliggende service vereist.

Laten we de afhankelijkheden installeren: pip install flask pymongo.

De service zelf:

Python

 

We zullen de MongoDB verbindingsinstellingen instellen in het bestand config.txt (zie nosql-url):

Plain Text

 

Onthoud dat MongoDB automatisch een database en een collectie met dezelfde naam zal aanmaken als ze niet bestaan. Deze werkwijze kan echter fouten veroorzaken, en het wordt aanbevolen om dit standaard uit te schakelen.

Laten we de service zelf draaien:

Python

 

Volgendeklik op Parsenvervolgens Stuur JSON naar NoSQL.


Verbind nu met de MongoDB-console op een handige manier en voer de volgende commando’s uit:

Plain Text

 

Het resultaat zou er als volgt uit moeten zien:

JSON

 

Conclusie

In dit voorbeeld hebben we gezien hoe we het uploaden van XML-bestanden naar MongoDB kunnen automatiseren zonder dat we enige code hoeven te schrijven. Hoewel het voorbeeld slechts één bestand behandelt, is het mogelijk binnen het kader van één project een groot aantal typen en subtypen van bestanden met verschillende structuren te hebben, evenals vrij complexe manipulaties uit te voeren, zoals typeconversie en het gebruik van externe services om veldwaarden in realtime te verwerken. Dit maakt niet alleen het uitladen van gegevens uit XML mogelijk, maar ook de verwerking van sommige waarden via externe API’s, inclusief het gebruik van grote taalmodellen.

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