310 likes | 562 Views
Uporaba XML-a u Javi. Autor: Ivor Herak Mentor: mr. sc. Marko Čupić. Sadržaj prezentacije. 1) Kratko upoznavanje s XML-om 2) Uporaba XML-a u Javi 3) Zaključak. Što je XML i čemu služi?. kratica od “Extensible Markup Language” glavna namjena XML-a je olakšavanje pohrane i razmjene podataka.
E N D
Uporaba XML-a u Javi Autor: Ivor Herak Mentor: mr. sc. Marko Čupić
Sadržaj prezentacije 1) Kratko upoznavanje s XML-om 2) Uporaba XML-a u Javi 3) Zaključak
Što je XML i čemu služi? • kratica od “Extensible Markup Language” • glavna namjena XML-a je olakšavanje pohrane i razmjene podataka
Osnove XML-a • XML dokument obično počinje prologom <?xml version="1.0" encoding="utf-8" ?>
POČETNA OZNAKA SADRŽAJ ZAVRŠNA OZNAKA Osnove XML-a – elementi • osnovne komponente XML dokumenta <pjesma> <ime>Space Oddity</ime> <izvođač>David Bowie</izvođač> </pjesma>
Osnove XML-a – atributi • svaki element može sadržavati atribute <pjesma id="1" > <ime>Space Oddity</ime> <izvođač>David Bowie</izvođač> </pjesma> ATRIBUT
Osnove XML-a • također mogu postojati i prazni elementi <pjesma id="1"> <live/> <ime>Space Oddity</ime> <izvođač>David Bowie</izvođač> </pjesma> PRAZAN ELEMENT
Dobro oblikovanje XML dokumenta • u dokumentu mora postojati korijenski element • elementi moraju biti pravilno ugniježđeni • svaka početna oznaka mora biti terminirana odgovarajućom završnom oznakom
Loše oblikovani XML dokument <poruka> <tekst> Neka poruka. </poruka> </tekst>
Valjanost XML dokumenta • XML sheme sadrže pravila o tome kako mora biti oblikovan XML dokument • dokument mora poštivati pravila sheme
PROLOG Ispravan XML dokument <?xml version="1.0" encoding="utf-8" ?> <glazba> <pjesma id="1"> <ime>Space Oddity</ime> <izvođač>David Bowie</izvođač> </pjesma> <pjesma id="2"> <ime>Dirty Harry</ime> <izvođač>Gorillaz</izvođač> </pjesma> </glazba> ROOT ELEMENT
XML u Javi • dva najvažnija API-a za pristup XML dokumentima u Javi su SAX i DOM • također je razvijen i alat Apache Digester
SAX API • temelji se na serijskom čitanju XML dokumenta • implementiramo metode sučelja SaxParsera, ima ih 4 • najvažnije sučelje je ContentHandler
SAX API – ContentHandler startElement(String namespaceURI, String sName, String ime, Attributes atributi); characters(char buf[], int offset, int len); endElement(String namespaceURI, String sName, String ime);
SAX API – stvaranje analizatora SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser analizator = spf.newSAXParser(); analizator.parse(String file, DefaultHandler h);
SAX API - primjer publicclass BrojacPjesama extends DefaultHandler{ privatestaticintbrojač = 0; publicvoid startElement( String namespaceURI, String sName, String ime, Attributes atributi) { if (ime.equals("pjesma")){ brojač++; } } }
SAX API - nedostatci • ne prepoznaje se kontekst pronalaska komponenata • potrebno je puno kodiranja čak i za najjednostavnije aplikacije
DOM API • XML dokument pročita se odjednom u memoriju i pohrani se u obliku stabla • čvorovi stabla su komponente dokumenta
DOM API - stvaranje analizatora DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Documentdokument = builder.parse(String file);
DOM API – razred Node • čvorovima pristupamo uz pomoć razreda Node • u tom razredu su definirane razne metode za manipulaciju čvorovima
DOM API • prednosti: - jednostavniji za uporabu od SAX-a • nedostatci: - zahtijeva puno memorije
Apache Digester • definiran je razred Digester koji obrađuje dokument • dokument se obrađuje tako da se zadaju pravila po kojima se ravna Digester
Apache Digester – primjer Pjesma publicclass Pjesma { private String izvođač; private String ime; privateint id; ... // getteri i setteri }
Apache Digester – primjer Kompilacija publicclass Kompilacija { private List<Pjesma> pjesme; publicvoid dodajPjesmu(Pjesma p){ ... } }
Apache Digester - primjer publicstaticvoid main(String[] args) { Digester digester = new Digester(); Kompilacija kompilacija = new Kompilacija(); digester.push(kompilacija); dodajPravila(digester); digester.parse( new File("Glazba.xml") ); }
Apache Digester - primjer digester.addObjectCreate( "glazba/pjesma", Pjesma.class); digester.addSetProperties( "glazba/pjesma"); digester.addSetNext("glazba/pjesma“ , "dodajPjesmu"); digester.addSetNestedProperties( "glazba/pjesma");
Apache Digester • prednosti: - relativno mala količina koda za definiranje ponašanja - prepoznaje se kontekst u kojem se pronalaze komponente • nedostatci: - potrebno je dosta koda za pripremu struktura za pohranu podataka
Zaključak • najveća prednost XML-a je to što je jednostavan i fleksibilan • Java omogućava relativno jednostavno baratanje sadržajem XML dokumenta