Bevezetés a DTD-be

Attribútumok létrehozása

Az előző szakaszban megismerhettük a DTD nyelv szintaxisának alapjait, hogy meghatározzuk az XML dokumentumaink szabályhalmazát. Láttuk, hogyan lehet meghatározni az elemnevek és elemtartalmak szabályait. Most megnézzük, hogyan lehet az attribútumokat és az attribútumértékeket definiálni a DTD-ben.

Az utolsó szakaszban egy DTD-t építünk a következő címjegyzék XML-jéhez:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<addressBook>
    <entry>
         <name>Clark Kent</name>
         <address>344 Clinton Street Metropolis</address>
         <phoneNr>55 50145</phoneNr>        
        <relationship/>
  </entry>
  <entry>
          <name>Bruce Wayne</name>
          <address>1007 Mountain Drive Gotham</address>
          <phoneNr>53 59333</phoneNr>  
          <relationship/>
   </entry>
</addressBook>

A „kapcsolat” elem (<relationship>) üres elem, amely nem tartalmaz adatot, ezért még nem értelmezhető. Most megtudjuk, hogyan adhatunk hozzá egy típus (type) attribútumot, amely információt tartalmaz a kapcsolat típusáról. A fenti XML-t leíró DTD-kód a következő:

1
2
3
4
5
6
7
<!DOCTYPE addressBook [
            <!ELEMENT addressBook (entry*)>
            <!ELEMENT entry (name, address, phoneNr, relationship)>
            <!ELEMENT name (#PCDATA)>
            <!ELEMENT address (#PCDATA)>
            <!ELEMENT phoneNr (#PCDATA)>
            <!ELEMENT relationship EMPTY> ]>


A következő DTD utasítás egy „type” nevű attribútumot határoz meg a „relationship” elemhez.

1
<!ATTLIST relationship type CDATA #REQUIRED>

Ennek az állításnak az összetevői:

<!

az attribútum definiálásának kezdete

ATTLIST

meghatároz egy attribútumlistát

relationship

meghatározza azt az elemet, amelyhez az attribútum tartozik

type

meghatározza az attribútum nevét

CDATA

meghatározza az attribútum tartalomtípusát, CDATA = „character data"

#REQUIRED

meghatározza, hogy ez az attribútum kötelező minden „relationship" elemben

az attribútum definiálásának vége

 

A DTD-k lehetővé teszik az attribútumok különböző tartalomtípusainak meghatározását. Karakteradat (CDATA) mellett más értékek is lehetségesek.

Bizonyos attribútumoknál célszerű előre definiált értékeket megadni. Ezt úgy tehetjük meg, ha a CDATA helyett az attribútum név után, zárójelben hozzáadjuk az előre definiált értékeket:

1
<!ATTLIST relationship type (private|work) #REQUIRED>

 

Egy attribútumlista egy elem több attribútumát tartalmazhatja. Az alábbi utasítások például meghatározzák a „first”, „second” és „title” attribútumokat a névelemben:

1
2
<!ATTLIST name first CDATA #REQUIRED second CDATA #REQUIRED
title CDATA #REQUIRED>


A #REQUIRED utasításnak köszönhetően minden itt definiált attribútum kötelező. Annak érdekében, hogy egy attribútum opcionális lehessen, a #REQUIRED szót ki kell cserélni #IMPLIED-ra, mint itt a „title” attribútum példájában:

<!ATTLIST name first CDATA #REQUIRED second CDATA #REQUIRED 
title CDATA #IMPLIED>