XML Extensible Markup Language XML markup language slino
XML – Extensible Markup Language • XML – markup language, slično HTML-u • Za razliku od HTML-a, namenjen je prenosu strukturiranih podataka, a ne prikazu kao HTML • XML se takođe sastoji iz tag-ova koji se mogu proizvoljno definisati, nisu predefinisani • XML kod može da se čita iz programa, a takođe je razumljiv i za ljude kada se gleda iz editora • XML kod se sastoji iz običnog teksta koji može jednostavno da se prenosi između različitih platformi i programa
XML podaci • Pomoću XML-a podaci mogu da se strukturiraju na prirodan način, preslikan ili diktiran strukturom problema ili sistema koji se obrađuje • Podaci se na pogodan način mogu izdvojiti iz html dokumenta, i drzati u posebnom file-u • Podaci se mogu programski čitati i ubacivati u html kod, čime se podaci razdvajaju od prikaza • Podaci se tradicionalno čuvaju u file-ovima i tabelama baza podataka koji imaju određene formate i programski im se pristupa na složen način preko raznih API-a
Istorijat XML-a • XML je nastao iz SGML-a – Standard Generalized Markup Language • SGML je razvijen da omogući deljenje – razmenu i čitljivost raznih dokumenata za potrebe vlade, industrije u toku dužeg perioda – više decenija • HTML predstavlja aplikaciju koja je razvijena u SGML-u • OED – Oxford English Dictionary je takođe urađen korišćenjem SGML oznaka • XHTML je html aplikacija u XML-u
Primer XML dokumenta • <? xml version="1. 0" encoding="ISO-8859 -1"? > <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> • XML dokumenti formiraju hijerarhijsku strukturu tipa stabla, slično kao i html dokumenti • Svi XML elementi mogu imati tekstualni sadržaj i atribute kao i HTML elementi
Dijagram stabla XML dokumenta
Xml kod za prethodni dijagram stabla • <bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30. 00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29. 99</price> </book> <book category="WEB"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39. 95</price> </bookstore>
XML sintaksa • Svi xml elementi moraju imati početni izavršni tag • Deklaracija xmla-a nije deo xml-a i zato nema završni tag • Xml tag-ovi su case sensitive – razlikuju mala i velika slova • Hijerarhijski Xml elementi moraju biti upareni na odgovarajući način – početni i završni tag na istom nivou • Xml element na najvišem nivou je koren stabla xml strukture
XML sintaksa (2) • Atributi xml elemenata moraju biti u navodnicima – quotes • Specijalni znaci u xml-u <, >, &, ‘, “ • < < less than • > > greaterthan • & & ampersand • ' ‘ apostrophe • " “ quotation mark • Komentari u xml-u <!-- This is a comment --> • Više uzastopnih razmaka se tretira kao jedan
XML elementi • Xml element je sve između početnog i završnog tag-a • Xml element može da sadrži običan tekst, druge xml elemente i atribute • Nema rezervisanih reči u xml-u • Ipak, imena xml elemenata – tag-ova ne mogu počinjati sa xml, XML, Xml • Imena mogu da sadrže slova, cifre i druge znake • Imena moraju početi sa slovom • Imena ne mogu da sadrže razmake
XML elementi • U xml-u kao i u html-u atributi daju dodatne informacije o elementima • Atributi se mogu koristiti alternativno umesto ugneždenih xml elemenata • <note date="10/01/2008"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
Drugi (ekvivalentni) način • <note> <date>10/01/2008</date> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
Treći (ekvivalentni) način • <note> <day>10</day> <month>01</month> <year>2008</year> </date> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>
Atributi ili ugneždeni elementi? • Atributi ne mogu da sadrže višestruke vrednosti – elementi mogu • Atributi ne mogu da sadrže strukture tipa stabla – elementi mogu • Atributi se ne proširuju elegantno kao elementi • Atributi se teže uočavaju, čitaju i održavaju • Atribute treba koristiti za opis svojstava koja se ne odnose na podatke
Ne preporučuje se: • <note day="10" month="01" year="2008" to="Tove" from="Jani" heading="Reminder" body="Don't forget me this weekend!"> </note> • Čitava struktura složenog pojma “note” je predstavljena na alternativan način, samo sa atributima umesto ugnežedenih elemenata što nije pogodno i nepregledno je • Sa druge strane, gornji xml elemenat je sasvim korektan, u saglasnosti sa xml sintaksom • Informativni sadržaj međutim nije savim isti, iako su prisutni svi isti podaci • Sa atributima nema prikaza složene strukture na više nivoa, jer su svi atributi na istom nivou
Well formed – korektni xml dokumenti • Korektni xml dokumenti imaju tačnu sintaksu • Valid xml document odgovara pravilima u DTD – Document Type Definition • XML DTD definiše strukturu dokumenta i listu dozvoljenih xml elemenata • DTD može da služi za kreiranje definicije novog “standarda” za razmenu standardnih dokumenata između grupe korisnika • XML Schema je drugi, superironiji način definisanja strukture xml dokumenta
Referenca na xml dokument • <? xml version="1. 0" encoding="ISO-8859 -1"? > <!DOCTYPE note SYSTEM "Note. dtd"> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body> Don't forget me this weekend! </body> </note>
XML greške • W 3 c specifikacija navodi da greška u xml dokumentu treba da zaustavi xml aplikaciju – program koji čita xml dokument • Web browser-i koji čitaju html dokumente tolerišu greške i daju najbolji prikaz sa greškama u html kodu, zbog čega su veoma složeni programi • Xml aplikacije treba da budu jednostavne i ne treba da se bave prikazom grešaka • XML validator-i su programi koji proveravaju sintaksu xml dokumenata
Prikaz XML-a iz web browser-a
Prikaz XML-a • <? xml version="1. 0" encoding="ISO-8859 -1"? > • - <note> • <to>Tove</to> • <from>Jani</from> • <heading>Reminder</heading> • <body>Don't forget me this weekend!</body> • </note>
View source prikaz – Google chrome
Prikaz XML dokumenta Sea. Monkey
Zašto se xml prikazuje tako? • Xml dokumenti ne sadrže informacije o prikazu podataka koje sadrže • Tag-ovi u xml dokumentu ne sadrže nikakvo značenje za web browser – program koji čita xml dokument • Pošto nemaju nikakve informacije o tome kako da prikažu podatke, browser-i uglavnom prikazuju xml dokument onakav kakav jeste • Prikaz xml-a se može poboljšati korišćenjem CSS-a, XSLT-a i Java. Script-a
Prikaz XML-a sa CSS-om • <? xml version="1. 0" encoding="ISO-8859 -1"? > <? xml-stylesheet type="text/css" href="cd_catalog. css"? > <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10. 90</PRICE> <YEAR>1985</YEAR> </CD> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <PRICE>9. 90</PRICE> <YEAR>1988</YEAR> </CD>. . . </CATALOG>
Definicija stila u eksternom file-u • CATALOG { background-color: #ffffff; width: 100%; } • CD { display: block; margin-bottom: 30 pt; margin-left: 0; } • TITLE { color: #FF 0000; font-size: 20 pt; } • ARTIST { color: #0000 FF; font-size: 20 pt; } • COUNTRY, PRICE, YEAR, COMPANY { display: block; color: #000000; margin-left: 20 pt;
Formatirani XML sa CSS-om
Prikaz XML-a sa XSLT-om • XSLT (e. Xtensible Stylesheet Language Transformations) • XSLT je preporučeni jezik stila za XML
Povezivanje XLST-a sa XML-om
XML parser • XML parser analizira xml kod i u memoriji browser-a kreira sistem objekata – XML DOM koji odgovara strukturi XML-a i kojima može da pristupi Java. Script • Savremeni browser-i imaju ugrađen XML parser • Postoje razlike između parser-a ugrađenih u Microsoft Internet Explorer, i u druge browser-e • MSIE koristi objekat za učitavanje xml file-a i xml teksta – string, ali sa različitim metodama, dok ostali browser-i koriste odvojene objekte za to
XML DOM • Analogno HTML DOM-u, XML DOM predstavlja standardni način za pristup i rad sa XML dokumentima • XML DOM predstavlja XML dokument kao hijerarhijsku strukturu tipa stabla • XML elementima se pristupa kao čvorovima ekvivalentnog stabla koje je određeno strukturom XML dokumenta • Sadržaj XML elemenata – atributi i tekst mogu da se brišu i modifikuju, novi čvorovi mogu da se kreiraju
Pristup čvorovima XML DOM-a
XML to HTML
Izlaz dobijen Java Scriptom
XMLHttp. Request objekat • XMLHttp. Request objekat omogućava da se web strana ažurira pošto se u celini učita sa servera. • To je osnova AJAX (Active JAvascript and Xml) tehnologije koja suštinski omogućava da se od web servera potraže dodatni podaci kojima se onda pomoću Java. Script-a i HTML DOM-a može promeniti samo deo web strane • Web strana se onda menja – ažurira podacima sa web servera, ali bez ponovnog ucitavanja • Efekat je da izmena ide brže i nema ponovnog učitavanja web strane – treptanja čitave slike • Postiže se da web aplikacija još više liči na desk top aplikaciju
Kreiranje Xml. Http. Request objekta • U Java. Script-u se Xml. Http. Request objekat kreira sa: • var xmlhttp=new XMLHttp. Request() • To važi za sve browser-e i za MSIE v 7 • Za MSIE v 5 i 6 je nešto drugačije: • var xmlhttp = new Active. XObject("Microsoft. XMLHTTP") • Dakle, očigledno se Microsoft prilagodio ostatku sveta (malo kasno) ali je ipak ostala potreba da se za prethodne verzije 5 i 6 vrši dodatna provera sa drugim objektom
AJAX primer
Opis rada xmlhttp. onreadystatechange=state_Change; xmlhttp. open("GET", url, true); xmlhttp. send(null);
Kod za prijem podataka sa servera • • } function state_Change() { if (xmlhttp. ready. State==4) { // 4 = "loaded" if (xmlhttp. status==200) {// 200 = "OK" document. get. Element. By. Id('A 1'). inner. HTML=xmlhttp. st atus; document. get. Element. By. Id('A 2'). inner. HTML=xmlhttp. st atus. Text; document. get. Element. By. Id('A 3'). inner. HTML=xmlhttp. re sponse. Text; } else { alert("Problem retrieving XML data: " + xmlhttp. status. Text); } }
Html kod ostatka web strane • <body> • <h 2>Using the Http. Request Object</h 2> <p><b>Status: </b> <span id="A 1"></span> </p> • <p><b>Status text: </b> • <span id="A 2"></span> </p> • <p><b>Response: </b> • <span id="A 3"></span> </p> • <button onclick="load. XMLDoc('note. xml')"> – Get XML • </button> • </body>
Izgled u prozoru browser-a
AJAX Web aplikacija za učitavanje podataka iz XML dokumenta sa CD-ima • • • • • function on. Response() { if(xmlhttp. ready. State!=4) return; if(xmlhttp. status!=200) { alert("Problem retrieving XML data"); return; } txt="<table border='1'>"; x=xmlhttp. response. XML. document. Element. get. Elements. By. Tag. Name("CD"); for (i=0; i<x. length; i++) { txt=txt + "<tr>"; xx=x[i]. get. Elements. By. Tag. Name("TITLE"); { try { txt=txt + "<td>" + xx[0]. first. Child. node. Value + "</td>"; } catch (er) { txt=txt + "<td> </td>"; } } xx=x[i]. get. Elements. By. Tag. Name("ARTIST"); { try { txt=txt + "<td>" + xx[0]. first. Child. node. Value + "</td>"; } catch (er) { txt=txt + "<td> </td>"; } } txt=txt + "</tr>"; } txt=txt + "</table>"; document. get. Element. By. Id('copy'). inner. HTML=txt; }
XML dokument koji se učitava i prikazuje na web strani • <? xml version="1. 0" encoding="ISO-8859 -1"? > <? xml-stylesheet type="text/css" href="cd_catalog. css"? > <CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10. 90</PRICE> <YEAR>1985</YEAR> </CD> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <PRICE>9. 90</PRICE> <YEAR>1988</YEAR> </CD>. . . </CATALOG>
Ostatak html strane • <body> – <div id="copy"> – <button onclick="load. XMLDoc('cd_catalog. xml')"> • Get CD info – </button> – </div> • </body>
Funkcija load. XMLDoc(url) • • • • <script type="text/javascript"> var xmlhttp; function load. XMLDoc(url) { xmlhttp=null; if (window. XMLHttp. Request) { // code for IE 7, Firefox, Mozilla, etc. xmlhttp=new XMLHttp. Request(); } else if (window. Active. XObject) { // code for IE 5, IE 6 xmlhttp=new Active. XObject("Microsoft. XMLHTTP"); } if (xmlhttp!=null) { xmlhttp. onreadystatechange=on. Response; xmlhttp. open("GET", url, true); xmlhttp. send(null); } else { alert("Your browser does not support XMLHTTP. "); }}
Prikaz u prozoru web browser-a
XML aplikacija • Analiza zahtevane funkcionalnosti: • Web strana – user interface za prikaz podataka sa CD-a • Podaci o pesmama na CD-u se nalaze u posebnom XML dokumentu • Gde se nalazi taj dokument? • U ovom slučaju se nalazi u tekućem folderu, tj. u istom folderu u kome se nalazi i html dokument • A rekli smo koliko još na prethodnom času da Java. Script ne može da učitava file-ove sa lokalnog računara
XML aplikacija (2) • Ovo je na neki način izuzetak, jer file mora biti validan xml dokument, inače ništa neće biti učitano • Web strana treba da ima navigaciju, tako da se naslovi na CD-u mogu posmatrati jedan po jedan u redosledu • Projektovanje aplikacije • Podaci sa CD-a će se učitati u memoriju iz xml file-a odjednom, tako da će biti dostupni kao članovi kolekcije objekta parser • Dva dugmeta za navigaciju će služiti za kretanje po naslovima
Implementacija – učitavanje podataka iz xml file-a • var xml. Doc; if (window. Active. XObject) {// code for IE xml. Doc=new Active. XObject("Microsoft. XMLDOM"); } else if (document. implementation. create. Document) {// code for Firefox, Mozilla, Opera, etc. xml. Doc=document. implementation. create. Document("", null); } else { alert('Your browser cannot handle this script'); } xml. Doc. async=false;
Implementacija - Prikaz podataka u html tabeli • document. write("<table border='1'>"); var x=xml. Doc. get. Elements. By. Tag. Name("CD"); for (var i=0; i<x. length; i++) { document. write("<tr>"); document. write("<td>"); document. write( x[i]. get. Elements. By. Tag. Name("ARTIST")[0]. child. Nodes[0]. node. Value); document. write("</td>"); document. write("<td>"); document. write( x[i]. get. Elements. By. Tag. Name("TITLE")[0]. child. Nodes[0]. node. Value); document. write("</td>"); document. write("</tr>"); } document. write("</table>");
Implementacija – drugi način prikaza podataka – u bilo kom html elementu koji se zove show • function display() { artist= (x[i]. get. Elements. By. Tag. Name("ARTIST")[0]. child. Nodes[0]. node Value); title= (x[i]. get. Elements. By. Tag. Name("TITLE")[0]. child. Nodes[0]. node. Va lue); year= (x[i]. get. Elements. By. Tag. Name("YEAR")[0]. child. Nodes[0]. node. Va lue); txt="Artist: "+artist+" Title: "+title+" Year: "+year; document. get. Element. By. Id("show"). inner. HTML=txt; }
Implementacija – skript za navigaciju • function next() { if (i<x. length-1) { i++; display(); } } function previous() { if (i>0) { i--; display(); } }
Implementacija – html dokument za prikaz – user interface • • <body onload="display()"> <div id='show'></div> <input type="button" onclick="previous()" value="previous" /> • <input type="button" onclick="next()" value="next" /> • </body>
Testiranje - eksploatacija
XML PCDATA • PCDATA – Parsed Character Data su svi elementi unutar xml dokumenta, koji se normalno parsiraju • Kada se parsira neki xml elemenat, takođe se parsira sve unutar tog elementa • <message>This text is also parsed</message> • iz razloga što se tamo mogu nalaziti ugneždeni dodatni xml elementi – potomci • <name><first>Bill</first><last>Gates</last></name> • <name> <first>Bill</first> <last>Gates</last> </name>
XML CDATA • CDATA – Character DATA – unparsed • Označava podatke unutar xnl dokumenta koji ne treba da se parsiraju • Znaci “<“ I “&” nisu dozvoljeni u xml dokumentima • Pošto Java. Script kod može da sadrži dosta takvih elemenata, onda se čitav Java. Script kod može proglasiti kao CDATA sekcije ‘ deo xml dokumenta, u kom slučaju će biti ignorisan od strane xml parser-a, kao komentar
CDATA primer • <script> <![CDATA[ function matchwo(a, b) { if (a < b && a < 0) then { return 1; } else { return 0; } } ]]> </script>
Xml dokument sa knjigama <bookstore> <book category="COOKING"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30. 00</price> </book> <book category="CHILDREN"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29. 99</price> </book>
Očitavanje vrednosti xml elementa
Očitavanje vrednosti atributa xml elementa
- Slides: 71