Definicija tipa dokumenta

S Vikipedije, slobodne enciklopedije


Definicija tipa dokumenta (engl. Document Type Definition, DTD) je skup deklaracija za obeležavanje koje definišu tip dokumenta kod jezika za obeležavanje iz SGML porodice markup language (SGML, XML, HTML).

DTD koristi tercijalnu formalnu sintaksu, koja deklariše precizno koji elementi i reference mogu da se pojave, i na kom mestu u dokumentu određenog tipa, kao i koji su sadržaj i atributi ovih elemenata. DTD takođe može da deklariše entitete koji mogu biti iskorišnjeni u instanci dokumenta. Svrha DTD-a (Document Type Definition) je da definiše dozvoljene gradivne elemente jednog XML dokumenta. Sa DTD-om, svaka vaš XML datoteka može nositi opis svog formata. Sa DTD-om, nezavisne grupe ljudi mogu se saglasiti da koriste standardni DTD za razmenu podataka. Vaša aplikacija može upotrebljavati standardni DTD kako bi proverila da su podaci, primljeni iz spoljašnjeg sveta validni. Takođe, možete koristiti DTD za verifikaciju sopstvenih podataka.

Primer DTD-a, pod imenom Newspaper (novine):

<
<!DOCTYPE NEWSPAPER [

<!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEAD (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)> 

<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED> 
<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>

]>

Povezivanje DTD-ova sa dokumentima[uredi | uredi izvor]

Definicija tipa dokumenta (DTD) definiše dozvoljene gradivne elemente XML dokuemnta.
Definiše strukturu dokumenta listom dozvoljenih elemenata i atributa.

DTD-ovi imaju dva tipa deklarazija:

  • opcionalni eksterni podskup
  • opcionalni interni podskup

Interna DTD deklaracija[uredi | uredi izvor]

Ukoliko je DTD deklarisan unutar samog XML fajla, potrebno je da bude u DOCTYPE definiciji sa sledećom sintaksom:

<!DOCTYPE root-element [element-declarations]> 
Пример XML документа ca интерним DTD:
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>

DTD napisan iznad je interpretiran na sledeći način:

  • !DOCTYPE note definiše da je osnova elementa ovog dokumenta note
  • !ELEMENT note definiše da note element sadrži četiri elementa: "to,from,heading,body"
  • !ELEMENT to definiše to element, i njegov tip, "#PCDATA"
  • !ELEMENT from definiše to element, i njegov tip, "#PCDATA"
  • !ELEMENT heading definiše to element, i njegov tip, "#PCDATA"
  • !ELEMENT body definiše to element, i njegov tip, "#PCDATA"

Eksterna DTD deklaracija[uredi | uredi izvor]

Ukoliko je DTD deklarisan u eksternom fajlu, potrebno je da bude u DOCTYPE definiciji, sa sledećom sintaksom:

<!DOCTYPE root-element SYSTEM "filename"> 

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

I ovo je datoteka "note.dtd", koja sadrži sledeći DTD:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

Gradivni elementi XML dokumenata[uredi | uredi izvor]

Iz DTD perspektive, svi XML dokumenti (i HTML dokumenti) su sačinjeni od sledećih gradivnih elemenata:

Elementi
Atributi
Entiteti
PCDATA
CDATA

Elementi[uredi | uredi izvor]

Elementi su gradivna osnova i XML i HTML dokumenata. Primeri HTML elemenata su "body" i "table". Primeri XML elemenata bi mogli biti "note" ili "message". Elementi mogu sadržati tekst, druge elemente ili biti prazni. Primeri praznih HTML elemenata su "hr", "br" i "img".

Primeri:

неки текст</body>

<message>неки текст</message>

Atributi[uredi | uredi izvor]

Atributi pružaju dodatne informacije o elementima.

Atributi su uvek postavljeni unutar taga za otvaranje elementa.
Atributi su uvek parnog formata naziv/vrednost.
"img" element koji sledi ima dodatne informacije o izvornoj datoteci:

