XMLGrundernaValideringDTD
[ Hem ] Allmänt ASP XML SQL ADO HTML CSS VB Java Design Karta
Grunderna XSL Dynamiska sidor XML i praktiken

DTD

DTD filens konstruktion

Nedan är en liten DTD fil:

<!ELEMENT products (product+)>
<!ELEMENT product (code,price,amount)>
<!ELEMENT code (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT amount (#PCDATA)>

Den kan tolkas som:
Rotnoden måste heta products och skall innehålla mist en product nod.
Product noden måste innehålla code, price och amount noder, men bara en av varje.
code, price och amount noderna består av teckendata

DTD beståndsdelar

En DTD kan bestå av tre olika saker:

  • ELEMENT
    Säger vilka tags som godkänns och hu de skall nästas

  • ATTLIST
    Säger vilka attribut en tag har

  • ENTITY
    Makron som innehåller fördefinierade värden

ELEMENT

Bestämmer tags och hur de skall användas.

<!ELEMENT firstname (#PCDATA)>

betyder att det finns ett element (tag) med namnet firstname, som består av textdata (PCDATA). Taggen får inte ha undernoder. Ex:

<firstname>Putte</firstname>

är OK, medan

<firstname>
   <veryfirst>Kalle</veryfirst>
   <other>Erik</other>
</firstname>

inte uppfyller DTD:ns krav

<!ELEMENT person (firstname, lastname)>

betyder att elementet person inte har eget data utan skall ha två undernoder med namnen fisrtnname och lastname (i nämnd ordning). Ex:

<person>
   <firstname>Kalle</firstname>
   <lastname>Eriksson</lastname>
</person>

Man kan sedan använda kompletterande tecken:

+ betyder att det får finnas flera, men måste finnas minst en - 1 eller flera
* betyder att det får finnas flera, men får även vara tomt - 0, en eller flera
? betyder att man inte måste ange detta - 0 eller 1
frånvaro av tecken betyder att det måste förekomma endast en - 1

Detta betyder att följande:

<!ELEMENT person (firstname,middlename?, lastname, phone+, adress*)>

betyder att en person måste ha ett förnamn, kan ha ett mellannamn, måste ha ett efternamn, måste 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.

<person>
   <firstname>Kalle</firstname>
   <lastname>Eriksson</lastname>
   <phone>123456</phone>
   <phone>321123</phone>
</person>

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 |

<!ELEMENT record ( title, ( artist | group ))>

betyder att noden record måste ha en undernod title och kan ha antingen en artist nod eller en group nod men inte bägge

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

ATTLIST

Attlist används för att specificera vilka attribut en tag har.

<!ELEMENT song (#PCDATA)>
<!ATTLIST song length CDATA #IMPLIED>

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:

<song length="4.22">Do, Re, Mi</song>
<song length="too long">Do, Re, Mi</song>
<song>Do, Re, Mi</song>

Är samtliga korrekta enligt den ATTLISt som skrevs ovan

<!ATTLIST song length CDATA #REQUIRED>

betyder däremot att length måste anges. Detta medför att med denna DTD beskrivining är inte ovanstående XML fragment korrekt.

<!ATTLIST person sex (M | F) #REQUIRED>

betyder att person taggens sex attribut måste vara M eller F och måste anges

Om en tag har flera attribut skrivs dessa i samma ATTLIST

<!ATTLIST song length CDATA #REQUIRED
                rating (good | bad | ugly) #IMPLIED
                type CDATA "rock"
                extra CDATA #FIXED "no reason">

Betyder att song taggen måste ha ett length attribut,
kan ha ett rating attribut som i så fall måste vara något av alternativen good, bad eller ugly
och kan ha en type attribut som kommer att få defaultvärdet rock om det inte anges
Det finns dessutom ett attribut med namnet extra som alltid har värdet no reason vad än vi försöker ställa in i XML filen.

Fölljande nyckelord förekommer i en ATTLIST

#IMPLIED -
inte obligatoriskt

#REQUIRED
obligatoriskt

#FIXED "ett värde"
attributet kommer alltid att ha det värde som finns specificerat

"värde"
attributet kommer att ha som defaultvärde det värde som här specificerats

ENTITY

Används för att förbestämma värden (makron)

<!ENTITY adress "West East Street">

betyder att det finns ett fördefinierat namn adress som har värdet West East Street. Detta kan vara användbart i websammanhang då man kan göra t.ex. följande:

<!ENTITY logo "images/logo.gif">

vilket gör att man kan använda &logo; var som helt i XML datat och detta kommer att ersättas med images/logo.gif. 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.

En annan variant av ENTITY är följande:

<!ENTITY % alternativ "ja | nej | kanske">

Detta används närmast tillsammans med ATTLIST och gör att man kan skriva

<!ATTLIST what answer (%alternativ;) #REQUIRED>

vilket gör att man måste använda något av alternativen som specificerats i alternativ ENTITYN

 

  ValideringStudera själv på nätet
Grunderna
XML filer
Mer om XML filer
Datat i XML
Validering
DTD
Studera själv på nätet
Mer om ELEMENT
Mer om ENTITY
Mer om ATTLIST
Rekursivt data
Övningar
Som nästa...


Top
< Validering Studera själv på nätet>
© Anders Enges, Vörå 2002  | 29.09.01 19:49 Visa asp koden