Maak kennis met XML

ArticleCategory: [Artikel Kategorie]

Applications

AuthorImage:[Here we need a little image from you]

[Floris Lambrechts]

TranslationInfo:[Author and translation history]

original in en Floris Lambrechts

en to nl Floris Lambrechts

AboutTheAuthor:[�ber den Autor]

Ik ben al een paar jaar de 'beheerder' van LinuxFocus/Nederlands. Ik studeer voor 'industrieel ingenieur - electronica' in Leuven. Mijn tijd verspeel ik aan prutsen met Linux, PHP, XML en LinuxFocus, en daarnaast lees ik bv. ook nog boeken (op het moment bijvoorbeeld Stephen Hawking en Jef Raskin's 'The Human Interface'). En laat ik vooral mijn vriendin niet vergeten (dag Katrien)!

Abstract:[Here you write a little summary]

Dit is een korte introductie in XML. Je zult kennismaken met Eddie de meta-kat, de XML syntax politie en DTDs. Geen nood, alles wordt uitgelegd ;-)

ArticleIllustration:[This is the title picture for your article]

[Illustratie: xml]

ArticleBody:[Der eigentliche Artikel]

Introductie

In de zomer van 2001 kwamen een paar _LF_ editors samen in Bordeaux tijdens de LSM. Veel presentaties en discussies in de documentatie-groep aldaar gingen over hetzelfde: XML. Lange, onderhoudende uren kropen in het begrijpen wat XML nu eigenlijk is, wat de voordelen zijn en hoe die te gebruiken. Mocht je ge�nteresseerd zijn, dat is ook waar dit artikel over gaat.

Bij deze bedank ik graag Egon Willighagen en Jaime Villate, die me enthousiast hebben gemaakt voor XML. Dit artikel is lichtjes gebaseerd op de informatie in Jaime's artikelen, die je onderaan bij de links kunt terugvinden.

Wat is XML

Wij documentatie-mensen wisten allemaal wel ongeveer wat XML was. Het was toch een taal met een HTML-achtige syntax, meer bepaald een markup taal zoals SGML en (weeral) HTML, niet? Inderdaad. Maar daarmee is niet alles gezegd.
XML heeft een paar eigenschappen die het een nuttig data-formaat maken voor heel uiteenlopende doelen. Het lijkt wel alsof je met XML de meest ingewikkelde dingen kunt, en dat het toch eenvoudig te lezen blijft (voor mensen) en eenvoudig te parsen (voor computers). Hoe is dat mogelijk? We onderzoeken het...

Eddie, de meta kat

Om te beginnen, XML is een markup taal. Documenten die je schrijft in een markup taal bevatten twee dingen: data, en metadata. Als je weet wat 'data' precies is, laat het me weten, maar tot het zover is ga ik het hebben over de metadata ;). Eenvoudig gesteld: metadata is extra informatie die een betekenis, of context, toevoegt aan de data zelf . Een voorbeeld: neem de zin 'Mijn kat heet Eddie'. Mensen zoals wij weten nu dat 'kat' een naam is van een diersoort, en dat 'Eddie' zijn naam is. Computer programma's daarentegen, zijn niet menselijk en weten dit allemaal niet. Nu kunnen we dus metadata gebruiken om betekenis toe te voegen aan de data (uiteraard gebruiken we XML syntax!):

�<zin>
���Mijn <dier>kat</dier> heet <naam>Eddie</naam>.
�</zin>

Nu kan zelfs een stom computerprogramma het verschil herkennen tussen de naam van een diersoort (kat) en een eigennaam (Eddie). We kunnen nu bijvoorbeeld een document genereren waarin alle namen blauw zijn, en alle diersoorten rood. XML maakt zo'n omzettingen heel gemakkelijk (het resultaat ziet er zo uit:)

�Mijn kat heet Eddie.

In theorie kunnen we alle opmaak-informatie (in dit geval de kleuren) in een apart bestand opslaan, een zogenaamde stylesheet. Al doende hebben we dan de opmaak van de inhoud gescheiden, iets wat door sommigen beschouwd wordt als de Heilige Graal van Webdesign TM. Maar tot nu toe hebben we eigenlijk nog niet veel bijzonders gedaan. Metadata toevoegen is namelijk iets wat markup talen al jaren kunnen. 'Dus,' dringt de vraag zich op, 'wat maakt XML dan zo speciaal?'

De syntax politie

Om te beginnen heeft XML een heel strenge syntax. Zo moet elke <tag> een afsluitende </tag> heben. [ Merk op: omdat het een beetje dom is om twee tags te schrijven <tag></tag> wanneer er niks tussen staat, kun je de tag ook meteen sluiten wanneer je hem opent, en alzo een paar minuten van je leven winnen, op de lange duur: <tag />. ]
Een andere regel is dat je tags niet mag 'mixen'. Je moet ze met andere woorden sluiten in dezelfde (omgekeerde!) volgorde dat je ze hebt geopend. Iets als het volgende is niet geldig:

<B> Vette tekst <I>Vette en schuine tekst </B> schuine tekst </I>

De syntax regels schrijven voor dat je de </I> tag sluit v��r je de </B> sluit.
En, opgepast, alle� elementen in een XML document moeten tussen tags staan (behalve de eerste en de laatste natuurlijk). Daarom hebben we in het voorbeeld hierboven de <zin> tags rond de zin gebruikt. Zonder die tags zouden sommige woorden in de zin niet tussen tags staan, en dat maakt de XML syntax politie goed kwaad, zoals zovele dingen.
Mozilla screenshot
Mozilla's syntax politie '@work' ...

