Werkbank Geesteswetenschappen

Startpagina > XML > Basisprincipes

Basisprincipes XML

XML maakt het mogelijk om codeersystemen te definiëren voor verschillende typen documenten, met behulp waarvan de inhoud die documenttypen op een gestructureerde manier kan worden opgeslagen. Daarbij spelen elementen en attributen een belangrijke rol.

Elementen

Een element is een tekstgedeelte dat is gemarkeerd met behulp van een XML-code. Het kan daarbij gaan om een complete tekst, een alinea, een woord of zelfs een gedeelte van een woord. In hoofdlijnen bestaan er twee soorten elementen: structuurelementen, die samenhangen met de structuur van de tekst en zgn. floating elementen, die op elke willekeurige plaats binnen een ander element kunnen voorkomen. Structuurelementen markeren de hiërarchische en de lineaire structuur van onderdelen van een tekst. XML-codes bestaan in principe uit een naam, omgeven door hoekige haakjes. Bij de sluitcode staat een slash direct achter het eerste hoekige haakje. In het documenttype 'krantenartikel' kunnen bijvoorbeeld diverse elementen worden onderscheiden. Het document als geheel is het element artikel:

<artikel>
... hier staat de tekst van het artikel ...
</artikel>

Daarbinnen kan bijvoorbeeld onderscheid worden gemaakt tussen de elementen 'kop', 'byline', 'plaats', 'intro' en 'tekst'. Deze elementen zijn ingebed in het element 'artikel' (en hebben daar dus een hiërarchische relatie mee) en hebben ten opzichte van elkaar een lineaire relatie (ze zijn opeenvolgend). N.B. Het maakt niet uit of XML-codes op aparte regels staan of dat ze op dezelfde regel staan als het tekstuele element dat ermee wordt gecodeerd. Dit is slechts een kwestie van lay-out.

<artikel>
<kop> Apple weer slachtoffer van eigen succes </kop>
<byline> Edward Deiters </byline>
<plaats> Amsterdam </plaats>
<intro>
Bekend patroon: 1. Apple introduceert zijn nieuwste gadget. 2. Binnen een paar dagen zijn er miljoenen van verkocht. 3. Het ding heeft een probleem.
</intro>
<tekst>
... hier staat de tekst van het artikel ...
</tekst>
</artikel>

De manier waarop een document kan worden gestructureerd met behulp van XML ligt niet vast. Als het voor de toepassing nuttig of nodig is dat er onderscheid wordt gemaakt tussen paragrafen, kan dat (hiërarschische) niveau worden toegevoegd:

<tekst>
<paragraaf>
... hier staat de tekst van paragraaf 1 ...
</paragraaf>
<paragraaf>
... hier staat de tekst van paragraaf 2 ...
</paragraaf>
(...)
</tekst>

En als het (bijvoorbeeld voor tekstueel onderzoek) relevant is dat er binnen de tekst van het artikel onderscheid wordt gemaakt tussen de inleiding van een artikel, het middenstuk en de afsluiting/conclusie, kunnen ook daar elementen voor worden gedefinieerd (waarbinnen dan weer paragrafen kunnen voorkomen). Als het belangrijk is dat efficiënt op namen kan worden gezocht, zal het element naam worden onderverdeeld in een aantal deel-elementen:

<naam><voornaam>Edward</voornaam><achternaam>Deiters</achternaam></naam>

Elementen die elkaar niet strikt hiërarchisch of lineair opvolgen, maar die op een willekeurige plaats in de tekst kunnen voorkomen, worden floating elements genoemd. In een krantenartikel zou het bijvoorbeeld relevant kunnen zijn om namen en citaten te markeren:

<paragraaf>
En de primeur blijkt nog van Nederlandse boden te komen ook. De Nederlandse tech-website <naam>Tweakers.net</naam> stel de maandag met een hittegevoelige camera vast dat de nieuwe <naam>iPad</naam> aanzienlijk warmer werd dan zijn voorganger. <citaat>'Dat nieuws werd eerst alleen opgepikt door een aantal grote IT-sites'</citaat>, zegt <naam>Tweakers</naam>-redacteur <naam>Dimitri Reijerman</naam>.
</paragraaf>

Attributen

Met behulp van attributen kunnen bepaalde kenmerken van elementen worden gecodeerd. Attributen worden opgenomen als onderdeel van de start-tag. Attributen kunnen bijvoorbeeld worden gebruikt om kenmerken van het artikel (de 'metadata') weer te geven:

<artikel bron="De Pers" datum="22-03-2012" katern ="Eerst" onderwerp="consumentenzaken">
(...)
</artikel>

Attributen kunnen ook gebruikt worden om elementen te nummeren of om bijvoorbeeld het type van een naam aan te geven:

