You are on page 1of 8

13.7.2020 Kursuse info – metshein.

com

 DOCUMENT TYPE DEFINITIONS  DTD KOOLITAJA

 VALIDEERIMINE  XML
MARIO METSHEIN

  30 MINUTES

03 XML atribuudid, valideerimine ja DTD


(Ülesanne 2)

XML atribuudid
Vaatame näitena ühte lihtsat sisestust, kus töötajal on kaks elemendi nimega <telefon> . Et neil vahet
teha, siis on võimalus need varustada siltidega tyyp="kodu" ja tyyp="too" .

<?xml version="1.0" encoding="UTF-8"?>


<töötajad>
<töötaja>
<enimi>Niina</enimi>
<pnimi>Sarvik</pnimi>
<email>niina.sarvik@zmail.com</email>
<telefon tyyp="kodu">+372 654 321</telefon>
<telefon tyyp="too">+372 456 123</telefon>
</töötaja>
</töötajad>

Neid silte nimetatakse XML puhul atribuutideks, mille väärtus on alati jutumärkides. Jutumärgidena lähevad
arvesse nii kahekordsed (“) kui ka ühekordsed (‘) ning lisatakse alati alustava sildi sisse. Elementidel võib olla
vajadusel ka mitu atribuuti. Näiteks kui soovime lisada

<?xml version="1.0" encoding="UTF-8"?>


<töötajad>
<töötaja>
<enimi>Niina</enimi>
<pnimi>Sarvik</pnimi>
<email>niina.sarvik@zmail.com</email>
<telefon tyyp="kodu">+372 654 321</telefon>
<telefon tyyp="too">+372 456 123</telefon>
<pilt allikas="img/nsarvik.jpg" laius="250" korgus="350" />
</töötaja>
</töötajad>

Reeglina palju atribuute pole väga hea mõte – selle asemel tasuks võib-olla mõelda näiteks uute siltide
lisamisele.

Valideerimine ja koodi treppimine


Valideerimise mõte on kontrollida, kas kood on korrektne. Internetiühenduse puhul on hea võimalus seda
kontrollida mõne online tööriista abil. Näiteks codebeautify.org/xmlvalidator. Kopeeri oma kood ja kliki
“Validate“. Kui koodis oli midagi valesti, siis antakse sellest läbi veateadete märku. Paranda kõik vead, kuni
https://www.metshein.com/kursus/# 1/8
13.7.2020 Kursuse info – metshein.com

tuleb “Valid XML” teade.

Eelpool väljatoodud lingi aadressilt leiate kindlasti veel teisigi kasulikke tööriistu. Üks nende seast korrastab
näiteks XML koodi codebeautify.org/xml-formatter-beautifier. Sina sisesta oma kood ja kui klikid
“Beautify/Format” trepitakse su kood kenasti ära.

DTD (Document Type Definitions)


Eelpool kontrollisime just, kas XML dokument on õigesti koostatud ning ei esine süntaksi vigu. Kuid see pole
alati piisav. Reaalselt töötava XML struktuuri jaoks tuleb lisada reeglid. Selleks on kaks võimalust:

DTD (Document Type Definition)


XSD (XML Schema Definition)

DTD on vanem meetod reeglite kirjutamiseks, mille abil saad määrata struktuurelemendid, attribuudid ning
nende väärtused. Seevastu XSD võimaldab juba palju rohkemat ja keerulisemaid valideerimise reegleid.
Kuna DTD on ikka veel kasutuses ja tegelikult algajale lihtsam mõista, siis teeme algust just sellega.

DTD ja Eclipse IDE


Siit punktist edasi saab koodi kirjutada kenasti suvalise tekstiredaktoriga kirjutada ja veebilehitsejaga
https://www.metshein.com/kursus/# 2/8
13.7.2020 Kursuse info – metshein.com
Siit punktist edasi saab koodi kirjutada kenasti suvalise tekstiredaktoriga kirjutada ja veebilehitsejaga
vaadata. Aga kui soovime sügavamat kontrolli, siis peaksime kasutama mõnda paremat programmi. Kuna ise
olen Eclipse IDE pooldaja, siis jätkan sellel suunal. Ehk loo uus projekt File>New>Project…

Ja uued failid loo File>New>Other ning avanenud aknast leia üles XML

DTD reeglite loomine samas dokumendis


DTD omad täiesti erinevat süntaksit ning seda on võimalik kirja panna otse XML dokumenti või täiesti eraldi
seisva failina. Eraldi faili kirjutades, saame sama reeglid lihtsamini hallata ja vajadusel ka teiste XML failidega
ühendada. Samas failis olevat koodi on alguses lihtsam kirjutada. DTD reeglid lisame kohe pärast XML rida.
Ära tuleb märkida, milline on juur-element.