<img src="computer.gif" />
Ime elementa je "img". Ime atributa je "src". Vrednost ovog atributa je "computer.gif". Pošto je sam element prazan, zatvoren je simbolom " /".

Entiteti[uredi | uredi izvor]

Neki karakteri imaju specijalno značenje u XML, kao što je znak manje od (<), koji definiše početak XML taga.

&nbsp Većina vas je upoznata sa HTML entitetom: " ". Ovaj "razmaknica bez prelamanja" entitet je korišćen u HTML-u za ubacivanje dodatnog razmaka u dokumentu.
Entiteti su prošireni kada je dokument obrađen od strane XML analizatora.

Sledeći entiteti su predefinisani u XML-u:
Referenca entiteta - - - -Karakter
&lt-------------------------------------<
&gt------------------------------------>
&amp--------------------------------&
&quot--------------------------------"
&apos---------------------------------'

PCDATA[uredi | uredi izvor]

PCDATA znači “procesuirani podaci sa karakterima
Posmatrajte potatke sa karakterima kao tekst koji se nalazi između taga za otvaranje i zatvanjanje u jednom XML elementu.

PCDATA je tekst koji će biti obrađen od strane analizatora.
Tekst će biti proveren, i pretražen za entitete i označavanje.

Tagovi unutar teksta će biti tretirani kao obeležavanje i entiteti će biti prošireni.

Međutim, obrađeni podaci sa karakterima neće sadržati &, <, ili > znakove; oni moraju biti predstavljeni preko & < i > entiteta, redom.

CDATA[uredi | uredi izvor]

CDATA znači “podaci sa karakterimaCDATA je tekst koji neće biti obrađen od strane analizatora. Tagovi unutar teksta NEĆEbiti tretirani kao obeležavanje i entiteti neće biti prošireni.


DTD – Elementi[uredi | uredi izvor]

Deklarisanje elemenata

U DTD-u, XML elementi su deklarisani pomoću deklaracije elementa, sa sledećom sintaksom:

<!ELEMENT element-name category>
или
<!ELEMENT element-name (element-content)>


Prazni elementi[uredi | uredi izvor]

Prazni elementi su deklarisani sa ključnom reči za kategoriju, EMPTY:

<!ELEMENT element-name EMPTY>

Primer:

<!ELEMENT br EMPTY>


XML primer:

<br />


Elementi sa obrađenim podacima sa karakterima[uredi | uredi izvor]

Elementi sadržani samo od obrađenih podataka sa karakterima su deklarisani sa #PCDATA unutar zagrada.

