Kurs: XML tehnologije i veb servisi
Modul: XML tehnologije
Autor: Vladimir Marić
Naziv jedinice: Uvod u XML
Materijali vezani uz ovu lekciju:
-
Test uvod u xml -
Uvod u XML (PDF dokument)
Šta je XML (Extended Markup Language)
Jedan od cestih pojmova upotrebljavanih u kontekstu današnjeg programiranja jeste XML. Ovaj pojam cesto se „bespravno” upotrebljava da prezentuje programski jezik, iako XML to, u stvari, nije. XML je, naime, samo nacin za serijalizaciju podataka, odnosno nacin na koji cemo jednostavno i brzo moci da zapamtimo podatke (a da pri tom to nije baza podataka) i prosledimo ih nekome ko ce ih takode razumeti, jer poštujemo iste konvencije.
Istorija XML-a pocinje još 60-ih godina prošlog veka, kada je u IBM-u konstruisan prvi višenamenski jezik za serializaciju podataka. Ovaj jezik zvao se GML (Generalized Markup Language). Uspeh ovog jezika, doveo je do nastavka istraživanja na ovom polju, i rezultirao jezikom SGML (Standard Generalize Markup Language).
Deo SGML jezika iskorišcen je za HTML-a (izgradnju HyperText Markup Language), dok je ostatak korišten za kompleksnije Internet aplikacije.
1996. godine pocet je rad na uprošcenoj verziji SGML-a, cija je komplikovanost ucinila da bude upotrebljavan samo u jakim i velikim institucijama. Ovaj rad je rezultirao stvaranjem XML-a za ciju se godinu nastanka smatra 1998. Do danas poznajemo dve verzije i nekoliko meduverzija XML-a: XML 1.0 i XML 1.1. Osnovna razlika je u rukovanju novim Unicode setovima, s obzirom na to da razvoj XML-a ne prati paralelno i proširenje Unicode-a.
XML je vec odavno standardni serijalizacioni jezik i na njemu su cak bazirani i neki drugi, specificni jezici serijalizacije: xhtml, wsdl, wml (wap xml), rss, rdf, owl, smil, xslt...
Sintaksa
Sa sintaksom XML-a smo se sreli pisanjem bilo kog HTML taga jer XML poštuje konvencije tagova, kao i HTML. Štaviše, i sama struktura tih tagova identicna je HTML-u jer se poštuje isti princip elemenata i atributa.
Ipak, postoje neke osobenosti karakteristicne iskljucivo za XML.
Pre svega, XML je osetljiv na mala i velika slova (Case Sensitive). Zatim, ne sme u svom telu sadržati specijalne karaktere (njih treba prevesti u odgovarajuce ascii kodove). I konacno, trebalo bi da poseduje odredenu strukturu (da ima koren, deklaraciju verzije...)
XML se sastoji od tagova, odnosno, od elemenata i atributa. Tag je selekcija u nekom dokumentu markirana odredenim oznakama i nazivom. Ove oznake su < i >, a naziv taga može biti bilo koji tekst, sve dok ostaju ispoštovane konvencije aktuelnog tag jezika.
Na primer:
<mojTag>
Ovo je pravilno napisan tag, ali nedovoljan da zaokruži jednu celinu u XML dokumentu. Da bi neka celina bila zaokružena u XML-u, potrebna su bar dva taga. Jedan otvarajuci i jedan zatvarajuci ili, eventualno, jedan "samozatvarajuci" tag:
<mojTag></mojTag>
ili
<mojTag />
Zatvarajuci tag izgleda isto kao i otvarajuci, osim oznake / koja se nalazi odmah na njegovom pocetku. Kada je tag samozatvarajuci, oznaka / se nalazi pre njegovog završetka. Pravilno postavljena dva istoimena taga cine jedan element i sve unutar njih cini sadržaj tog elementa:
<mojTag>Moj element</mojTag>
Logicno, samozatvarajuci tag ne može imati sadržaj, ali to ne znaci da on nije element. Iako nije u stanju da "nosi" sadržaj, još uvek može imati atribute.
Atributi su još jedan odeljak u kome XML element može nositi podatke. Nalaze se u otvarajucem tagu i oznacavaju se po sistemu kljuc=vrednost:
<mojElement atribut="moj atribut">Sadrzaj</mojElement>
ili
<mojElement atribut="moj atribut" />
Jedan element može imati podelemente, koji mogu takode biti elementi... To znaci da jedan XML dokument ima strukturu stabla.
Struktura XML-a
Svaki XML fajl trebalo bi da poseduje deklaraciju:
<?xml version="1.0"? encoding="UTF-8" ?>
U deklaraciji prosledujemo procesoru XML-a osnovne podatke o dokumentu: koja verzija XML-a je u pitanju, koji kodni raspored je korišcen u dokumentu...
Zatim, opciona je i deklaracija tipa dokumenta koja oznacava set pravila koja ce biti poštovana tokom parsiranja dokumenta. Ova deklaracija može biti napravljena direktno u dokumentu ili ucitana iz eksternog izvora:
<!DOCTYPE film SYSTEM "test.dtd">
Nakon DTD-a sledi koreni (Document) element dokumenta i konacno, naši serijalizovani podaci. Konacno, cela XML struktura izgleda ovako:
Prolog (Ovo je opis dokumenta, nije obavezan)
XML Deklaracija (XML ce funkcionisati i bez deklaracije, ali je poželjno da ona postoji)
DTD Deklaracija (Za kompleksnije serijalizacije)
Element (Dokument)
Elementi (Lista elemenata)
Element – Atributi i vrednosti (Stavke iz liste)
Podaci (Podaci po stavci)
Recimo da želimo da stvorimo jedan XML dokument u kome ce biti lista država:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<drzava oznakaDrzave="sr">
<naziv>Srbija</naziv>
<glavniGrad>Beograd</glavniGrad>
<opis>Opis Srbije.....</opis>
</drzava>
<drzava oznakaDrzave ="fr">
<naziv>Francuska</naziv>
<glavniGrad>Pariz</glavniGrad>
<opis>Opis Francuske.....</opis>
</drzava>
</root>
Jasno je razaznati elemente pomenute u prethodnom delu lekcije. Root je koren dokumenta, drzava predstavlja jedan element; oznakaDrzave je atribut tog elementa, a naziv, glavniGrad i opis su ugnježdeni elementi (podelementi) elementa drzava.
Svaki XML dokument koji poseduje adekvatnu strukturu i poštuje sva sintaksna pravila, naziva se dobro formirani XML ili Well Formed XML. Ukoliko dokument sadrži i validacionu deklaraciju (koja ne izaziva validacionu grešku), naziva se validni, odnosno Valid XML. Deklaraciju možemo i sami napisati koristeci DTD (Document Type Definition) jezik.
Na primer:
<!ELEMENT drzava (naziv,glavniGrad,opis)>
<!ATTLIST drzava oznakaDrzave CDATA "">
<!ELEMENT naziv (#PCDATA)>
<!ELEMENT glavniGrad (#PCDATA)>
<!ELEMENT opis (#PCDATA)>
Ako bismo ovakvu definiciju snimili u fajl test.dtd, validacija u sledecem kodu (neki XML fajl), bila bi izvršena:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE drzava SYSTEM "test.dtd">
<drzava oznakaDrzave="sr">
<naziv>Srbija</naziv>
<glavniGrad>Beograd</glavniGrad>
<opis>Opis Srbije.....</opis>
</drzava>
Takode, umesto referenciranja na eksterni fajl, definiciju dokumenta možemo implementirati i u sam XML fajl:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE drzava
[
<!ELEMENT drzava (naziv,glavniGrad,opis)>
<!ATTLIST drzava oznakaDrzave CDATA "">
<!ELEMENT naziv (#PCDATA)>
<!ELEMENT glavniGrad (#PCDATA)>
<!ELEMENT opis (#PCDATA)>
]>
<drzava oznakaDrzave="sr">
<naziv>Srbija</naziv>
<glavniGrad>Beograd</glavniGrad>
<opis>Opis Srbije.....</opis>
</drzava>
Analizu kompletnog DTD jezika necemo vršiti u ovom kursu.
Alternativa DTD-u je XSD (XML Schema Definition). XML šema je i sama predstavljena XML strukturom.
XML šema:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="drzava">
<xs:complexType>
<xs:sequence>
<xs:element name="naziv" type="xs:string" />
<xs:element name="glavniGrad" type="xs:string" />
<xs:element name="opis" type="xs:string" />
</xs:sequence>
<xs:attribute name="oznakaDrzave" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:schema>
Xml dokument:
<?xml version="1.0" encoding="UTF-8"?>
<drzava
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="test.xsd"
oznakaDrzave="sr">
<naziv>Srbija</naziv>
<glavniGrad>Beograd</glavniGrad>
<opis>Opis Srbije.....</opis>
</drzava>
Pravila pisanja
Postoje neki karakteri koje ne možemo uneti u XML sadržaj. Na primer, karater <. XML nije u stanju da interpretira ovaj karater adekvatno, zbog cega dolazi do greške. Da bismo predupredili ovakve greške, a ipak zadržali mogucnost da ovaj karakter sacuvamo u XML-u, koristimo enkodirane karaktere (reference na karaktere).
< - <
> - >
& - &
' - '
" - "
<mojElement atribut="moj atribut">Vece - > </mojElement>
Ovako napisan element nece prijaviti grešku prilikom parsiranja.
Komentarisani kod znaci da parser nece uzeti u obzir taj deo koda. U XML-u komentar se piše na sledeci nacin:
<!-- Komentar -->
odnosno
<mojElement atribut="moj atribut">Sadržaj</mojElement><!-- moj komentar -->
Ovo pravilo važi samo za parsiranje XML-a. I komentar dodat na ovaj nacin i dalje ce biti sastavni deo jednog XML dokumenta.
Pregled XML dokumenata
Sadržaj XML dokumenata pregledamo na više nacina:
Iz pretraživaca - obicno svaki pretraživac poseduje svoj mehanizam za pregled XML dokumenata, ali generalno, vecina izgleda isto.
Preradeni, deserijalizovani od strane programa koji ih parsira - svakodnevno rukujemo sa mnoštvom XML dokumenata, a da to i ne znamo. Vecina programa cuva podešavanja i ostale podatke u XML formatu.
U izvornom obliku - kao cist tekst.
XML dokument se može i stilizovati na klijentu, CSS i XSLT stilovima.
Najvažnije iz ove lekcije:
XML je jezik za serijalizaciju podataka, ali ne i jezik za njihovu obradu.
XML fajlovi su tekstualni fajlovi, sa posebnom strukturom.
XML se sastoji od tagova.
XML je Case Sensitive – osetljiv na velika i mala slova.
U XML strukturi razlikujemo elemente i atribute.
Dobro formirani XML podrazumeva deklaraciju sa verzijom i kodnim rasporedom.
XML mora imati koreni element.