i
https://www.metshein.com/kursus/#
i 3/8
13.7.2020 Kursuse info – metshein.com
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE töötajad[
<!--siia reeglid-->
]>

<töötajad>
<töötaja>
<enimi>Niina</enimi>
<pnimi>Sarvik</pnimi>
<email>niina.sarvik@zmail.com</email>
<telefon tyyp="kodu">+372 654 321</telefon>
<telefon tyyp="too">+372 456 123</telefon>
<pilt allikas="img/nsarvik.jpg" laius="250" korgus="350" />
</töötaja>
</töötajad>

DTD reeglid elementide jaoks


Seame kõigepealt reeglid elementidele. Siinkohal tuleb kasutada süntaksit <!ELEMENT elemendiNimi
(reeglid) > . Näiteks meie juur-elemendile järgneb 1 laps-element. Seega saamegi kirjutada, et <töötajad>
elemendil on üks laps <töötaja> .

<!DOCTYPE töötajad[
<!ELEMENT töötajad (töötaja) >
]>

Kontrollimiseks teeme Eclipse IDE programmis parema kliki aknas ja valime Validate.

https://www.metshein.com/kursus/# 4/8
13.7.2020 Kursuse info – metshein.com
Kui kõik on korras, tuleb teade, et ei leitud vigu (no errors and warnings). Aga lisame töötajaid rohkem.
Peaksid nägema kohe veateadet. Kui ei näe, siis vali jälle Validate.

Milles viga? Me seadsime reegli, et pärast juur-elementi tuleb üks element. Aga kui lisame rohkem, siis
oleme reeglit rikkunud. Ehk kui me soovime juur-elemendile üks ja rohkem lapsi, siis kasutame pluss (+)
märki.

<!DOCTYPE töötajad[
<!ELEMENT töötajad (töötaja+) >
]>

Valideeri ja vigu ei tohi enam olla. Kirjutame edasi reeglid <töötaja> elemendi laps-elementide jaoks. Pane
tähele, et ma lisasin lõppu kolmanda töötaja, kellel puudub pilt ja reeglis kasutasin küsimärki (?). See
tähendab, et pildi lisamine on valikuline. Ehk pilt ei pea polema. Valideeri!

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE töötajad[
<!ELEMENT töötajad (töötaja+) >
<!ELEMENT töötaja (enimi, pnimi, email, telefon+, pilt?) >
]>

<töötajad>
<töötaja>
<enimi>Niina</enimi>
<pnimi>Sarvik</pnimi>
<email>niina.sarvik@zmail.com</email>
<telefon tyyp="kodu">+372 654 321</telefon>
<telefon tyyp="too">+372 456 123</telefon>
https://www.metshein.com/kursus/# 5/8
13.7.2020 Kursuse info – metshein.com
yyp
<pilt allikas="img/nsarvik.jpg" laius="250" korgus="350" />
</töötaja>
<töötaja>
<enimi>Ülle</enimi>
<pnimi>Doos</pnimi>
<email>ylle.doos@zmail.com</email>
<telefon tyyp="kodu">+372 754 321</telefon>
<telefon tyyp="too">+372 996 123</telefon>
<pilt allikas="img/ydoos.jpg" laius="250" korgus="350" />
</töötaja>
<töötaja>
<enimi>Mari</enimi>
<pnimi>Maasikas</pnimi>
<email>mari.maasikas@zmail.com</email>
<telefon tyyp="kodu">+372 333 321</telefon>
<telefon tyyp="too">+372 896 123</telefon>
</töötaja>
</töötajad>

Et keelata elemendi sees järgmine element ning lubada ainult tekstilist sisu kasutame märksõna #PCDATA.
Kui elemendil andmeid pole, siis kasutad võtmesõna EMPTY

