JavaScript — Introduktion genom exempel

8.2 XML och DTD

För att definiera XML-kodens struktur samt namn på taggar och attribut, kan man använda DTD (Document Type Definition). I exemplet visas hur man skapar en DTD samt två akternativ till placering av DTD-koden:

  1. DTD-kod i en separat fil
  2. DTD-kod i samma fil som XML-koden

I båda fallen används en DOCTYPE-tagg, där man i den ena fallet refererar till filen med DTD-koden och i det andra fallet inkluderar hela DTD-koden.

27 min.

Sammanfattning

DTD (Document Type Definition) är ett enkelt språk, där man definierar de olika element och attribut som man inför i XML. Dels specificerar man vad de ska heta och dels hur elementen kan vara sammansatta av text eller andra element. Därmed specificerar man också den struktur som XML-koden ska ha.

Språket DTD består också av element, för att definiera de element och attribut som ska ingå i XML-koden. DTD har dock inte så många element och i exemplen används endast två.

<!ELEMENT ...>

I följande exempel definieras ett element med namnet elem. Vad det kan bestå av specificeras med ett reguljärt uttryck inom parentesen, där e1-e3 är andra element (som också måste specificeras med varsin ELEMENT-tagg). I exemplen används operatorerna ?, * och + för att ange hur ett element kan upprepas. Dessa operatorer kan användas på enskilda element eller ett helt uttryck inom en parentes. Operatorerna har samma betydelse som i reguljära uttryck.

I fallet då elementet är tomt, dvs inte har någon sluttagg, används EMPTY, som ska vara utan parentes.

Exempel Beskrivning
<!ELEMENT elem (e1, e2, e3)> elem har underelementen e1, e2 och e3 i den ordningen
<!ELEMENT elem (e1, (e2 | e3))> e1 och sedan e2 eller e3
<!ELEMENT elem (e1, e2?)> e1 och sedan e2 en eller ingen gång
<!ELEMENT elem (e1, e2*)> e1 och sedan upprepas e2 noll eller flera gånger
<!ELEMENT elem (e1, e2+)> e1 och sedan upprepas e2 en eller flera gånger
<!ELEMENT elem (e1, (e2 | e3)*)> e1 och sedan upprepas e2 eller e3 valfritt noll eller flera gånger (t.ex. e1 e2 e3 e3 e3 e2 e3)
<!ELEMENT elem (#PCDATA)> valfri text som innehåll mellan start- och sluttagg
<!ELEMENT elem EMPTY> element utan innehåll och sluttagg

<!ATTLIST ...>

I följande exempel definieras attribut för elementet elem. Man kan endast ha en ATTLIST per element, så om elementet har flera attribut, definieras samtliga i samma ATTLIST.

Exempel Beskrivning
<!ATTLIST elem attr CDATA #REQUIRED> Elementet elem har attributet attr med valfri text. Attributet måste finnas med.
<!ATTLIST elem attr CDATA #IMPLIED> Attributet kan uteslutas.
<!ATTLIST elem attr (one|two|three) #REQUIRED> Attributet måste innehålla något av värdena "one", "two" eller "three".
<!ATTLIST elem a1 CDATA #IMPLIED a2 CDATA #REQUIRED> Elementet elem har två attribut, kallade a1 och a2.
I detta fall kan a1 uteslutas, medan a2 måste förekomma.

Man kan också använda ett tredje element kallat ENTITY, för att definiera egna entiteter, men vi går inte in på det här.

Egna övningar

Översätt din strukturlista för väderprognosen, i föregående exempels övning, till en DTD-kod. Gör åtminstone någon del till ett attribut, så att du använder både ELEMENT och ATTLIST. Skriv sedan ett XML-dokument där du refererar till ditt DTD-dokument och skriver XML-kod för en påhittad väderprognos.

I mappen Test-övningen finns ett par dokument, där du kan skriva din kod.