 Källkoden för /anders.enges/xml/xml6.asp
 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.   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" -->