XML skripta

Page 1

XML Extensible Markup Language Proširiv jezik obeležavanja Sadržaj kursa

Sadržaj on-line kursa iz XML-a 1. Osnovni pojmovi 2. Definicija tipa dokumenta 3. XML sheme 4. Prostor imena 5. Karakterski skupovi 6. XSL transformacije 7. XPath 8. XLinks 9. XPointer 10. Primeri o Nesto više o XML-u s primerima o Primer

Osnovna namena XML-a Cilj XML-a je da olakša automatsku obradu dokumenata i podataka. Ideja je da se ostvari takvo strukturiranje informacija koje omogućava i ljudima da ih čitaju na web-u i raznovrsnim aplikacija da ih automatski obrađuju

Primer 1 1


<?xml version="1.0" encoding="ISO-8859-2"?> <Ä?lanak> <naslov>Ĺ irak i Ĺ˝ospen najveći favoriti</naslov> <datum>5. II 2002.</datum> <tekst> <mesto>Pariz</mesto> Manje od tri meseca uoÄ?i predsedniÄ?kih izbora u Francuskoj, glavni konkurenti, sadaĹĄnji predsednik, degolista Ĺ˝ak Ĺ irak i premijer, socijalista, Lionel Ĺ˝ospen, joĹĄ nisu istakli svoje kandidature. MeÄ‘utim, celokupnoj Francuskoj javnosti je jasno da će ta dvojica rivala iz prethodnih izbora, 1995, ponovo izaći pred glasaÄ?e 21. aprila ove godine. </tekst> </Ä?lanak>

Raznovrsnost obeleĹžavanja Isti primer bi se mogao obeleĹžiti i na drugi naÄ?in.

Primer 2 <?xml version="1.0" encoding="ISO-8859-2"?> <Ä?lanak naslov="Ĺ irak i Ĺ˝ospen najveći favoriti" datum="5. II 2002." mesto="Pariz"> <tekst> Manje od tri meseca uoÄ?i predsedniÄ?kih izbora u <ime vrsta="mesto">Francuskoj</ime>, glavni konkurenti, sadaĹĄnji predsednik, degolista Ĺ˝ak Ĺ irak i premijer, socijalista, <ime vrsta="osoba">Lionel Ĺ˝ospen</ime>, joĹĄ nisu istakli svoje kandidature. MeÄ‘utim, celokupnoj Francuskoj javnosti je jasno da će ta dvojica rivala iz prethodnih izbora, <datum>1995</datum>, ponovo izaći pred glasaÄ?e <datum>21. aprila ove godine</datum>. </tekst> </Ä?lanak>

Terminologija 2


Atribut je par ime-vrednost koji se pridružuje početnoj etiketi elementa. Imena se odvajaju od vrednosti znakom jednakosti i opcionim belinama. Vrednosti su okružene dvostrukim ili jednostrukim znacima navoda. Vrednosti su niske karaktera i ne mogu biti strukturirane. Element je sekvencija <PočetnaEtiketa NiskaAtributa> ...sadržaj... </ZavršnaEtiketa>. Sadržaj, to jest sve ono što se nalazi između početne i završne etikete, može da bude strukturiran i može sadržati druge elemente. U HTML-u su sve etikete unapred date (jer se on zasniva na SGML-u). XML dozvoljava da korisnik po volji dodaje nove etikete. Prazan element je element kod koga je sadržaj između početne i završne etikete prazan. Za takav element se može koristiti posebna početna etiketa <PočetnaEtiketa NiskaAtributa/>. Na primer, u XHTML-u elementi za novi red i horizontalnu liniju su <br/> i <hr/> umesto <br> i <hr>. Ne treba misliti da prazni elementi ne nose informaciju, ta informacija je sadržana u atributima. Koreni element je prvi element u XML dokumenu koji sadrži sve ostale elemente. U Primeru 1, koreni element je element <članak>. XML imena se koriste za imenovanje elemenata, atributa i drugih konstrukata. Ona predstavljaju nisku alfanumeričkih karaktera, pod čime se podrazumevaju slova alfabeta, cifre od 0 do 9, kao i slova i cifre iz drugih alfabeta. Dozvoljeno je i korišćenje tri interpunkcijska karaktera: podvlaka, crtica i tačka. Ime može početi samo slovom i podvlakom.

Jednostavan sadržaj elemenata 3


U primenama vezanim za obradu podataka, elementi obično imaju jednostavan sadržaj. Sadržaj svakog elementa su ili: • njegova deca, to jest drugi elementi; ili • karakterski podaci, to jest tekst koji ne sadrži druge elemente.

Primer 3 <?xml version="1.0" encoding="ISO-8859-2"?> <osoba rodjen="23. VI 1912." umro="7. VI 1954."> <ime> <lično_ime>Alan</lično_ime> <prezime>Tjuring</prezime> </ime> <profesija>informatičar</profesija> <profesija>matematičar</profesija> <profesija>kriptograf</profesija> </osoba>

Mešoviti sadržaj elemenata U primenama vezanim za obradu prirodnojezičkih dokumenata elementi obično imaju mešoviti sadržaj. Sadržaj jednog elementa su i karakterski podaci i drugi elementi.

Primer 4 <?xml version="1.0" encoding="ISO-8859-2"?> <biografija> <ime><lično_ime>Alan</lično_ime> <prezime>Tjuring</prezime></ime>, rodjen <datum><godina>1912.</godina><datum>, jedan je od prvih ljudi koji zaista zaslužuju naziv <istaknuto>informatičara</istaknuto>. Svi njegovi doprinos ovom polju ne mogu se nabrojati; napoznatiji su <istaknuto>Tjuringov test</istaknuto> i <istaknuto>Tjuringova mašina.</istaknuto> <ime><prezime>Tjuring</prezime></ime> je bio i vrlo dobar <profesija>matematičar</profesija> i <profesija>kriptograf</profesija>. Prevashodno uz njegovu pomoć, saveznici su u toku Drugog svetskog rata uspeli da dekodiraju nemačku mašinu "Enigma". Izvršio je samoubistvo <datum><dan>7.</dan> <mesec>maja</mesec> <godina>1954.</godina></datum> godine, pošto je optužen zbog homoseksualnosti i primoran na ponižvajuće "lečenje". </biografija>

