Källkoden för /anders.enges/xml/xml6.asp
<!--#include file="../inc/navstuff.asp" -->
<h4>DTD filens konstruktion</h4>
<p>Nedan är en liten DTD fil:</p>
<div class="code"><!ELEMENT products (product+)><br>
   <!ELEMENT product (code,price,amount)><br>
   <!ELEMENT code (#PCDATA)><br>
   <!ELEMENT price (#PCDATA)> <br>
   <!ELEMENT amount (#PCDATA)><br>
</div>
<p>Den kan tolkas som:<br>
   Rotnoden måste heta <b>products</b> och skall innehålla mist en
   <b>product</b> nod.<br>
   <b>Product</b> noden måste innehålla <b>code</b>, <b>price </b>och
   <b>amount</b> noder, men bara en av varje.<br>
   <b>code</b>, <b>price</b> och <b>amount</b> noderna består av teckendata</p>
<h4>DTD beståndsdelar</h4>
<p>En DTD kan bestå av tre olika saker:</p>
<ul>
   <li><b>ELEMENT</b><br>
     Säger vilka tags som godkänns och hu de skall nästas<br>
     <br>
   </li>
   <li><b>ATTLIST</b><br>
     Säger vilka attribut en tag har<br>
     <br>
   </li>
   <li><b>ENTITY</b><br>
     Makron som innehåller fördefinierade värden</li>

   </ul>
<h4>ELEMENT</h4>
<p>Bestämmer tags och hur de skall användas.</p>
<div class="code"><!ELEMENT firstname (#PCDATA)></div>
<p>betyder att det finns ett element (tag) med namnet firstname, som består
   av textdata (PCDATA). Taggen får inte ha undernoder. Ex:</p>
<p><firstname>Putte</firstname></p>
<p>är OK, medan</p>
<p><firstname><br>
      <veryfirst>Kalle</veryfirst><br>
      <other>Erik</other><br>
   </firstname> </p>
<p>inte uppfyller DTD:ns krav</p>
<div class="code"><!ELEMENT person (firstname, lastname)></div>
<p>betyder att elementet <b>person</b> inte har eget data utan skall ha två
   undernoder med namnen fisrtnname och lastname (i nämnd ordning). Ex:</p>
<p><person><br>
      <firstname>Kalle</firstname><br>
      <lastname>Eriksson</lastname><br>
   </person> </p>
<p>Man kan sedan använda kompletterande tecken:</p>
<p><b>+</b> betyder att det får finnas flera, men måste finnas minst
   en - 1 eller flera<br>
   <b>*</b> betyder att det får finnas flera, men får även vara
   tomt - 0, en eller flera<br>
   <b>?</b> betyder att man inte måste ange detta - 0 eller 1<br>
   frånvaro av tecken betyder att det måste förekomma endast en
   - 1</p>
<p>Detta betyder att följande:</p>
<div class="code"><!ELEMENT person (firstname,middlename?, lastname, phone+, adress*)></div>
<p>betyder att en person <b>måste</b> ha ett förnamn, <b>kan </b>ha
   ett mellannamn, <b>måste </b>ha ett efternamn, <b>måste </b>ha telefon
   men kan även ha flera, kan ha en adress eller flera adresser men måste
   inte ha någon. Nedan är några exempel på XML data som
   uppfyller detta.</p>
<div class="code"><person><br>
      <firstname>Kalle</firstname><br>
      <lastname>Eriksson</lastname><br>
      <phone>123456</phone><br>
      <phone>321123</phone> <br>
   </person> </div>
<p>Om man kobinerar med komma(,) betyder det att elementen måste komma i
   den ordning som de satts in. Det finns även en annan möjlighet och
   det är att kombinera med |</p>
  
<div class="code">
   <!ELEMENT record ( title, ( artist | group ))></div>
   <p>betyder att noden <b>record</b> måste ha en undernod <b>title</b> och
     kan ha antingen en <b>artist </b>nod eller en <b>group</b> nod men inte <b>bägge</b></p>
   <p>Det finns mer att säga om DTD och ELEMENT, framför allt om ID och
     IDREFS, men för tillfället så nåjer vi os med detta</p>

<h4>ATTLIST</h4>
<p>Attlist används för att specificera vilka attribut en tag har.</p>
<div class="code"><!ELEMENT song (#PCDATA)><br>
   <!ATTLIST song length CDATA #IMPLIED></div>
<p>beryder att song taggen har ett attribut som heter length och som är av
   CDATA typ (text och/eller siffror). Det är inte obligatoriskt att ange
   detta attribut. EX:</p>
<p><song length="4.22">Do, Re, Mi</song><br>
   <song length="too long">Do, Re, Mi</song> <br>
   <song>Do, Re, Mi</song> </p>
<p>Är samtliga korrekta enligt den ATTLISt som skrevs ovan</p>
<div class="code"> <!ATTLIST song length CDATA #<b>REQUIRED</b>> </div>
<p>betyder däremot att length <b>måste</b> anges. Detta medför
   att med denna DTD beskrivining är inte ovanstående XML fragment korrekt.</p>
  
<div class="code">
   <!ATTLIST person sex (M | F) #REQUIRED>
   </div>
   <p>betyder att <b>person</b> taggens <b>sex</b> attribut måste vara <b>M</b>
     eller<b> F</b> och måste anges </p>
  
<p>Om en tag har flera attribut skrivs dessa i samma ATTLIST</p>
<div class="code"> <!ATTLIST song length CDATA #REQUIRED<br>
                   rating
   (good | bad | ugly) #IMPLIED<br>
                   type
   CDATA "rock"<br>
                   extra
   CDATA #FIXED "no reason"> </div>
<p>Betyder att song taggen måste ha ett <b>length</b> attribut, <br>
   kan ha ett <b>rating</b> attribut som i så fall måste vara något
   av alternativen <b>good</b>, <b>bad</b> eller <b>ugly </b><br>
   och kan ha en <b>type</b> attribut som kommer att få defaultvärdet
   <b>rock</b> om det inte anges<br>
   Det finns dessutom ett attribut med namnet <b>extra</b> som alltid har värdet
   <b>no reason</b> vad än vi försöker ställa in i XML filen.</p>
<p>Fölljande nyckelord förekommer i en ATTLIST</p>
<p>#IMPLIED -<br>
   inte obligatoriskt</p>
<p>#REQUIRED <br>
   obligatoriskt</p>
<p>#FIXED "ett värde"<br>
   attributet kommer alltid att ha det värde som finns specificerat</p>
<p>"värde"<br>
   attributet kommer att ha som defaultvärde det värde som här specificerats</p>
  
   <h4>ENTITY</h4>
<p>Används för att förbestämma värden (makron)</p>
<div class="code"><!ENTITY adress "West East Street"></div>
<p>betyder att det finns ett fördefinierat namn <b>adress</b> som har värdet
   <b>West East Street.</b> Detta kan vara användbart i websammanhang då
   man kan göra t.ex. följande:</p>
  
<div class="code"><!ENTITY logo "images/logo.gif"></div>
<p>vilket gör att man kan använda <b>&logo;</b> var som helt i XML
   datat och detta kommer att ersättas med <b>images/logo.gif. </b>Observera
   att man alltid måste sätta & före namnet och ett ; (semikolon)
   efter. Den vane HTML kodaren känner igen detta. Exakt samma system används
   i HTML för t.ex. &nbsp; som sätter in ett hårt mellanslag
   i texten.</p>
<p>En annan variant av ENTITY är följande:</p>
<div class="code"><!ENTITY % alternativ "ja | nej | kanske"></div>
<p>Detta används närmast tillsammans med ATTLIST och gör att man
   kan skriva </p>
  
<div class="code"> <!ATTLIST what answer (%alternativ;) #REQUIRED> </div>
<p>vilket gör att man måste använda något av alternativen
   som specificerats i alternativ ENTITYN</p>
<p> </p>
<!--#include file="../inc/footer.asp" -->