Transcript Uporaba XML

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" ?>
Osnove XML-a – elementi

osnovne komponente XML dokumenta
POČETNA OZNAKA
SADRŽAJ
<pjesma>
<ime>Space Oddity</ime>
<izvođač>David Bowie</izvođač>
</pjesma>
ZAVRŠNA OZNAKA
Osnove XML-a – atributi
 svaki
element može sadržavati atribute
ATRIBUT
<pjesma id="1" >
<ime>Space Oddity</ime>
<izvođač>David Bowie</izvođač>
</pjesma>
Osnove XML-a
 također
mogu postojati i prazni
elementi
<pjesma id="1">
PRAZAN ELEMENT
<live/>
<ime>Space Oddity</ime>
<izvođač>David Bowie</izvođač>
</pjesma>
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

Ispravan XML dokument
<?xml version="1.0" encoding="utf-8" ?>
<glazba>
ROOT ELEMENT
<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>
PROLOG
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 - slika
SAX API – stvaranje analizatora
SAXParserFactory spf =
SAXParserFactory.newInstance();
SAXParser analizator =
spf.newSAXParser();
analizator.parse(String file,
DefaultHandler h);
SAX API - primjer
public class BrojacPjesama extends
DefaultHandler{
private static int brojač = 0;
public void 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 - slika
DOM API - stvaranje analizatora
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder =
factory.newDocumentBuilder();
Document dokument =
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
public class Pjesma {
private String izvođač;
private String ime;
private int id;
... // getteri i setteri
}
Apache Digester – primjer
Kompilacija
public class Kompilacija {
private List<Pjesma> pjesme;
public void dodajPjesmu(Pjesma p){
...
}
}
Apache Digester - primjer
public static void 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
HVALA NA PAŽNJI!