Document Type Definition: razlika između inačica

Izbrisani sadržaj Dodani sadržaj
Nema sažetka uređivanja
(Nema razlike inačica)

Inačica od 21. kolovoza 2006. u 08:33

DTD je stariji način određivanja pravila strukture XML dokumenta. U zaglavlju XML dokumenta navodi se oznaka DTDa prema pravilima kojeg je dokument formatiran. Za vrijeme kreiranja XML dokumenta, kreator koristi DTD kako bi formirao XML dokument prema odgovarajućim pravilima. Svaki korisnik tog XML dokumenta koristeći odgovarajući DTD zna na ispravan način interpretirati sadržaj XML dokumenta. Također primjenom pravila iz DTDa osoba koja kreira novi XML dokument može provjeriti da li ga je na ispravan način formirala.

Sintaksa DTDa

XML blokovi sadržaja

Sa stajališta DTDa svaki XML document sastoji se od od slijedećih tipova blokova sadržaja:

  1. Elementi su osnovni blokovi XML dokumenta. Elementi mogu sadržavati druge elemente, sadržaj ili biti prazni.
  2. Atributi sadrže dodatne informacije o elementima. Navode se unutar početne oznake elementa.
  3. Eniteti su varijable koje definiraju često korišteni tekst. Postoje i reference na entitete. Jedna od najpoznatijih i najčešće korištenih je referenca na znak praznine  .
  4. PCDATA predstavlja tekst koji će parsirati XML parser. XML oznake na koje parser naiđe tretirati će kao posebne XML oznake i interpretirati ih na odgovarajući način.
  5. CDATA predstavlja tekst koji XML parser neće parsirati. XML oznake na koje parser naiđe tretirati će kao običan tekst i neće ih interpretirati kao XML oznake.

DTD elementi

Deklaracija svakog DTD elementa započinje oznakom <!ELEMENT i završava znakom >. Sastoji se od naziva elementa i opisa modela. Četiri su tipa sadržaja:

  • podaci su sadržaj najniže razine i unutar njega se navodi krajnji sadržaj. Model toga sadržaja označava se s #PCDATA.
  • elementi sadrže elemente podređene razine. Model toga sadržaja sastoji se od niza podređenih elemenata razdvojenih zarezima. Redoslijed niza je važan;
  • praznina ne sadrži niti podatke niti elemente. Model tog sadržaja označava se s EMPTY.
  • miješani sadržaj sastoji se od podataka i elemenata podređene razine. Model se sastoji od niza podređenih elemenata i od oznake #PCDATA.

Kardinalnost elemenata

Prilikom označavanja elemenata moguće je odrediti njihovu kardinalnost (broj pojavljivanja) na slijedeći način:

  • 0 ili 1 element označava se znakom "?". Npr <!ELEMENT Osoba (Ime, Prezime?)> označava da element "Osoba" mora imati 1 podređeni element "Ime", a može (ali ne mora) imati podređeni element "Prezime;
  • 0 ili više elemenata označava se znakom "*". Npr. <!ELEMENT KontaktPodaci (Telefon*, Email*)> označava da element "KontaktPodaci" može imati više podređenih elemenata "Telefon" i "Email";
  • 1 ili više elemenata označava se znakom "+". Npr. <!ELEMENT Student (UpisanaGodina+)> označava da element "Student" može imati jednu ili više upisanih godina na fakultetu;
  • alternative su razdvojene iznakom "|" i određuju da element mora sadržavati jedan od podelemenata iz liste. Npr. <!ELEMENT NačinPlaćanja(Gotovina | KreditnaKartica | Ček)> Označava da se plaćanje mora izvršiti gotovinom, kreditnom karticom ili čekom. Sukladno tome podređeni element mora biti jednog od navedenih tipova.

DTD atributi

