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:
- DTD-kod i en separat fil
- 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.