4. De Document Type Definition

Een valid (geldig) XML-document is een well-formed XML-document, waarvan de structuur eenduidig vastligt.
Die structuur kan je beschrijven in een DTD, document type definition, of in een XML-schema.

4.1. Een DTD voorzien

DTD was de eerste vorm van schemadocument, maar het bevat enkele storende beperkingen; zo kan je bv. geen restricties, voorwaarden op de mogelijke waarden leggen. Vandaar dat W3C XML-schema voorstelde als opvolger van DTD.
DTD's worden echter nog steeds gebruikt, dus bekijken we ze even.

Een DTD kan intern of extern zijn.

4.2. De structuur van een DTD

Elementen zijn de belangrijkste onderdelen zowel van XML als van HTML. Een element kan in beide attributen hebben en in de inhoud kunnen speciale tekens in de vorm van entiteiten voorkomen.

4.2.1. Elementen

Elk element wordt beschreven met <!ELEMENT elementNaam (type of kindelementen)>
Je begint met het document element en je daalt steeds verder in de structuur af.

  • Bij een element dat kindelementen bevat, staan tussen de haakjes de kindelementen in volgorde en met een komma tussen
  • Bij een element dat enkel gegevens bevat, staat tussen de haakjes #PCDATA, wat parsed character data betekent, tekst die door de parser (browser) geïnterpreteerd wordt. Letterlijke tekst is #CDATA. Weet je niet wat de inhoud is, dan gebruik je ANY zonder haakjes rond.

Bij een leeg element is de beschrijving: <!ELEMENT elementNaam EMPTY>

In de opsomming van kindelementen tussen de haakjes kan je achter de naam een symbool voor het aantal toevoegen:

SymboolAantal voorkomens
geenhet element komt precies één keer voor
?Het element komt 0 of 1 keer voor
*Het element komt 0, 1 of meer keren voor
+Het element komt 1 of meer keren voor

Eveneens in die opsomming kan je een voorwaarde opnemen: (...., (element1|element2), ...) = element1 OF element2 komt voor

Bekijk de broncode van dit voorbeeld met bijgevoegde dtd.

4.2.2. Attributen

De vermelding voor een attribuut is: <!ATTLIST bijElementNaam attribuutNaam atType atWaarde>
waarbij

  • atType meestal CDATA (tekst), ID (unieke ID) of een opsomming (waarde1|waarde2|waarde3) is;
  • atWaarde kan een standaardwaarde zijn, #REQUIRED (verplicht) of #IMPLIED (niet verplicht).

4.2.3. Entiteiten

Verder kan je in een DTD entiteiten voorzien, een woordje of afkorting voor een telkens terugkerend begrip of een speciaal teken.

bv: <!ENTITY vw "Volkswagen">
En in het XML-bestand komt dan: <merk>&vw;</merk>

XML bevat enkele voorgedefinieerde entiteiten: &lt; < – &gt; > – &amp; & – &quot; " en &apos; '