4


Reference entiteta U karakterskim podacima otvorena šiljasta zagrada se ne može koristiti jer se ona uvek interpretira kao početak etikete. Isto tako se ne može koristiti ni znak za amperzan jer se on interpretira kao početak reference entiteta. U XML-u postoji pet predefinisanih entiteta: < Znak za manje ili otvorena šiljasta zagrada (<) & Znak za amperzan (&) > Znak za veće ili zatvorena šiljasta zagrada (>) " Dvostruki znaci navoda (") ' Apostrof ili jednostruki znaci navoda (') Zadatk XML parsera je da, između ostalog, zameni reference entiteta karakterima na koje se one odnose. Tako se dobijaju parsirani karakterski podaci.

Primer 5 <?xml version="1.0" encoding="ISO-8859-2"?> <izdavač>O'Reilly & Associates</izdavač> <image source='oreilly_koala.gif' alt='Powered by O'Reilly Books'/>

Odeljci karakterskih podataka 5


Odeljci karakterskih podataka mogu da sadrže proizvoljne podatke, uključujući i otvorene i zatvorene šiljaste zagrade. Ovi podaci se ne parsiraju. Oni se smeštaju unutar oznaka <![CDATA[ i ]]>. Samo se završna oznaka odeljka karakterskih podataka ne sme naći među podacima. Koriste se za uključivanje HTML ili XML koda u tekst.

Primer 6 Sadržaj svakog elementa su ili njegova deca, to jest drugi elementi; ili karakterski podaci, to jest tekst koji ne sadrži druge elemente. Na primer, <![CDATA[ <?xml version="1.0" encoding="ISO-8859-2"?> <osoba rodjen="23. VI 1912." umro="7. VI 1954."> <ime> <lično_ime>Alan</lično_ime> <prezime>Tjuring</prezime> </ime> <profesija>informatičar</profesija> <profesija>matematičar</profesija> <profesija>kriptograf</profesija> </osoba> ]]>

Komentari XML dokumenti mogu sadržati komentare, baš kao i programi. Komentari se pišu unutar oznaka <!-- i -->.

Primer 7 <!--Na ovom mestu treba ubaciti sliku kad bude gotova -->

Instrukcije za obradu 6


XML instrukcije za obradu su neka vrsta komentara koja može da bude od značaja nekim aplikacijama koje dokument čitaju. Instrukcije za obradu se pišu unutar oznaka <? i ?>. Ono što neposredno sledi oznaku <? je meta, a to je najčešće ime aplikacije kojoj su instrukcije namenjene. Sve ostalo iza mete su instrukcije namenjene toj aplikaciji u odgovarajućem formatu.

Primer 8 <?robots index="yes" follow="no" ?>

Meta ove instrukcije za obradu je robots i ona je govori mašinama za pretragu i drugim robotima da li da indeksiraju određenu stranicu. Ova instrukcija ima dva atributa index i follow čije su dozvoljene vrednosti yes i no.

XML deklaracija XML dokumenta bi trebalo da imaju deklaraciju, ali ona nije obavezna. XML deklaracija izgleda kao instrukcija za obradu kod koje je meta xml i koja ima tri atributa: version

je verzija XML i, za sada tu treba da stoji 1.0; encoding

govori koja šema kodiranja se koristi (ako nije naveden predpostavlja se da je to Unicode); standalone

govori da li je dokument samostalan (tj. ne zavisi od nekog spoljašnjeg DTD-a).

Primer 9 <?xml version="1.0" encoding="ISO-8859-2" standalone="yes"?>

Dobro formirana XML dokumenta 7


Svaki XML dokument mora da bude dobro formiran, a to znači da mora da zadovlji određene uslove. Neki od tih uslova su: • • • • • • •

Svaka početna etiketa, osim etiketa praznih elemenata, mora da ima završnu etiketu; Sadržaji elemenata ne mogu da se preklapaju; Dokument može da ima samo jedan koreni element; Vrednosti atributa moraju biti unutar navodnika; Jedan element ne može imati dva atributa s istim imenom; Komentari i instrukcije za obradu ne mogu se navoditi unutar etikete; Karakteri < i & ne smeju se pojavljivati unutar vrednosti atributa ni unutar karakterskog sadržaja elemenata.

XML parser je program koji otkriva greške u formiranju XML dokumenta i izveštava o njima. Zadatak XML paresera nije da te greške ispravlja niti da pokuša da protumači šta je autor, u stvari, mislio.

Document Type Definition (DTD) Definicija tipe dokumenta XML dokumenta mogu da bude veoma fleksibilna. Sve aplikacije ne mogu da podrže takvu fleksibilnost, odnosno, ona je za njih nepoželjna. Na primer, u XHTML-u element <li> može da bude dete samo od <ol> i <ul>, dok njegovo pojavljivanje direktno u sadržaju drugih elemenata, recimo <p> ili <blockquote> zbunjuje prelistač (navigator). Uloga DTD-a je da precizno, koristeći se formalnom sintaksom, opiše koji se elementi mogu pojaviti u dokumentu, šta je mogući sadržaj svih dozvoljenih elemenata, šta su njihovi atributi i njihove dozvoljene vrednosti.

Validna XML dokumenta XML dokument koji koristi DTD je validan ako je zapisan u skladu sa DTD-em koji dokument koristi. Validnost proverava XML parser. Ove greške se u nekim slučajevima ne moraju smatrati fatalnim, ali to zavisi od aplikacije. Greška u validnost može biti fatalna za slogove kojima se 8