Maar zo'n sterke politiemacht heeft natuurlijk zijn voordelen: ze bewaart de orde. De eenvoudige syntax maakt dat programma's heel makkelijk XML kunnen lezen. Bovendien is de data in XML documenten heel gestructureerd, zodat ook mensen het makkelijk kunnen schrijven en lezen.
Merk wel op dat de 'theoretische' voordelen van XML niet altijd opduiken in de praktijk. De huidige XML parsers bijvoorbeeld, zijn meestal verre van snel, en dikwijls heel groot. Dus misschien is XML helemaal niet zo makkelijk te lezen voor computers? Laten we het er gewoon bij houden dat het geen goed idee is om *alles* in XML te doen, gewoon omdat het mogelijk is. Toepassingen die dikwijls documenten moeten doorzoeken, of die heel grote documenten nodig hebben, zijn dikwijls niet zo geschikt voor XML. Maar dat betekent natuurlijk niet dat ze niet realiseerbaar zijn met XML!
Een goed voorbeeld van de kracht van XML, maar ook van de traagheid, is het feit dat je er databases in kunt schrijven (probeer d�t maar eens met HTML! :p) Dat is nu net wat Egon Willighagen heeft gedaan voor onze lokale LinuxFocus afdeling, zijn artikel hierover vind je onderaan bij de links. In dit geval verkozen we de flexibiliteit en uitbreidbaarheid van een eigen bestandsformaat boven pure snelheid (bijvoorbeeld met mySQL).
En nog over die strikte syntax: als je goede vriendjes wordt met de politie (de syntax checkers), kun je zelfs wat van je werk op hen afschuiven. Maar in dat geval zul je wel een DTD moeten schrijven...

De DTD

In het 'Eddie de meta-kat' voorbeeld hierboven hebben we onze eigen XML tags verzonnen. Uiteraard is zo'n daad van creativiteit niet naar de zin van de politie! De 'mannen in't blauw' willen weten wat je doet, hoe, wanneer, en (indien mogelijk) waarom. Wel, geen probleem, je kunt alles netjes uitleggen met de DTD...

Een DTD laat je toe om nieuwe tags 'uit te vinden'. Je kan er zelfs een heel nieuwe taal mee ontwerpen, zolang je maar de XML syntax resprecteert.
De DTD, of Document Type Definition, is een bestand met daarin de beschrijving van een XML taal. Eingelijk is het niets meer dan een opsomming van alle mogelijke tags, hun eventuele attributen, en de mogelijke combinaties. De DTD beschrijft wat je kan doen in je XML taal, en wat niet. Dus wanneer we praten over deze of gene 'XML taal', praten we eigenlijk over een specifieke DTD.

Zet de flikken aan het werk!

Soms zal de DTD je dwingen om op een bepaalde plaats een bepaalde tag te schrijven. Sommige tags zijn namelijk verplicht, zoals de begin- en eind-tag, of een tag met de titel van het document. Het leuke hieraan is dat er software bestaat (b.v. een emacs module) die de verplichte tags in jouw plaats schrijft.
Op die manier worden sommige delen van je documenten automatisch voor je ingevuld. Omdat de syntax zo strikt en duidelijk is, kan de DTD je als het waren leiden door het schrijfproces. En als je een fout maakt (bijvoorbeeld een tag vergeten te sluiten), dan brengt de politie je op de hoogte. Dus al bij al zijn de flikken nog niet zo slecht: in plaats van te roepen 'Je hebt het recht op stilzwijgen...', vertelt de XML syntax politie je vriendelijk over een 'Syntax error @ line xx : '... :)
En als je de politie het vuile werk laat opknappen, heb jijzelf natuurlijk meer tijd om je te concentreren op de inhoud.

In the mix

Een laatste mooie eigenschap van XML is dat je verschillende DTD's tegelijk kunt gebruiken. Je kunt dus in hetzelfde document verschillende data-types opnemen.

Dit 'mixen' gebeurt met xml namespaces. Je kunt bijvoorbeeld de DocBook DTD opnemen in je .xml document, in dit geval met de prefix 'dbk'.
Al de tags van DocBook staan dan ter beschikking in de volgende vorm: (aangenomen dat er een DocBook tag <gewoon_een_tag> bestaat:)

�<dbk:gewoon_een_tag> gewoon wat woorden </dbk:gewoon_een_tag>

Met het namespaces systeem kun je alle tags en alle attributen gebruiken van eender welke DTD. Dit opent een wereld van mogelijkheden, zoals je kunt ontdekken in het volgende hoofdstuk.

Beschikbare DTDs

Hier is een klein overzicht van een paar DTDs die nu al (gedeeltelijk) gebruikt worden.

Links

Het W3C, of World Wide Web Consortium
Ze hebben info over XML, MathML, CML, RDF, SVG, SOAP, XHTML, namespaces...
www.w3.org

Een paar dingen van Jaime Villate (de eerste twee in't Spaans):
Introductie tot XML
Hoe maak je HTML uit XML
LSM-slides

HTML tidy, het programma:
www.w3.org/People/Raggett/tidy

DocBook
www.docbook.org

Mozilla.org SVG project
www.mozilla.org/projects/svg

Relevante LinuxFocus articles:
LinuxFocus.org (/Nederlands) maken met XML en XSLT
PDF documenten maken met DocBook