Atributi u DTDu deklariraju se unutar ATTLIST deklaracije. Tip atributa može biti različit ovisno o sadržaju:

  • atributi čija vrijednost je niz znakova su tipa CDATA
  • atributi čija vrijednost mora biti jedna iz navedenog niza su tipa (vrijednost1|vrijednost2|..)
  • atributi čija vrijednost je jedinstveni broj su tipa ID
  • atributi čija vrijednost je jedinstveni broj nekog drugog elementa s tipa IDREF
  • atributi čija vrijednost je lista drugih jedinstvenih oznaka su tipa IDREFS
  • atributi čija vrijednost je ispravan XML naziv su tipa NMTOKEN
  • atributi čija vrijednost je lista ispravnih XML naziva su tipa NMTOKENS
  • atributi čija vrijednost je entitet su tipa ENTITY
  • atributi čija vrijednost je lista entiteta su tipa ENTITIES
  • atributi čija vrijednost je naziv notacije su tipa NOTATION
  • atributi čija vrijednost je predefinirana XML vrijednost su tipa xml:

Vrijednost atributa može biti:

  • ako u dokumentu nije zadana vrijednost, onda se podrazumijeva fiksno zadana vrijednost
  • #REQUIRED označava da vrijednost atributa mora biti navedena
  • #IMPLIED označava da je vrijednost atributa opcionalna i ne mora biti uključena
  • #FIXED označava da je vrijednost atributa fiksno određena

Deklariranje DTD modela

Deklariranje modela započinje korjenskim elementom. Nakon toga deklaracija se nastavlja s elementima neposredne niže razine. Postupak se ponavlja sve dok se ne dođe do elemenata najniže razine, a to su oni koji su izravno vezani uz podatke i označeni s oznakom #PCDATA.

Povezivanje DTDa s XMLom

Povezivanje vanjske DTD datoteke s XMLom provodi se navođenjem DOCTYPE definicije unutar XML dokumenta.

<!DOCTYPE root-element SYSTEM "filename">

Primjer korištenja

XML dokument

Dokument studenti.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Studenti SYSTEM "studenti.dtd" >
<Studenti>
	<Osoba>
		<Ime>Pero</Ime>
		<Prezime>Perić</Prezime>
	</Osoba>
	<Studij>Sistem analitičar</Studij>
	<Adresa>
		<Ulica>U gradu</Ulica>
		<Broj>247</Broj>
		<Grad>Zagreb</Grad>
	</Adresa>
	<KontaktPodaci>
		<Telefon>01-111-777</Telefon>
		<Telefon>098-111-1778</Telefon>
		<Email>pperic@zg.tel.hr</Email>
		<KorisnickoIme>pperic</KorisnickoIme>
	</KontaktPodaci>
</Studenti>

DTD dokument

Dokument studenti.dtd

<!ELEMENT Studenti (Osoba, Studij?, Adresa?, KontaktPodaci?)>
	<!ELEMENT Osoba (Ime, Prezime?)>
		<!ELEMENT Ime (#PCDATA)>
		<!ELEMENT Prezime (#PCDATA)>
	<!ELEMENT Studij (#PCDATA)>
	<!ELEMENT Adresa (Ulica?, Broj?, Grad?)>
		<!ELEMENT Ulica (#PCDATA)>
		<!ELEMENT Broj (#PCDATA)>
		<!ELEMENT Grad (#PCDATA)>
	<!ELEMENT KontaktPodaci (Telefon*, Email+, KorisnickoIme+)>
		<!ELEMENT KorisnickoIme (#PCDATA)>
		<!ELEMENT Telefon (#PCDATA)>
		<!ELEMENT Email (#PCDATA)>

Prednosti i nedostaci DTDa

Osnovni nedostatak DTDa je što sintaksna pravila kreiranja DTD dokumenta nisu usklađena s pravilima formiranja XML dokumenta. Zbog toga program koji interpretira XML dokumente mora znati parsirati pravila oba jezika. To znatno komplicira izgradnju takvih programa. Također i ljudi koji kreiraju DTD dokument moraju pored sintaksnih pravila XML dokumenata savladati i sintaksna pravila za formiranje DTD dokumenata.
DTDom se ne mogu precizno definirati pravila koja XML dokument treba zadovoljavati (npr. kardinalnost se može opisati samo na nivou "niti jedan", "jedan" ili "više elemenata", nije moguće precizno opisivanje tipa podataka (numerički znakovni,...)).
S druge strane, DTD je vrlo raširen i njegova sintaksa je dosta jednostavna za korištenje što krajnjim korisnicima pojednostavljuje rad.

Vanjske poveznice

Vodič kroz DTD