<paragraaf nr="3">
En de primeur blijkt nog van Nederlandse boden te komen ook. De Nederlandse tech-website <naam type="bedrijf">Tweakers.net</naam> stel de maandag met een hittegevoelige camera vast dat de nieuwe <naam type="product">iPad</naam> aanzienlijk warmer werd dan zijn voorganger. <citaat>'Dat nieuws werd eerst alleen opgepikt door een aantal grote IT-sites'</citaat>, zegt <naam type="bedrijf">Tweakers</naam>-redacteur <naam type="persoon">Dimitri Reijerman</naam>.
</paragraaf>

Vrije of vaste documentstructuur

Zoals hierboven al duidelijk is geworden, is de structuur van een document in principe naar wens uitbreidbaar. Ook de namen die je gebruikt voor de codes zijn vrij (uiteraard is het in de meeste gevallen aan te raden om betekenisvolle namen te gebruiken). Een XML-document is welgevormd ( well-formed) als het voldoet aan de algemene basisregels, zoals

  • een beginmarkering start met '<' en stopt met '>'. Een eindmarkering start met '</' and stopt met '>';
  • een XML-document heeft altijd één overkoepelend element waarin alle andere zijn genest. Dit element is het root element of start element;
  • alle markeringen moeten goed genest zijn (overlappende elementen zijn niet toegestaan);
  • een XML-document is gebalanceerd (er is steeds een corresponderende eindmarkering voor elke beginmarkering);
  • alle namen van elementen en attributen zijn hoofdlettergevoelig (de markeringen <Paragraaf> en </paragraaf> zijn niet corresponderend);
  • attribuutwaarden moeten tussen quotes (") staan.

Het kan echter nadelen hebben om te werken met een geheel vrije documentstructuur. De belangrijkste daarvan zijn dat het kan leiden tot rommelig opgebouwde XML-documenten die minder goed verwerkbaar zijn en dat het aanbrengen van de coderingen foutgevoeliger en arbeidsintensiever is.

Voor veel specifieke (onderzoeks)projecten wordt dan ook gewerkt met een gespecificeerde datastructuur, die is vastgelegd in een zgn. document type definition (dtd) of een XML-schema. Deze bestaan uit een soort grammaticaregels die voor een bepaald documenttype ondermeer specificeren welke elementen verplicht zijn en welke optioneel, welke elementen meerdere malen achter elkaar mogen voorkomen, wat de hiërarchische en lineaire ordening van de elementen is en welke elementen als floating element mogen voorkomen (en waar dat het geval is). XML-documenten die volgens dergelijke gespecificeerde regels zijn opgebouwd worden 'valide' (valid) genoemd. Een eenvoudig voorbeeld van een dtd voor het (sterk versimpelde!) documenttype 'artikel', dat aansluit op de hierboven gegeven voorbeeld, zie je hieronder:

<?xml version="1.0"?>
<!-- XML-document voor documenttype krantenartikel -->
<!-- Eric Akkerman, 23-03-2012 -->
<!DOCTYPE artikel [
<!ELEMENT artikel        (kop, byline, plaats, intro, tekst) >
<!ELEMENT tekst          (paragraaf)+ >
<!ELEMENT paragraaf      (#PCDATA) | citaat | naam)*>
<!ELEMENT naam           (voornaam, tussenvoegsel?, achternaam)>
<!ELEMENT kop            (#PCDATA)>
<!ELEMENT byline         (#PCDATA)>
<!ELEMENT plaats         (#PCDATA)>
<!ELEMENT intro          (#PCDATA)>
<!ELEMENT citaat         (#PCDATA)>
<!ELEMENT voornaam       (#PCDATA)>
<!ELEMENT tussenvoegsel  (#PCDATA)>
<!ELEMENT achternaam     (#PCDATA)>
<!ATTLIST naam type CDATA #REQUIRED >
<!ATTLIST artikel bron CDATA #REQUIRED
                  bdatum CDATA #REQUIRED
                  katern CDATA #REQUIRED
                  onderwerp CDATA #REQUIRED>
<!ATTLIST paragraaf nr CDATA #REQUIRED >
]>

Korte toelichting: een komma tussen twee elementen geeft aan dat het ene element direct gevolgd moet worden door het andere. Een '+' geeft aan dat een element (of een groep elementen) meerdere keren achter elkaar kan voorkomen, een '*' geeft aan dat een element nul of meer maal kan voorkomen en een '?' dat een element nul of één keer kan voorkomen. (#PCDATA) geeft aan dat de inhoud van een element bestaat uit feitelijke tekst. Het element 'paragraaf' bestaat uit een mix van tekst en de elementen 'citaat' en 'naam'; met deze constructie wordt aangegeven dat de betreffende elementen op elke plaats in de lopende tekst kunnen voorkomen.

Een voorbeeld van een dtd voor literaire teksten (romans, verhalen, gedichten en toneelstukken) is XLDL van Ister-ORG.