Het gebruik van XML is net als het gebruik van objecten niet meer weg te denken in moderne softwareontwikkelplatformen. Ontwikkelaars komen XML tegenwoordig in vele verschijningsvormen tegen.
XML is een de facto standaard voor allerlei soorten configuratiebestanden en veel data wordt in de vorm van XML aangeboden. Ook webservices gebruiken het XML-formaat in de vorm van SOAP voor de berichtuitwisseling. Deze toepassingen zijn echter nog maar het topje van de ijsberg. In dit artikel staan we stil bij de verschillende gereedschappen die softwareontwikkelaars ter beschikking hebben voor het gebruik van XML-data bij het programmeren. In het kader ‘Meta-opmaaktaal’ wordt ingegaan op de basissyntax van XML-documenten voor de belangrijkste XML-standaarden van het W3C (World Wide Web Consortium).
Koppelformaat
Een van de redenen voor de groei van het aantal XML-toepassingen de afgelopen jaren is dat het formaat bij uitstek geschikt is om gestructureerde data te beschrijven. XML-data is zelfbeschrijvend. Aan de naamgeving van de elementen kun je aflezen wat de betekenis is van hun inhoud. Dat betekent wel dat de programmeur moet zorgen voor logische naamgeving. Verder heeft de data een logische en hierarchische structuur die zowel voor mensen als software leesbaar is. Aan zo’n formaat bestaat veel behoefte. XML-data bestaat uit tekst en alle computersystemen en programmeertalen zijn in staat dat soort data in te lezen en weg te schrijven. Daardoor is het een uitstekend formaat om heterogene systemen te koppelen en informatie te laten uitwisselen. Een nadeel van XML is dat het vrij breedsprakig is. Er zijn veel karakters nodig voor het beschrijven van de data. Dit nadeel weegt echter over het algemeen echter niet op tegen de voordelen van het gebruik.
Parsers
XML-data moet eerst worden ingelezen, voordat een applicatie ermee aan de gang kan gaan. Dit gebeurt door een softwarecomponent die de ‘XML parser’ wordt genoemd. Bij het inlezen kan de parser controleren of de data wel het juiste formaat heeft. Het benaderen van XML-data voor het programmeren kan op drie manieren. Oorspronkelijk werd de data door de parser ingelezen en omgezet in een hierarchische boomstructuur in het geheugen. Uit onvrede met dit model kwamen ontwikkelaars met een alternatief: het ‘push parser model’. Onlangs deed ook de ‘pull parser’ zijn intrede (hier wordt later op ingegaan).
Sinds de publicatie van de XML-standaard wordt er gebruik gemaakt van de DOM API (Document Object Model Application Programming Interface). Bij het DOM wordt een XML-document eerst in zijn geheel in het geheugen geladen en kan het daarna met behulp van de functies van de DOM API gelezen en bewerkt worden. Dit is een uitermate flexibele manier en is in veel programmeeromgevingen geïmplementeerd. Het is echter tijdrovend en vereist veel code. Ook is het laden van een document voor sommige toepassingen een vrij zinloze actie. Als je alleen maar wilt weten welke waarde het eerste element in het XML-document heeft is het jammer dat je daarvoor het hele document moet laden.
Push en pull parsers
Een oplossing hiervoor kwam tot stand via een nieuwsgroep waar softwareontwikkelaars die met XML werkten elkaar ontmoetten. Zij waren ontevreden met het DOM en zochten een oplossing. De Simple API for XML (SAX) was geboren. In SAX genereert de XML-parser events richting de applicatie bij het lezen van de verschillende onderdelen van een XML-document. De applicatie moet er dan voor zorgen dat zij functies klaar heeft staan om deze gebeurtenissen van de parser op te vangen. SAX is voor bepaalde toepassingen veel beter geschikt en sneller dan DOM. Een nadeel is echter dat de controle niet bij de applicatie, maar bij de parser ligt. Applicaties moeten bij SAX klaarstaan om te reageren, maar ze kunnen niet initiëren. Het SAX-model werd al spoedig aanvaard door alle belangrijke spelers in de markt en is inmiddels wijdverspreid. De meeste parsers hebben zowel DOM- als SAX-ondersteuning.
Microsoft introduceerde met .NET een nieuw model voor het benaderen van XML-data. Met de ‘XmlReader class’ kunnen applicaties gericht vragen om bepaalde data uit XML-documenten zonder deze eerst in het geheugen te laden (zoals bij DOM) of klaar te staan om events van de parser op te vangen (zoals bij SAX). Met XMLReader hebben de applicaties de controle. Het duurde niet lang of Sun Microsystems kwam met de StAX-specificatie (Streaming API for XML), ook een pull parser. Ook in StAX krijgt de applicatie de controle over de gang van zaken. Welke API in een bepaalde applicatie het meest geschikt is, hangt sterk af van de gewenste functionaliteit. Bij alleen ‘lees’-acties liggen de push- en pull-modellen het meest voor de hand, waarbij het pull-model leidt tot eenvoudiger applicaties. In deze varianten is het echter niet mogelijk XML-documenten of delen daarvan aan te maken. Als dat gewenst is ben je aangewezen op de DOM,
Willem Koppenol
Woordenlijst
XML = Extensible Markup Language is een standaard voor het definiëren van formele opmaaktalen voor de representatie van gestructureerde gegevens in de vorm van platte tekst. Deze representatie is leesbaar voor de machine en de mens.
SOAP = Simple Object Access Protocol is een computerprotocol dat wordt gebruikt voor communicatie tussen verschillende componenten.
Syntax = grammatica van een programmeertaal.
Parser = een parser is een computerprogramma of een component van een programma dat de grammaticale structuur van een invoer volgens een vastgelegde grammatica analyseert (parseert). Een parser zet ingevoerde tekst om in een datastructuur.
DOM = het Document Object Model is een objectgeoriënteerde benadering van html- en xhtml-bestanden.
API = een Application Programming Interface biedt een programmeur een verzameling definities op basis waarvan een computerprogramma kan communiceren met een ander programma of onderdeel.
Event = situatie of conditie waarvan het optreden wordt gebruikt als aanzet (trigger) of initiator (event-driven) van bijvoorbeeld een proces of onderdeel van een werkstroom.
Class = een class is in objectgeoriënteerde terminologie de logische definitie van een object en een verzameling objecten met veel gelijke kenmerken.
Tag = een commando in een document dat duidelijk maakt hoe het document of dat deel van het document moet worden gezien.
Meta-opmaaktaal
XML is een W3C-standaard en een meta-markuptaal. Het woord meta duidt erop dat XML een taal is waarin andere XML-talen worden beschreven. De namen van de tags in XML liggen standaard niet vast, maar zijn vrij te kiezen. Door de namen van de tags en hun onderlinge structuur wel vast te leggen definieer je een XML-vocabulaire. Dit is wat in de praktijk het meest gebeurt. Voor allerlei XML-toepassingen zijn honderden XML-vocabulaires vastgelegd. Voorbeelden zijn XHTML (strikte XML-versie van HTML), WML (Wireless Markup Language) en SVG (Standardized Vector Graphics). De taal bestaat uit een kleine kern en wordt omringd door een aantal uitbreidingen voor specifieke toepassingsgebieden, zoals XML-Schema, XSLT, Xpath en Xquery.
Kern en toepassingsgebieden
De kern van XML legt de syntaxregels vast waaraan XML-documenten moeten voldoen. Zo moet ieder document één root element hebben. Daarnaast bestaat een document uit verschillende ‘nodes’ (onderdelen). Tags moeten netjes worden genest en een begintag moet altijd worden afgesloten met een eindtag. Een document dat voldoet aan de basis-syntaxregels van XML wordt een ‘well-formed’ XML-document genoemd.
In XML Schema leg je de structuur en naamgeving van andere XML-documenten vast: zogenoemde vocabulaires. Door XML-documenten te baseren op een schema kunnen ze gevalideerd worden. De naamgeving en plaats van de tags is in dergelijke documenten strikt omschreven. Een document dat voldoet aan een XML Schema wordt een ‘valid’ XML-document genoemd.
XSLT (XML Stylesheet and Transformation Language) is een vocabulaire die vooral gebruikt wordt om documenten op te maken voor een bepaald outputmedium, zoals een browser, printer of een mobiele telefoon. Deze documenten bevatten regels die aangeven hoe elementen uit het brondocument moeten worden getransformeerd. Veel softwareontwikkelaars ervaren XSLT in het begin als lastig, omdat het op regels gebaseerde programmeermodel nogal afwijkt van wat gebruikelijk is.
XPath is een specificatie die erop is gericht door XML-documenten te navigeren en er waarden uit op te vragen. Het navigeren met XPath kun je tot op zekere hoogte vergelijken met de manier waarop je door een mappenstructuur navigeert. XPath wordt gebruikt in XSLT, DOM en XQuery.
XQuery is de nieuwste loot aan de XML-standaardenboom. Zoals de naam al suggereert is XQuery een vraagtaal voor XML-data. Nu steeds meer data in de vorm van XML beschikbaar komt wordt het belang van een krachtige vraagtaal steeds groter. XPath laat het bij ingewikkelder queries afweten. Qua syntax lijkt XQuery op de welbekende SQL-vraagtaal voor relationele data, maar dan met een XML-sausje. De verwachting is dat XQuery de komende jaren een steeds belangrijker rol zal spelen.