Robert Bouma (2002)
R2D2: Van XML naar Database
Master's thesis, Rijksuniversiteit Groningen.
[ Paper (PDF, 683 kb) ]

1. Inleiding

Tegenwoordig wordt er steeds meer gebruik gemaakt van XML. In deze markup-taal kan data opgeslagen worden die normaliter opgeslagen wordt in een database, maar ook data die minder geschikt zijn om in databases opgeslagen te worden. Hierbij valt te denken aan data die minder gestructureerd zijn door bijvoorbeeld het ontbreken van gegevens. Mede daarom is het tegenwoordig wellicht geen slecht idee om over te gaan op het opslaan van gegevens in het XML-formaat.

Voor het zoeken in gegevens is het daarentegen gemakkelijker om gebruik te maken van databases. Omdat deze al lange(re) tijd bestaan, zijn de zoekmogelijkheden hierin ondertussen goed uitgekristalliseerd. Bij XML-documenten is dat nog niet helemaal het geval en vaak grijpt men dan toch weer terug op meer conventionele zoekmethoden. Daarnaast ondersteunen deze bestaande pakketten ook steeds vaker de mogelijkheid om data te exporteren naar XML-bestanden.

Aan de andere kant ontstaan er ook steeds meer applicaties die de functionaliteit van bestaande relationele database management systemen (RDBMS) overnemen en deze rechtstreeks toepassen op XML-bestanden. Hierdoor hoeft niet meer een vertaalslag gemaakt te worden van XML naar relationele database (RDB) en andersom.

Bij het lezen over deze onderwerpen, ontstaat bij mij een aantal vragen. Allereerst is er de vraag wat handiger is: bestanden in XML-formaat laten staan of omzetten in een RDB-systeem. En direct er achteraan: als je een XML-document wil omzetten naar een RDB-systeem, op welke manier kan dit dan het beste? Is het überhaupt mogelijk om een XML-document goed over te zetten naar een RDB-systeem?

Op deze vragen wil ik proberen een antwoord te geven in deze scriptie. Hiervoor heb ik een onderzoeksvraag opgesteld die tweeledig is:

Waarom zou je een XML-document omzetten naar een RDB-systeem en niet als XML-document bewaren èn hoe kan een XML-document omgezet worden in een RDB-systeem?

De reden waarom ik juist hiernaar wil kijken, heeft te maken met mijn interesse in dit gebied en de ervaring die ik de afgelopen jaren heb opgedaan met het werken met databases.

Omdat er al veel bestaande applicaties zijn die werken met RDB is het interessant om te kijken of deze applicaties dusdanig aan te passen zijn dat ze ook kunnen werken met XML. Dit zou een betere oplossing zijn dan deze applicaties opnieuw te ontwerpen en te implementeren. Daarnaast is men gewend aan de huidige applicaties en het in gebruik nemen van nieuwe applicaties brengt een nieuw leertraject met zich mee.

Het omzetten van XML naar een RDB kan echter problemen opleveren. Een RDB verwacht dat de data die erin opgeslagen wordt goed gestructureerd is. XML kan echter minder gestructureerd zijn. Voor het omzetten wil ik gebruik maken van de DTD (Document Type Description). Ik wil een algoritme ontwerpen dat deze DTD uitleest en een structuur oplevert. Met behulp van de gevonden structuur kan vervolgens de RDB-structuur opgezet worden. In deze RDB-structuur kan tenslotte de XML-data opgeslagen worden. Ik wil nagaan in hoeverre dit problemen oplevert en, nog interessanter, in hoeverre deze eventuele problemen opgelost kunnen worden.

Dit is een erg ruim probleem. Om een aantal problemen dat ik tegen kan komen het hoofd te bieden stel ik dan ook grenzen aan de soort data die ik wil gebruiken. Allereerst wil ik mij vooral richten op data met archieffunctie. Dat wil zeggen data die niet vaak gewijzigd hoeven te worden maar enkel geraadpleegd of, waarvan in ieder geval de structuur niet veelvuldig aangepast hoeft te worden. De reden hiervoor is dat het ontwerpen van een goede onderhoudsmodule al een klus op zich is en dit wil ik dan ook niet opnemen in deze scriptie.

Daarnaast wil ik me vooral bezighouden met datagerichte XML-documenten en niet met documentgerichte XML-documenten. Datagericht wil zeggen dat de data goed gestructureerd zijn en weinig gemengd voorkomt (geen regels in de DTD als (element | #PCDATA)) en waarin volgorde minder van belang is. Voorbeelden hiervan zijn bijvoorbeeld beurskoersen en adresboeken. In zekere zin dus data die al een zeker mate van RDB-eigenschappen in zich hebben. Documentgerichte XML heeft als kenmerken dat de structuur minder strak is, dat er wel veel gemengde data in voorkomen en waarin volgorde vaak wel van duidelijk belang is. Hierbij valt bijvoorbeeld te denken aan artikelen, toneelstukken of boeken in XML-formaat. Ik richt mij dus vooral op de structuur van de data en minder op de inhoud.

Om deze vragen te beantwoorden, is het nuttig om te werken met een praktijkvoorbeeld. Hiertoe wil ik een applicatie bouwen. Deze applicatie zal gebruikt kunnen worden om XML-documenten om te zetten naar RDB. Daarnaast zal hierin ook gepoogd worden om in zekere mate een onderhoudsmodule op te nemen, voor het onderhoud van de data. Deze module zal een zogenaamde webapplicatie worden en zal gebouwd worden in PHP en MySQL. De applicatie zelf wil ik in Perl ontwerpen.