<!ELEMENT element-name (#PCDATA)>


Primer:

<!ELEMENT from (#PCDATA)>


Elementi bez ikakvog sadržaja[uredi | uredi izvor]

Elementi deklarisani sa ključnom reči kategorije ANY, mogu da sadrže bilo koju kombinaciju obradivih podataka:

<!ELEMENT element-name ANY>


Primer:

<!ELEMENT note ANY>


Elementi sa decom (sekvence)[uredi | uredi izvor]

Elementi sa jednim ili više deteta su deklarisani sa imenima njihove dece unutar zagrada:

<!ELEMENT element-name (child1)>
или
<!ELEMENT element-name (child1,child2,...)>


Primer:

<!ELEMENT note (to,from,heading,body)>


Kada su deca deklarisana u sekvenci razdvojenoj zarezima, deca moraju da se pojave u istom redosledu u dokumentu.
U punoj deklaraciji, deca takođe moraju biti deklarisana, i deca takođe mogu imati svoju decu.
Puna deklaracija "note" je onda:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

Deklaracija samo jednog pojavljivanja u elementu :

<!ELEMENT element-name (child-name)>


Primer:

<!ELEMENT note (message)>


Primer iznad deklariše da deca elementa "message" moraju da se pojave tačno jednom unutar "note" elementa.


Deklarisanje barem jednog pojavljivanja u elementu:

<!ELEMENT element-name (child-name+)>


Primer:

<!ELEMENT note (message+)>


Znak + u ovom primeru deklariše da dete-element "message" mora da se pojavi jednom ili više puta unutar elementa "note".


Deklarisanje nula ili više pojavljivanja u elementu:
<!ELEMENT element-name (child-name*)>


Primer:

<!ELEMENT note (message*)>


Znak * u primeru iznad deklariše da dete-element "message" može da se pojavi nula ili više puta unutar "note" elementa.


Deklarisanje nula ili jednog pojavljivanja elementa:
<!ELEMENT element-name (child-name?)>


Primer:

<!ELEMENT note (message?)>


Znak ? U primeru iznad deklariše da dete-element "message" može da se pojavi jednom ili nijednom unutar elementa "note".

Deklarisanje ili sadržaja:

Primer:

<!ELEMENT note (to,from,header,(message|body))>


Primer iznad deklariše da "note" element mora da sadrži "to" element, "from" element, "header" element, i ili "message" ili "body" element.


Deklarisanje mešanog sadržaja :

Primer:

<!ELEMENT note (#PCDATA|to|from|header|message)*>


Primer iznad deklariše da element "note" može sadržati nula ili više pojavljivanja obrađenih podataka sa karakterima, kao i "to", "from", "header", ili "message" elemente.


DTD - Atributi[uredi | uredi izvor]

U DTD-u, atributi su deklarisani pomoću ATTLIST deklaracije.

Deklarisanje atributa[uredi | uredi izvor]

Deklaracija atributa ima sledeću sintaksu:

<!ATTLIST element-name attribute-name attribute-type default-value>


DTD primer:

<!ATTLIST payment type CDATA "check">


XML primer:

<payment type="check" />


attribute-type može biti jedno od navedenih:
Tip - - - - - - - - - - - - -Opis

CDATA--------------------Vrednost podataka sa karakterima
(en1|en2|..)--------------Vrednost mora biti među navedenim opcijama
ID----------------------------Vrednost je jedinstven id
IDREF----------------------Vrednost je id drugog elementa
IDREFS--------------------Vrednost je lista drugih id vrednosti
NMTOKEN---------------Vrednost je validno XML ime
NMTOKENS-------------Vrednost je lista validnih XML imena
ENTITY--------------------Vrednost je entitet
ENTITIES-----------------Vrednost je list entiteta
NOTATION---------------Vrednost je ime notacije
xml: Vrednost je predefinisana XML vrednost

default-value može biti jedno od navedenih:
Vrednost - - - - - -Objašnjenje

value - - - - - - - Podrazumevana vrednost atributa
#REQUIRED-------Atribut je neophodan
#IMPLIED----------Atribut nije neophodan
#FIXED value---- Atribut je fiksan


Podrazumevana vrednost atributa
DTD:

<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">


Validni XML:

<square width="100" />


U primeru iznad, "square" element je definisan kao prazan element sa "width" atributom, tipa CDATA.
Ukoliko vrednost nije zadata, ima podrazumevanu vrednost 0.


#REQUIRED
Cintaksa:

<!ATTLIST element-name attribute-name attribute-type #REQUIRED>


Primer
DTD:

<!ATTLIST person number CDATA #REQUIRED>


Validan XML:

<person number="5677" />


Neispravan XML:

<person />


Upotrebljavajte #REQUIRED ključnu reč ukoliko nemate mogućnost za podrazumevanu vrednost, ali svejedno želite da primorate da atribut bude prisutan.


#IMPLIED Sintaksa

<!ATTLIST element-name attribute-name attribute-type #IMPLIED>


Primer
DTD:

<!ATTLIST contact fax CDATA #IMPLIED>


Ispravan [[[XML]]:

<contact fax="555-667788" />


Neispravan XML:

<contact />


Koristite #IMPLIED ključnu reč ukoliko ne želite da primorate autora da uključi atribut, iako nemate mogućnost za podrazumevanu vrednost.


#FIXED
Sintaksa

<!ATTLIST element-name attribute-name attribute-type #FIXED "value">


Primer
DTD:

<!ATTLIST sender company CDATA #FIXED "Microsoft">


Isravan XML:

<sender company="Microsoft" />


Neispravan XML:

<sender company="W3Schools" />


Koristite #FIXED ključnu reč kada želite da atribut ima fiksiranu vrednost bez mogućnosti da je autor izmeni.
Ukoliko autor uključi neku drugu vrednost, XML analizator će izbaciti poruku o grešci .


Prebrojive vrednosti atributa
Sintaksa

<!ATTLIST element-name attribute-name (en1|en2|..) default-value>


Primer
DTD:

<!ATTLIST payment type (check|cash) "cash">


XML primer:

<payment type="check" />
или
<payment type="cash" />


Koristite prebrojive vrednosti atributa kada želite da vrednost atributa bude jedna iz fiksiranog skupa dozvoljenih mogućnosti.


XML elementi naspram atributa: U XML-u, ne postoje pravila kada treba koristiti atribute, a kada decu-elemente.


Upotrebe Elementi naspram atributa:
Podaci mogu biti upisani u deci-elementima ili atributima:

<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person> 

<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person>


U prvom primeru, pol je atribut. U drugom, pol je dete-element. Oba primera pružaju iste informacije.

Ne postoje pravila za to kada koristiti atribute a kad decu-elemente.
Atributi su zgodni u HTML-u, ali u XML-u bi trebalo izbegavati ih.
Koristite decu-elemente ukoliko informacije izgledaju kao podaci.

Neki problemi sa atributima su:

  • atributi ne mogu da sadrže više vrednosti (deca-elementi mogu).
  • atributi nisu lako proširivie (za buduće promene).
  • atributi ne mogu da opisuju strukture (deca-elementi mogu).
  • atributi su teži za manipulaciju od strane programskog koda.
  • vrednosti atributa nisu tako lako proverive po DTD-u.

DTD - Entiteti[uredi | uredi izvor]

Entiteti su promenljive, korišćene za definisanje prečica za standardni tekst ili specijalne karaktere:

•Reference entiteta su reference ka entitetima.
•Entiteti mogu biti deklarisani interno ili eksterno.

Interna deklaracija entiteta
Sintaksa

<!ENTITY entity-name "entity-value">


Primer
DTD primer:

<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">



XML primer:

<author>&writer;&copyright;</author>


Napomena Entitet ima tri dela: ampersend (&), ime entiteta , i tačku-zarez (;).

Ekcterna deklaracija entiteta

Sintaksa

<!ENTITY entity-name SYSTEM "URI/URL">


DTD primer:

<!ENTITY writer SYSTEM "http://www.w3schools.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3schools.com/entities.dtd">


XML primer:

<author>&writer;&copyright;</author>



DTD - primeri :


TV Schedule (TV program) DTD

<!DOCTYPE TVSCHEDULE [

<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)> 
<!ELEMENT DESCRIPTION (#PCDATA)>

<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
]>



Newspaper Article (Novinski članak) DTD

<!DOCTYPE NEWSPAPER [

<!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEAD (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)>

<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>
<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>

<!ENTITY NEWSPAPER "Vervet Logic Times">
<!ENTITY PUBLISHER "Vervet Logic Press">
<!ENTITY COPYRIGHT "Copyright 1998 Vervet Logic Press">

]>



Product Catalog (Katalog proizvoda) DTD

<!DOCTYPE CATALOG [

<!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com">

<!ELEMENT CATALOG (PRODUCT+)>

<!ELEMENT PRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
<!ATTLIST PRODUCT
NAME CDATA #IMPLIED
CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
INVENTORY (InStock|Backordered|Discontinued) "InStock">

<!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS
WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED>

<!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS
FINISH (Metal|Polished|Matte) "Matte"
ADAPTER (Included|Optional|NotApplicable) "Included"
CASE (HardShell|Soft|NotApplicable) "HardShell">

<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE
MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED>

<!ELEMENT NOTES (#PCDATA)>

]>



Spoljašnje veze[uredi | uredi izvor]