puni baza podataka (na primer, ako nedostaje obavezno polje), dok Web prelistač (navigator) ovakvu grešku može da zaobiđe. Drugim rečima, XML dokument mora da bude dobro formiran ali ne mora da bude validan. DTD još uvek ostavlja dosta fleksibilnosti autorima. Na primer, on ne govori: • • • •

Šta je koreni element dokumenta; Koliko se mnogo primeraka nekog elementa može pojaviti u dokumentu; Kako izgledaju karakterski podaci unutar nekog elementa; Šta je značenje pojedinačnih elemenata (na primer, da li element sadrži ime osobe ili datum).

Jednostavan primer Primer 10 <!-- DTD za element *osoba* --> <!ELEMENT osoba (ime,profesija*)> <!ELEMENT ime (lično_ime, prezime)> <!ELEMENT lično_ime (#PCDATA)> <!ELEMENT prezime (#PCDATA)> <!ELEMENT profesija (#PCDATA)>

Primer 10a <!-- Primer validnog dokumenta --> <osoba> <ime> <lično_ime>Alan</lično_ime> <prezime>Tjuring</prezime> </ime> </osoba>

9


Primer 10b <!-- Primer jednog nevalidnog dokumenta --> <osoba> <ime> <prezime>Tjuring</prezime> <lično_ime>Alan</lično_ime> </ime> </osoba>

Primeri iz HTML DTD-a Primer 11 <!-- deklaracija uređene liste, element *UL* --> <!ELEMENT UL (LI)+> <!-- deklaracija liste definicija, element *DL* --> <!ELEMENT DL (DT|DD)+> <!-- deklaracija horizontalne linije, element *HR* --> <!ELEMENT HR EMPTY> <!-- deklaracija tabele, element *TABLE* --> <!ELEMENT TABLE (CAPTION?, TR+)> <!ELEMENT TR (TH|TD)*> <!-- deklaracija elementa za selekciju više mogućnosti, element *SELECT* --> <!ELEMENT SELECT (OPTION+)> <!ELEMENT OPTION (#PCDATA)>

Referisanje spoljašnjeg DTD 10


Validni dokument se referiše na DTD u odnosu na koji se njegova validnost proverava. Ova referenca se zadaje u jedinstvenoj deklaraciji tipa dokumenta koja govori šta je koreni element dokumenta i na kom URL-u se DTD može naći. Ova deklaracija se smešta u prolog dokumenta, a to je deo XML dokumenta između XML deklaracije i početne etikete korenog elementa.

Primer 12 <?xml version="1.0" encoding="ISO-8859-2" standalone="no"?> <!DOCTYPE osoba SYSTEM "http://nlp.matf.bg.ac.yu/xml/dtds/osoba.dtd"> <osoba> <ime> <lično_ime>Alan</lično_ime> <prezime>Tjuring</prezime> </ime> <profesija>informatičar</profesija> <profesija>matematičar</profesija> <profesija>kriptograf</profesija> </osoba>

Unutrašnji DTD podskup Primer 13 <?xml version="1.0" encoding="ISO-8859-2" standalone="yes"?> <!DOCTYPE osoba [ <!-- DTD za element *osoba* --> <!ELEMENT osoba (ime,profesija*)> <!ELEMENT ime (lično_ime, prezime)> <!ELEMENT lično_ime (#PCDATA)> <!ELEMENT prezime (#PCDATA)> <!ELEMENT profesija (#PCDATA)> ]> <osoba> <ime> <lično_ime>Alan</lično_ime> <prezime>Tjuring</prezime> </ime> <profesija>informatičar</profesija> <profesija>matematičar</profesija> <profesija>kriptograf</profesija> </osoba>

11


Kombinovanje unutrašnjih i spoljašnjih DTD podskupova Ponekad deklaracija tipa dokumenta sadrži neke deklaracije direktno a ostale referiše preko URL-a. Ta dva podskupa deklaracija moraju da budu kompatibilna, što znači da ni jedan od njih ne može da poništi deklaraciju elementa ili atributa koju je uveo drugi podskup.

Primer 14 <?xml version="1.0" encoding="ISO-8859-2" standalone="no"?> <!DOCTYPE osoba SYSTEM "ime.dtd" [ <!-- DTD za elemente *osoba* i *profesija*--> <!ELEMENT profesija (#PCDATA)> <!ELEMENT osoba (ime,profesija*)> ]>

Deklaracije elemenata Svaki element koji se koristi u validnom XML dokumentu mora da bude deklarisan u DTD-u. Deklaracija elementa ima oblik: <!ELEMENT ime_elementa (model_sadržaja)>

Model sadržaja specifikuje šta sve mogu, odnosno moraju, da budu deca nekog elementa i u kom redosledu se deca pojavljuju.

Model sadržaja 1 •

Parsirani karakterski podaci Sadržaj elementa su karakterski podaci, a ne drugi elementi. Ti karakterski podaci se parsiraju da bi se detektovale druge XML etikete. Na primer, <!ELEMENT TEXTAREA (#PCDATA)>

Elementi deca

12


Sadržaj elementa je jedan element dete određenog tipa. Na primer, <!ELEMENT Fax (Tel_Broj)> •

Sekvencije elemenata Sadržaj elementa su elementi deca koji se moraju u primerku validnog dokumenta pojavljivati u naznačenom redosledu. Elementi deca se u deklaraciji modela sadržaja razdvajaju zapetom. Na primer, <!ELEMENT ime (lično_ime,prezime)>

Izbor između više elemenata dece Ponekad element u jednom primerku dokumenta može da sadrži jedan element dete, a u drugom primerku dokumenta drugi element dete. Izbor između dva elementa se u modelu sadržaja naznačava vertikalnom crtom. Na primer, <!ELEMENT naslov (h1 | h2 | h3)>

Broj dece Neki elementi deca su u sadržaju elementa opcioni, a neki se mogu pojaviti više puta. Imenu elementa deteta se u modelu sadržaja može dodati jedan od tri sufiksa: ? Element je opcioni (nula ili jedno pojavljivanje) * Element je opcioni i ponovljiv (nula ili više pojavljivanja) + Element je obavezan i ponovljiv (jedno ili više pojavljivanja) <!ELEMENT TABLE (CAPTION?,TR+)>

13


Model sadržaja 2 •

Upotreba zagrada Sekvencije, izbori i indikatori pojavljivanja mogu se kombinovati u jednom modelu sadržaja. Treba samo voditi računa da se unutar jednog para zagrada mogu koristiti samo sekvencije ili samo izbori. Na primer, <!-- Tačka u ravni zadaje se ili Dekartovima ili polarnim koordinatama --> <!ELEMENT tačka ((x,y) | (r,u))>

Mešoviti sadržaj Sadržaj elementa <biografija> koji je korišćen za obeležavanje biografije Alana Tjuringa bio bi deklarisan na sledeći način: <!ELEMENT biografija (#PCDATA | ime | datum | istaknuto | profesija)* >

Mešoviti sadržaj se uvek zadaje ovakvom vrstom deklaracije. Treba zapamtiti da: Broj elemenata dece u mešovitom sadržaju nekog elementa nije ograničen. o Parsirani karakterski podaci (#PCDATA) moraju uvek da budu prvi u listi koja deklariše mešoviti sadržaj. o Mešoviti sadržaj se nikada ne može deklarisati tako da sadrži tačno jedan element dete. o Mešoviti sadržaj se nikada ne može deklarisati tako da parsirani karakterski podaci dođu pre, ili posle, nekog elementa deteta. o Mešoviti sadržaj ne može da bude deo nekog složenijeg modela sadržaja. Prazan sadržaj o

Neki elementi nemaju sadržaj. To su prazni elementi. Oni ne moraju imati završnu etiketu ako se početna etiketa završava sa />. Deklaracija praznog elementa je, <!ELEMENT IMG EMPTY>

14


Proizvoljan sadržaj U komotnom DTD-u, neki elementi mogu imati proizvoljan sadržaj, što znači da mogu imati mešoviti sadržaj u kome se kao deca pojavljuju ma koji elementi deklarisani u tom DTD-u, uključujući i sam element koji se deklariše. Deklaracija jednog ovakvog elementa je <!ELEMENT strana ANY>

Atributi U validnom XML dokumentu moraju da budu deklarisani, pored svih elemenata koji se koriste, i svi atributi tih elemenata. Atributi se ne deklarišu nezavisno od elemenata. Ako je neki atribut svojstvo više elemenata, on se mora deklarisati za svaki od tih elemenata. Deklaracija atributa ima oblik: <!ATTLIST ime_elementa ime_atributa deklarisana_vred pretpostavljena_vred>

Primer jedne deklaracije atributa u HTML DTD je: <!ELEMENT H1 (%text;)*> <!ATTLIST H1 align (left|center|right) #IMPLIED>

U okviru jedne deklaracije atributa može se deklarisati više atributa jednog elementa. Na primer, <!ELEMENT HR EMPTY> <!ATTLIST HR align (left|center|right) #IMPLIED noshade (noshade) #IMPLIED size %Pixels; #IMPLIED width %Length; #IMPLIED>

Tipovi atributa U dobro formiranom XML dokumentu vrednost atributa može da bude proizvoljna niska karaktera. DTD dozvoljava da se postave dodatna ograničenja na vrednosti atributa. šta više, ta ograničenja su jača od

15


onih koja se mogu postaviti na sadržaje elemenata. U XML-u postoji deset tipova atributa. To su 1. CDATA (character data) <!ELEMENT IMG EMPTY> <!ATTLIST IMG ALT CDATA #IMPLIED>

2. NMTOKEN (name token) Vrednost atributa je legalno XML ime, s tim da se prvi karakter imena ne ograničava na slovo i podvlaku. <!ELEMENT META EMPTY> <!ATTLIST META NAME NMTOKEN #IMPLIED>

3. NMTOKENS (name tokens) Vrednost atributa je lista XML imena razdvojenih belinama. 4. Nabrajanje Ovo je jedini XML atribut koji nije XML ključna reč. Navode se sve dozvoljene vrednosti atributa razdvojene vertikalnom crtom. Svaka dozvoljena vrednost mora da bude XML ime. <!ELEMENT UL (LI)+> <!ATTLIST UL TYPE (disc|square|circle) #IMPLIED>

5. ID (identifier) Vrednost atributa ovog tipa mora da bude XML ime koje je jedinstveno u okviru dokumenta. Element može da ima samo jedan atribut ovog tipa. <!ATTLIST student broj_indeksa ID #REQUIRED> <!ATTLIST predmet šifra ID #REQUIRED>

6. IDREF (identifier reference) Vrednost ovog atributa referiše atribut tipa ID nekog elementa. Prema tome i on mora da bude XML ime. Korišćenje ovog atributa omogućava uspostavljanje mnogo-mnogo veza među elementima.

16


<!ATTLIST sluša_predmet predmet IDREF #REQUIRED> <!ATTLIST slušalac_predmeta student IDREF #REQUIRED>

Primer upotrebe atributa tipe ID i IDREF <predmet sifra="OP"> <naziv>Osnovi programiranja</naziv> <slušalac_predmeta student="R018765"/> <slušalac_predmeta student="M015412"/> </predmet> <predmet sifra="AN1"> <naziv>Analiza 1</naziv> <slušalac_predmeta student="R018765"/> <slušalac_predmeta student="R016598"/> </predmet> <student broj_indeksa="R018765"> <ime>Fred Kremenko</ime> <sluša_predmet predmet="OP"/> </student> <student broj_indeksa="R016598"> <ime>Vilma Kremenko</ime> <sluša_predmet predmet="OP"/> <sluša_predmet predmet="AN1"/> </student>

7. IDREFS (identifier references) Vrednost ovog atributa je lista XML imena razdvojenih belinama, od kojih je svako ime ID nekog elementa iz istog dokumenta. Na primer, U okviru jedne deklaracije atributa može se deklarisati više atributa jednog elementa. Na primer, <!ATTLIST student broj_indeksa ID #REQUIRED sluša_predmete IDREFS #REQUIRED> <!ATTLIST predmet šifra ID #REQUIRED slušaoci_predmeta IDREFS #REQUIRED>

Primer upotrebe atributa tipe ID i IDREFS <predmet sifra="OP" slušaoci_predmeta="R018765 M015412"> <naziv>Osnovi programiranja</naziv> </predmet> <predmet sifra="AN1" slušaoci_predmeta="R018765 R016598"> <naziv>Analiza 1</naziv>

17


</predmet> <student broj_indeksa="R018765" sluša_predmete="OP"> <ime>Fred Kremenko</ime> </student> <student broj_indeksa="R016598" sluša_predmete="OP AN1"> <ime>Vilma Kremenko</ime> </student>

8. ENTITY Vrednost atributa ovog tipa je ime nekog neparsiranog entiteta koji deklarisan u istom DTD-u. 9. ENTITIES Vrednost atributa ovog tipa je lista imena neparsiranih entiteta koji su deklarisani u istom DTD-u. Imena se u listi razdvajaju belinama. 10.

NOTATION

Vrednost atributa ovog tipa je ime notacije koja je deklarisana u istom DTD-u.

Predpostavljene vrednosti atributa U ATTLIST deklaraciji atributa se osim njegovog tipa navodi i njegova predpostavljena vrednost. Postoje četiri mogućnosti: 1. #IMPLIED Atribut nije obavezan (opcionalan), neki primerci elemenata ga mogu imati ali ne moraju svi. Predpostavljena vrednost ne postoji. 2. #REQUIRED Atribut je obavezan i svaki primerak elementa ga mora imati. Predpostavljena vrednost ne postoji. 3. #FIXED

18


Vrednost atributa je konstantna i nepromenljiva, bez obzira da li je atribut naveden u primerku elementa ili ne. 4. Navedena vrednost Predpostavljena vrednost je ona koja je navedena pod navodnicima.

Karakterski entiteti Karakterski entiteti omogućavaju korišćenje karaktera kojih nema u karakterskom skupu koji se koristi, ili kojih nema na tastaturi. Karakterski entiteti se ne deklarišu, oni se jednostavno koriste. Iza znaka &# navodi se pozicija karaktera u karakterskom skupu koji se koristi. Na primer, ako se koristi karakterski skup ISO 8859-1 Latin 1, onda je ¡ okrenuti znak uzvika (¡), jer je 161 pozicija tog karaktera u tom karakterskom skupu. Isto tako je £ znak za funtu sterlinga (£) jer je 163 pozicija znaka za funtu u istom karakterskom skupu. Radi lakšeg korišćenja, karakterski entiteti se mogu imenovati, u stvari, zameniti opštim entitetima, kako je to učinjeno u HTML-u: <!ENTITY iexcl "¡"> <!ENTITY pound "£">

Karakterski entiteti definisani u jednom DTD-u, mogu se koristiti u XML dokumentima koji koriste taj DTD pomoću reference entiteta &ImeEntiteta; (na primer, ¡ ili £).

Parametarski entiteti Parametarski entiteti se deklarišu u okviru DTD-a i koriste isključivo u okviru njega. Njihova osnovna namena je da olakšaju i sistematizuju deklaracije modela sadržaja elemenata i njihovih lista atributa. Deklaracija parametarskog entiteta je oblika: <!ENTITY % ime_entiteta tekst_entiteta>

Tekst enititeta je tekst koji posle parsiranja, odnosno interpretacije, zamanjuje referencu entiteta. Parametarski entitet se može referisati isključivo u okviru DTD-a na sledeći način: 19


%ime_entiteta;

Parametarski entitet može da bude i spoljašnji, što je posebno značajno za kompleksne DTD-e, koji se mogu razbiti u module, a korisnik preko referenci parametarskih entiteta učitava samo one koji su mu u određenom trenutku potrebni. Deklaracija spoljašnjeg parametraskog entiteta je: <!ENTITY % ime_entiteta SYSTEM URI_teksta_entiteta>

Parametarski entiteti se mogu redefinisati, a to je korisno ako dokument ima i spoljašnji i unutrašnji DTD. Pravilo je da se unutrašnji DTD učitava prvi, a da je važeća samo prva deklaracija nekog entiteta. Primer iz TEI DTD-a je: <!--Deklaracije parametarskih entiteta u spoljašnjem DTD--> <!ENTITY % x.bibl "" > <!ENTITY % m.bibl "%x.bibl; bibl | bibl.full | bibl.struc"> <!--Deklaracije parametarskih entiteta u unutrašnjem DTD--> <!ENTITY % x.bibl " moja.bibl | " >

Posle učitavanja unutrašnjeg i spoljašnjeg DTD-a, tekst zamene entiteta m.bibl biće: " moja.bibl | bibl | bibl.full | bibl.struct "

Primer upotrebe parametarskih entiteta u HTML DTD Deklaracija modela sadržaja <!ENTITY % font "TT | I | B | U | STRIKE | BIG | SMALL | SUB | SUP"> <!ENTITY % phrase "EM | STRONG |DFN | CODE | SAMP | KBD | VAR | CITE"> <!ENTITY % special "A | IMG | APPLET | FONT | BASEFONT | BR | SCRIPT"> <!ENTITY % form "INPUT | SELECT | TEXTAREA"> <!ENTITY % text "#PCDATA | %font; | %phrase; | %special; | %form;"> <!ELEMENT TD (%text;)*> 20


Deklaracija lista atributa <!-- Atributi horizont. poravnanja sadržaja ćelije --> <!ENTITY % cell.halign " align (left | center| right) left "> <!-- Atributi vertikalnog poravnanja sadržaja ćelije --> <!ENTITY % cell.valign " valign (top | middle | bottom) middle"> <!ATTLIST tr --red tabele-%cell.halign; --horizont. poravnanje u ćeliji-%cell.valign; --vertikal. poravnanje u ćeliji--> <!ATTLIST (th|td) --ćelija zaglavlja ili podataka-nowrap (nowrap) #IMPLIED --sprečava namotavanje redova -rowspan NMTOKEN 1 --broj redova koje pokriva ćelija-colspan NMTOKEN 1 --broj kolona koje pokriva ćelija-%cell.halign; --horizont. poravnanje u ćeliji-%cell.valign; --vertikal. poravnanje u ćeliji-width %Pixels; #IMPLIED --predložena širina ćelije-heigth %Pixels; #IMPLIED --predložena visina ćelije-->

Opšti entiteti Opšti entiteti se deklarišu u okviru DTD-a a koriste prvenstveno u okviru tela XML dokumenta. Mogu se koristiti u okviru DTD-a samo ako će se u krajnjoj instanci uključiti u telo XML dokumenta (na primer, pretpostavljena vrednost atributa). Oni ne mogu da obezbede tekst za sam DTD. Njihova osnovna namena je da olakšaju pripremu i čitljivost XML dokumenta. 1. Unutrašnji entiteti su entiteti kod kojih je tekst zamene niska karaktera zadata kao literal. Njihova deklaracija je oblika: <!ENTITY ime_entiteta tekst_entiteta>

Tekst enititeta je tekst koji posle parsiranja, odnosno interpretacije, zamanjuje referencu entiteta. Opšti entitet se referiše najčešće u okviru XML dokumenta na sledeći način: &ime_entiteta;

21


Na primer, ako se opšti entitet DDT deklariše u okviru DTD-a <!ENTITY DDT "Dichlorodiphenyltrichlorethan">

onda se on može referisati u tekstu XML dokumenta DDT, ili &DDT;, je pesticid koji je izazvao veliko zagađenje.

Rezultat za aplikaciju koja obrađuje dokument (recimo, za prelistač odn. navigator) je: DDT, ili Dichlorodiphenyltrichlorethan, je pesticid koji je izazvao veliko zagađenje.

Entiteti mogu da sadrže i tekst i obeležja. Bitno je da i tekst zamene mora da bude dobro formiran, odnosno nije dozvoljeno da početna etiketa nekog elementa bude u tekstu zamene entiteta, a završna izvana njega ili u tekstu zamene nekog drugog entiteta.

Primer upotrebe opšteg unutrašnjeg entiteta Tekst zamene entiteta je podnožje mnogih stranice <!ENTITY podnožje '<hr width="80%" noshade="true"/> <p><a href="index.html"> <img src="slike/Home01.gif"/> </a><br/> Za informacije obratite se <a href="mailto:cvdv@eunet.yu"> Cvetani </a></p> <hr width="80%" noshade="true"/> <p><small>Poslednja izmena <font color=red>februar 2002. </font> </small></p> '>

22


Opšti entiteti •

Spoljašnji entiteti Oni se deklarišu pomoću ENTITY deklaracije u okviru DTD-a. Umesto teksta zamene, koristi se ključna reč SYSTEM i URL datoteke u kome je tekst zamene. <!ENTITY ime_entiteta SYSTEM URL_teksta_entiteta>

Na primer, tekst uobičajenog podnožja web stranica može biti smešten u zasebnu datoteku: <!ENTITY podnožje SYSTEM "http://nlp.matf.bg.ac.yu/sr/cvetana/podnozje.xml">

a može se koristiti i relativni URL: <!ENTITY podnožje SYSTEM "../podnozje.xml">

Sadržaj ovako deklarisanog spoljašnjeg entiteta se parsira, što znači, da može da sadrži etikete koje će parser na odgovarajući način interpretirati, a rezultat proslediti aplikaciji. Osim toga, datoteka ne sme da sadrži karaktere "<" i "&", osim u značenju početka etikete, odnosno, reference entiteta. Dalje, sadržaj datoteke mora da bude potencijalno dobro formiran - ne mora da sadrži jedan koreni element, ali svaka otvorena etiketa mora imati svoju zatvorenu etiketu u istoj datoteci. Spoljašnji entitet ne sme da sadrži XML deklaraciju. Umesto nje može se koristiti deklaracija teksta koja veoma liči na XML deklaraciju. U deklaraciji teksta obavezan je atribut encoding, jer se može koristiti druga kodna šema u odnosu na osnovni XML dokument, atribut version je opcioni, a atribut standalone se ne sme koristiti. Dozvoljene deklaracije teksta bile bi: <?xml version="1.0" encoding="MacRoman"?>

ili <?xml encoding="MacRoman"?>

Javni identifikatori 23


Omogućavaju da se identifikuje i koristi neki DTD koji je stavljen u javnu upotrebu. Javni identifikator se koristi na sledeći način: <!DOCTYPE ime_korena PUBLIC "Detalji_o_DTD" "Opcioni_URL_DTDa">

Detalji o javnom DTD-u zadaju se u obliku: "prefiks//autor//opis//KodOd2SlovaJezikaKojiSeKoristi"

Prefiks može da bude: ISO DTD je ISO standard + DTD je standard neke druge organizacije za standardizaciju -

DTD nije propisala nijedna organizacija za standardizaciju

Na primer, korišćenje DTD XHTML-a (a toje HTML koji je napisan u XML-u) se deklariše sa: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Osim javnih DTD-a, postoje i javne kolekcije entiteta koje se mogu uključiti u neki DTD. Na primer, ova kolekcija entiteta omogućava da se koriste entiteti za simbole iz gornje kodne strane karakterskog skupa Latin 1. <!ENTITY % HTMLlat1 PUBLIC "-//W3C//ENTITIES Latin 1 for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent"> %HTMLlat1;

Sledeća kolekcija omogućava korišćenje matematičkih simbola i grčkih slova: <!ENTITY % HTMLsymbol PUBLIC "-//W3C//ENTITIES Symbols for XHTML//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent"> %HTMLsymbol;

Korisnik može da uključi u svoj DTD neki modul iz XHTML-a. Na primer, <!ENTITY % xhtml-hypertext.mod PUBLIC "-//W3C//Elements XHTML 1.1 Hyperttext 1.0//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-hypertext-1.mod"> %xhtml-hypertext.mod;

24


Uslovno uključivanje i isključivanje U XML-u postoji mogućnost za uslovno uključivanje ili isključivanje nekih delova XML dokumenta. Delovi koji se uslovno uključuju ili isključuju mogu sadržati DTD ili primerak dokumenta. Na primer, ako se u DTD-u nađe sledeći odeljak: <![IGNORE[ <!ELEMENT beleška (#PCDATA) > ]]>

efekat će biti isti kao da deklaracije elementa beleška u DTD-u nema. Ako se u istom odeljku ključna reč IGNORE zameni sa INCLUDE: <![INCLUDE[ <!ELEMENT beleška (#PCDATA) > ]]>

element beleška biće uključen u DTD. Pogodno je što se element beleška, i s njim povezani elementi može po potrebi uključivati i isključivati. Na primer, ako se deklariše parametarski entitet <ENTITY % uključivanje_beležaka "INCLUDE">

onda umesto ključne reči može da se koriste referenca parametarskog entiteta: <![%uključivanje_entiteta;[ <!ELEMENT beleška (#PCDATA) > ]]>

Ključne reči INCLUDE i IGNORE mogu se koristiti i kada svi delovi XML dokumenta ne ulaze u sve njegove verzije. U sledećem primeru se paralelni višejezični dokument uvek realizuje u jednom od mogućih jezika: <ENTITY % Srpski "INCLUDE"> <ENTITY % Engleski "IGNORE"> <![%Srpski;[ Ovaj deo je napisan za potrebe... ]]> <![%Engleski;[ This part has been written to be used... ]]>

Notacije

25


Notacije služe za deklarisanje podataka koji nisu u XML formatu. Na primer, sledeća deklaracija uvodi ime jpeg kao oznaku za format slika koji definiše Joint Photographic Experts Group: <NOTATION jpeg "image/jpeg">

Ovde se koristi MIME tip medijuma image/jpeg kao spoljašnji identifikator notacije, ali ne postoji standard koji bi propisivao kako takav spoljašnji identifikator treba da izgleda. Notacije se koriste prilikom uključivanja materijala koji nije u XML formatu u dokument. XML predlaže korišćenje spoljašnjih neparsiranih entiteta kao mehanizam za uključivanje fotografija, slika, filmova, zvuka u dokument. Na primer, <ENTITY Kandid_i_Kunegunda SYSTEM "http://www.matf.bg.ac.yu/nlp/en/ljubljana/kankun.jpg" NDATA jpeg>

Ime Kandid_i_Kunegunda je preko ovog neparsiranog entiteta u notaciji jpeg pridruženo slici iz datoteke kankun.jpg sa odgovarajuće adrese. Da bi se ova slika uključila u dokument ne sme se koristiti referenca entiteta oblika &Kandid_i_Kunegunda jer se ovakve reference entiteta koriste samo za parsirane opšte entitete. Za ovu svrhu treba koristiti atribut tipa ENTITY. Recimo, neka je u DTD-u deklarisan element slika na sledeći način: <!ELEMENT slika EMPTY> <!ATTLIST slika izvor ENTITY #REQUIRED>

Element slika bi referisao sliku sa adrese "http://www.matf.bg.ac.yu/nlp/en/ljubljana/kankun.jpg"

na sledeći način:

<slika izvor="Kandid_i_Kunegunda"/>

Treba znati da je ovo mehanizam za uključivanje materijala koji nije u XML formatu u dokument, ali od same aplikacije zavisi šta će se stvarno desiti. Ovo je dosta složen postupak - jednostavniji i dozvoljen postupak bi bio: <slika izvor="http://www.matf.bg.ac.yu/nlp/en/ljubljana/kankun.jpg"/>

XML šeme 26


Alternativa za DTD Nedostaci definicije tipa dokumenta: • • • •

stara, nefleksibilna sintaksa; nema dovoljnu jačinu, na primer, ne mogu se zadati obrasci za podatke koji su sadržaj elemenata kao ni za vrednosti atrubuta; modeli sadržaja se teško čitaju; jedna sintaksa se koristi za opis dokumenta, a druga za opis njegove strukture, tj. za DTD.

Zbog toga je Schema Working Group W3C predložila XML Schema kao alternativu za DTD. Za razliku od DTD-a, sintaksa XML šeme je dobro formirani XML dokument, a prednost toga je da korisnik može da koristi neki od mnogih XML alata i za pripremu šeme i za pripremu dokumenta. XML šeme, takodje daje mnogo više mogućnosti za opis tipova podataka, tako da je šema atraktivan jezik koji može da nametne stroge uslove za ulazne podatke.

Jedan primer XML šeme Uzmimo za primer popis stanovnika. Recimo da popisivač ide od vrata do vrata i upisuje informacije u džepni računar. Primena XML šeme mu omogućava da organizuje podatke i nametne tipove podataka tako da ne može da upiše pogrešne podatke u polja. Primerak dokumenta bi mogao da izgleda ovako:

Primer dokumenta: <popis date="1999-03-25"> <popisivač>724</popisivač> <adresa> <ulica>Dva bela goluba</ulica> <broj>26</broj> <grad>Kamengrad</grad> </adresa> <stanari> <stanar status="odrastao"> <ime>Fred</ime> <prezime>Kremenko</prezime>

27


<starost>30</starost> </stanar> <stanar status="odrastao"> <ime>Vilma</ime> <prezime>Kremenko</prezime> <starost>28</starost> </stanar> <stanar status="dete"> <ime>Kamičak</ime> <prezime>Kremenko</prezime> <starost>2</starost> </stanar> </stanari> </popis>

Struktura XML šeme U svakoj šemi prvi red identifikuje dokument kao šemu i pridružuje mu prostor imena XML šeme. Sledeći element u strukturi je <annotation> i u okviru njega se opisuje namena šeme i drugi detalji vezani za nju.

Primer početka XML šeme: <xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema" > <xsd:annottation> <xsd:documentation> Obrazac za popis stanovništva u Kamengradu Odeljenje za popis </xsd:documentation> </xsd:annotation>

Deklaracije elemenata i atributa Elementi koji se deklarišu mogu biti složeni i jednostavni. Jednostavni su oni elementi koji nemaju atribute i u čijem sadržaju nema drugih elemenata. Koreni element je uvek složen po prirodi stvari. U deklaraciji elemenata vrednost atributa name je generičko ime elementa, dok je vrednost atributa type tip elementa i to je ono što odgovara modelu sadržaja u DTD-u. Ako tip elementa nije predefinisan može mu se dodeliti ime koje se kasnije deklariše. Tako deklarisani tip može se

28


koristiti za deklaraciju sadržaja više različitih elemenata. U deklaraciji tipa se deklariše ne samo model sadržaja, već i novi elementi i atributi. U deklaraciji tipa može se obaviti i restrikcija modela sadržaja. To omogućavaju atributi minOccurs i maxOccurs koji postavljaju koliko puta se neki element može pojaviti. Vrednost minOccurs=0 znači da je element opcioni, a maxOccurs=* da je opcioni i ponovljiv.

Dekaracija korenog elementa i njegovog sadržaja <xsd:element name="popis" type="TipPopis"/> <xds:ComplexType name="TipPopis"> <xsd:element name="popisivač" type="xsd:decimal" minoccurs="0"/> <xsd:element name="adresa" type="Adresa"/> <xsd:element name="stanari" type="Stanari"/> <xsd:attribute name="datum" type="xsd:datum"/> </xsd:complexType>

Tipovi podataka Deklaracija svakog elementa ili atributa ima u XML šemi atribut type. Neki tipovi su predefinisani, kao string koji predstavlja karakterske podatke (kao CDATA u DTD-u), ili decimal kojim se deklarišu brojevne vrednosti.

Predefinisani tipovi podataka U DTD-u ne postoji način da se karakterski podaci (kao deo sadržaja elementa) ograniče obrascem, dok u XML šemi za to postoji mnogo načina. Neki predefinisani tipovi su: byte, float, long

Ovu su numerički formati: byte je 8-bitni ceo broj, long je 32-bitni ceo broj, a float je realni broj u pokretnom zarezu. time, date, timeinstant, timeduration

Ovo su obrasci za specifikovanje datuma, vremenskog trenutka i vremenskog trajanja boolean

Vrednosti mogu da budu true i false, ili numerički ekvivalenti 1 i 0. binary

29


Obrazac za binarne vrednosti kao 00101110. language

Kod jezika koji dokument koristi, npr. en-US. uri-reference

Obrazac za bilo koji URI. ID, IDREF, IDREFS, NMOTIKEN, NMTOKENS

Tipovi atributa koji funkcionišu kao i odgovarajući obrasci u DTD-u. Postoji još mnogo tipova što čini da je XML šema vrlo zgodna za neke tipove dokumenata, posebno ona koja su vezana za aplikacije obrade podataka, kakve su baze podataka i obrade ulaznih formulara. Umesto da se piše zaseban program koji proverava tipove podataka, to radi XML parser.

Aspekti (engl. facets) Aspekti su osobine koje se koriste za specifikovanje tipova podataka, kao što je postavljanje granica za vrednosti podataka. Postoji više različitih apekata u XML šemi, kao što su max-inclusive, precision, scale, encoding, pattern, enumeration, max-length, i drugi.

Obrasci (engl. patterns) Ako među predefinisanim obrascima nema onog koji je korisniku potreban, on može da kreira sopstveni obrazac. Jedan takav obrazac je, na primer, dat regularnim izrazom [A-Z]-d{3} kojim se deklariše vrednost atributa za poštanski kod kao "niska koja se sastoji od bilo kog slova iz koga sledi crtica a zatim tačno tri cifre".

Primer XML �eme (nastavak) <xsd:complexType name="Adresa"> <xsd:element name="ulica" type="xsd:string"/> <xsd:element name="broj" type="xsd:decimal:/> <xsd:element name="grad" type="xsd:string"/> <xsd:attribute name="PBroj" type="PBroj"/> <xsd:complexType> <xsd:simpleType name="PBroj" base="xsd:string"> <xsd:pattern value="[A-Z]-d{3}"/> </xsd:simpleType>

30


<xsd:complexType name="Stanari"> <xsd:element name="stanar" minOccurs="1" maxOccurs="50"> <xsd:complexType> <xsd:element name="ime" type="xsd:string"/> <xsd:element name="prezime" type=xsd:string/> <xsd:element name="starost"> <xsd:simpleType base="xsd:positive-integer"> <xsd:maxExclusive value="200"/> </xsd:simpleType> <xsd:element> </xsd:complexType> </xsd:element> </xsd:complexType>

Napredne mogućnosti Elementi, kao i atributi, mogu da imaju vrednosti koje se pobrojavaju. Deklaracije se mogu tako grupisati da nasleđuju ista svojstva, a takođe je moguće i složenije modeliranje sadržaja. XML šeme omogućavaju nasleđivanje svojstava drugi deklaracija na objektno-orijentisan način. XML šema je zanimljiva alternativa za DTD zato što omogućava da se polja dokumenata mnogo preciznije opišu. Ipak, to nije zamena za DTD, a i nema razloga da postoji samo jedan način za opisivanje strukture dokumenta. I DTD ima svoje dobre osobine: kompaktnost, poznata sintaksa, jednostavnost. U budućnosti se mogu očekivati još neki mogući modeli za definisanje sadržaja.

31


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.