XML importeren (MySQL)

Uit De Vliegende Brigade
Ga naar: navigatie, zoeken

Er zijn verschillende manieren om XML-bestanden te importeren in MySQL. Het hangt van de situatie af.

De problemen

XML-bestanden brengen een paar uitdagingen met zich mee, als het om importeren gaat:

Hierarchisch

Data kan hierarchisch zijn, met een 1-op-veel-relatie tussen een node en subnodes. Oftewel nested data. Bij import kunnen subnodes serialised worden (dus meerdere waardes in 1 veld opslaan), of in aparte tabellen worden opgeslagen (voorbeeld MS-Access).

Context-afhankelijke tags

Benamingen van tags zijn vaak niet uniek, als ze binnen verschillende subnodes voorkomen. In een voorbeeld in de lente van 2018, kwam ik XML-data van Exact tegen, waarbij de Description-tag zo'n 10 keer voorkwam, steeds als een subsubnode. Je kunt tags dus niet context-vrij importeren.

Geen primaire sleutel

Subnodes hoeven geen primaire sleutel te hebben, en hebben dat in de praktijk vaak ook niet. Als je tijdens de import subnodes in aparte tabellen wilt onderbrengen, moet je vaak zelf zorgen voor een relatie met de bijbehorende hoofdnodes.

Inventaris

Algemeen

  • LOAD XML - Heel aardig, maar het kan niet overweg met subnodes. Zie LOAD XML (MySQL) voor details.
  • LOAD_FILE - Alternatief commando op LOAD DATA waarbij een bestand in 1 object wordt geladen. Kan interessant zijn, als je het parsen van XML 100% binnen MySQL wilt doen. Ik kreeg het zo snel niet aan de praat (lente 2018)
  • Transformeren: Het XML-bestand eerst transformeren middels XLST waarbij je sleutels aanbrengt in de subnodes. Daarna importeren
  • Parsen & importeren: Het XML-bestand eerst parsen met een script in bv. Python, inclusief transformatie. Daarna importeren
  • Parsen naar SQL-code: XML-bestand extern parsen (bv. Python), dat vervolgens SQL-code produceert, die je alleen maar hoeft te executeren
  • Importeren & parsen: Eerst importen in MySQL, bv. middels LOAD_FILE en daarna verwerken.
  • Toolkits: Bv. [Advanced XML Converter] (Windows).

Oplossing - Grote lijnen

De échte oplossing lijkt Parsen & importeren te zijn:

  1. XML-bestand flatten middels Python & XSL
  2. Platte bestand importeren, vermoedelijk middels LOAD XML.

Zie ook

Bronnen