<!DOCTYPE töötajad[
<!ELEMENT töötajad (töötaja+) >
<!ELEMENT töötaja (enimi, pnimi, email, telefon+, pilt?) >
<!ELEMENT enimi (#PCDATA) >
<!ELEMENT pnimi (#PCDATA) >
<!ELEMENT email (#PCDATA) >
]>

DTD reeglid atribuutide jaoks


DTD atribuutide puhul kasutame süntaksit <!ATTLIST elemendiNimi atribuudiNimi andmetüüp
nõutavus>. Atribuutide reeglid on soovitav koos hooida elementide reeglitega, et vajadusel need kiiresti
üles leida.

<!DOCTYPE töötajad[
<!ELEMENT töötajad (töötaja+) >
<!ELEMENT töötaja (enimi, pnimi, email, telefon+, pilt?) >
<!ELEMENT enimi (#PCDATA) >
<!ELEMENT pnimi (#PCDATA) >
<!ELEMENT email (#PCDATA) >

<!ELEMENT telefon (#PCDATA) >


<!ATTLIST telefon tyyp (kodu | too | sober) #REQUIRED >

]>

Antud atribuudi reegli koostamisel kasutasin püstmärgi ( | ) märki, mis tähendab VÕI. Ehk kui ma soovin
telefoni kirja panna, siis tüübina tuleb valida üks nendest. Lõpus on kasutatud võtmesõna #REQUIRED, mis
annab märku, et antud atribuudi kasutamine on kindlasti kohustuslik. Vastand sellele võtmesõnale oleks
#IMPLIED, mis seab atribuudid soovituslikuks.

Pildi atribuutide reeglite seadmiseks, kasutame märksõna CDATA, mis lubab tekstiväärtusi. Aadressi puhul
kasutasin võimalust määrata vaikimisi väärtus jutumärkide vahel.
https://www.metshein.com/kursus/# 6/8
13.7.2020 Kursuse info – metshein.com

<!DOCTYPE töötajad[
<!ELEMENT töötajad (töötaja+) >
<!ELEMENT töötaja (enimi, pnimi, email, telefon+, pilt?) >
<!ELEMENT enimi (#PCDATA) >
<!ELEMENT pnimi (#PCDATA) >
<!ELEMENT email (#PCDATA) >

<!ELEMENT telefon (#PCDATA) >


<!ATTLIST telefon tyyp (kodu | too | sober) #REQUIRED >

<!ELEMENT pilt EMPTY>


<!ATTLIST pilt allikas CDATA "img/noimage.jpg" >
<!ATTLIST pilt laius CDATA #REQUIRED >
<!ATTLIST pilt korgus CDATA #REQUIRED >

]>

DTD reeglite loomine eraldi dokumendis


Kui DTD reegleid on vaja kasutada ka teistes dokumentides, siis loome selle ikka eraldi faili. DTD reeglid
jäävad samaks aga nüüd tuleb antud failile lihtsalt viidata:

<!DOCTYPE töötajad SYSTEM "harjutus02.dtd">

Viide algab kenasti DOCTYPE’iga, mis võib olla privaatne või avalik. Privaatne tähistatakse võtmesõnaga
SYSTEM ja avalik võtmesõnaga PUBLIC. Ja see koodiosa lisatakse pärast XML dokumendi süntaksit.

XML fail

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE töötajad SYSTEM "harjutus02.dtd">
<töötajad>
<töötaja>
<enimi>Niina</enimi>
<pnimi>Sarvik</pnimi>
<email>niina.sarvik@zmail.com</email>
<telefon tyyp="kodu">+372 654 321</telefon>
<telefon tyyp="too">+372 456 123</telefon>
<pilt allikas="img/nsarvik.jpg" laius="250" korgus="350" />
</töötaja>
</töötajad>

DTD fail

<?xml version="1.0" encoding="UTF-8"?>


<!ELEMENT töötajad (töötaja+) >
<!ELEMENT töötaja (enimi, pnimi, email, telefon+, pilt?) >
<!ELEMENT enimi (#PCDATA) >
<!ELEMENT pnimi (#PCDATA) >
<!ELEMENT email (#PCDATA) >

<!ELEMENT telefon (#PCDATA) >


<!ATTLIST telefon tyyp (kodu | too | sober) #REQUIRED >

<!ELEMENT pilt EMPTY>


https://www.metshein.com/kursus/# 7/8
13.7.2020 Kursuse info – metshein.com
<!ATTLIST pilt allikas CDATA "img/noimage.jpg" >
<!ATTLIST pilt laius CDATA #REQUIRED >
<!ATTLIST pilt korgus CDATA #REQUIRED >

Ülesanne 2
Loo esimesest ülesandest koopia ja salvesta uue nimega.
Täienda XML andmeid teise kontaktiga ning lisada atribuudid vastavalt töö ja kodu (ära kasuta
täpitähti).
Kasuta Eclipse IDE (või mõnda oma valitud programmi) programmi ning loo DTD dokument, mis ei luba
valesti andmeid lisada. Lisa kontroll:
et saaks lisada rohkem õpilasi
määra, et õpilastele saab lisada ainult viis sinu poolt määratud elementi ning kontakte rohkem kui üks
määra, et kõik väljad oleksid kohustuslikud
määra, et kontakti atribuudid oleksid kohustuslikud
Jälgi et mõlemas dokumendis on kommentaarid oma nime ja kuupäevaga

https://www.metshein.com/kursus/# 8/8

You might also like