Kurs: PHP programiranje Materijali vezani uz ovu lekciju: - Test rad sa xml-om - Rad sa XML-om (PDF dokument) Šta je XML (Extended Markup Language)Jedan od čestih pojmova upotrebljavanih u kontekstu današnjeg programiranja jeste XML. Ovaj pojam često se „bespravno” upotrebljava da prezentuje programski jezik, iako XML to u stvari nije. XML je, naime, samo način za serijalizaciju podataka, odnosno način na koji ćemo jednostavno i brzo moći da zapamtimo podatke (a da pri tom to nije baza podataka) i prosledimo ih nekome ko će ih takođe razumeti, jer poštujemo iste konvencije.Konvencije i sintaksaSa sintaksom xml-a već smo se odavno susreli, pisanjem prvog HTML taga. To je zato što i XML poštuje konvencije tagova, kao i HTML. Štaviše, čak i sama struktura tih tagova identična je HTML-u, jer se poštuje isti princip elemenata i atributa. Ipak, postoje neke osobenosti karakteristične isključivo za XML.Pre svega, XML je osetljiv na mala i velika slova (case sensitive je). Zatim, ne sme u svom telu sadržati specijalne karaktere (njih treba prevesti u odgovarajuće ascii kodove). I konačno, trebalo bi da poseduje određenu strukturu (da ima koren, deklaraciju verzije...) Struktura XML-aStruktura XML dokumenta, nije nam nepoznata, jer smo je već obradili u jednoj od prošlih lekcija, radeći sa fajlovima.Svaki XML fajl trebalo bi da poseduje deklaraciju: <?xml version="1.0"? encoding="UTF-8" ?> U deklaraciji prosleđujemo procesoru xml-a osnovne podatke o dokumentu: koja verzija XML-a je u pitanju, koji kodni raspored je korišćen u dokumentu... Zatim, opciona je i deklaracija tipa dokumenta koja označava set pravila koja će biti poštovana tokom parsiranja dokumenta. Ova deklaracija može biti napravljena direktno u dokumentu ili učitana iz eksternog izvora. <!DOCTYPE film SYSTEM "test.dtd"> Nakon DTD-a sledi koreni (document) element dokumenta, i konačno, naši serijalizovani podaci. Konačno, cela XML struktura izgleda ovako: Prolog (Ovo je opis dokumenta, nije obavezan) XML Deklaracija (XML će funkcionisati i bez deklaracije, ali je poželjno da ona postoji) DTD Deklaracija (Za kompleksnije serijalizacije) Koreni element (Dokument) Elementi (Lista elemenata) Element – Atributi i vrednosti (Stavke iz liste) Podaci (Podaci po stavci) Izgradnja XML dokumentaRecimo da želimo da stvorimo jedan XML dokument u kome će biti lista država.<?xml version="1.0" encoding="UTF-8" ?> 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. Pregled XML dokumenataSadržaj XML dokumentata pregledamo na više načina:
Čitanje XML dokumentaIako XML podaci imaju lako čitljivu strukturu i pri tom jednostavnu za ručno parsiranje, kao i ostali jezici, i u PHP-u je sve više dobrih mehanizama za rukovanje XML-om (DOM XML, XMLParser...). Jedan od njih je i upotrebom klase SimpleXML. Za primer, možemo iskoristiti malopređašnji xml dokument sa gradovima, tako što ćemo ga snimiti u tekst dokument i taj dokument nazvati npr. proba.xmlPrvo što treba da uradimo, jeste da učitamo fajl u xml objekat (vodite računa da program bude u php tagovima, koji ovde nisu postavljeni zbog preglednosti): $xml=simplexml_load_file('proba.xml'); Kada je jednom formiran xml objekat, potrebno je samo da pročitamo podatke, ručno echo $xml->drzava[0]->naziv; ...pri čemu akcentujemo podatak koji nam je potreban koristeći indekse niza, ili kroz foreach petlju: foreach($xml as $drzava) U svakom krugu petlje, dobijamo po jedan objekat, čijim atributima pristupamo na gore navedeni način (više reči o klasama i objektima biće u narednim lekcijama). Do xml sadržaja možemo doći i na sledeći način: $sviPodaci = file_get_contents("proba.xml"); ...foreach petlja U ovom slučaju, do stringa dolazimo uz pomoć funkcije za čitanje file_get_contents() fajla koji smo obradili u prethodnim lekcijama i od tog stringa formiramo xml objekat, funkcijom SimpleXMLElement(). Umesto čitanja fajla, mogli smo xml strukturu u vidu stringa dobiti i iz nekog drugog izvora. XPath čitanjeDosadašnji način čitanja xml dokumenata je upotrebljiv ako je poznata kompletna infrastruktura XML dokumenta. Ali ne i ukoliko u strukturi xml dokumenta postoji bilo kakva tipska nesimptomatičnost, odnosno, ako dokument sadrži na jednom nivou različito imenovane elemente.U ovakvim slučajevima korisno je upotrebiti XPath pristup čitanju. Vratimo se u svrhu objašnjenja na primer sa gradovima. Ukoliko bi malo izmenili xml dokument, tako da izgleda ovako: <?xml version="1.0"?> Malopređašnji primeri sa čitanjem ne bi dali validan rezultat. Bili bi pročitani samo elementi koji se uklapaju u željeni patern (drzava->naziv). U ovom slučaju, samo prva država. Međutim, kada bi upotrebili XPath i to na sledeći način: <?php dobili bi sve vrednosti elemenata naziv, koji se nalaze na traženom nivou a koji smo naznačili kosim crtama. Sada ćemo dobiti listu svih gradova, odnosno, svih vrednosti elemenata naziv, koji se nalaze na drugom nivou dokumenta. Ovaj metod, iako je u nekim slučajevima veoma praktičan, nešto je sporiji od standardnog čitanja po nazivima elemenata. Pisanje u XMLZa pisanje u XML-u, nije nam potrebna nikakva posebna tehnologija. Dovoljno je da malo unapredimo primer za pisanje fajlova iz jedne od prethodnih lekcija. Ovde ćemo, kao izvor podataka, priložiti tri niza, da bismo izbegli elemente koje još nosmo obradili (klase). U principu, ovakav pristup je potpuno nepravilan i sve to bi trebalo da uradimo putem neke struktuirane forme (klase).<?php DOM XMLDom je sistem za parsiranje XML-a ugrađen u endžin pretraživača. Ovaj sistem podrazumeva čitanje xml-a kroz sistem dece i roditelja gde je svaki element »roditelj« svojih podelemenata, i ti podelementi su njegova »deca«. Evo kako bi izgledalo čitanje naziva država sa DOM XML parserom.<?php Primer Pogledajmo kako bi izgledao primer RSS čitača sa SimpleXML klasom: Pre svega, napravićemo jedan rss-xml fajl uz pomoć koga ćemo da vršimo testiranje. <?xml version="1.0"?> Zatim, koristeći naučenu tehnologiju, možemo pročitati i emitovati sadržaj fida: <?php Najvažnije iz ove lekcije
Više podatakaNastanak XML-aIstorija XML-a počinje 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, a veliki broj ljudi umešanih u to istraživanje, rezultirao je jezikom SGML (Standard Generalize Markup Language). Deo SGML jezika iskorišten je za HTML-a (izgradnju HyperText Markup Language), dok je ostatak korišten za kompleksnije Internet aplikacije. 1996. godine počet je rad na uprošćenoj verziji SGML-a, čija je komplikovanost učinila da bude upotrebljavan samo u jakim velikim institucijama. Ovaj rad rezultirao je stvaranjem XML-a za čiju se godinu nastanka smatra 1998 godina. Do danas poznajemo dve verzije i nekoliko međuverzija XML-a. XML 1.0 i XML 1.1. Osnovna razlika je u rukovanju novim Unicode setovima, obzirom da razvoj XML-a ne prati paralelno i proširenje Unicode-a.
|