XSLT
- Većina programa koji su veb-klijenti (eng. browser), poput IE (Internet Explorer), Mozila Firefox, itd., obično imaju ugrađen
XSLT procesor koji manje ili više poštuje preporuke za XSLT 1.0. Iako postoje i
preporuke za XSLT 2.0, njih ne podržava nijedan veb-klijent.
- Mnogi XML editori imaju podršku za XSLT, među njima i XML Copy Editor i Exchanger.
- Postoje i samostalni XSLT procesori (npr. Saxon), ali njih uglavnom koriste programeri.
U praksi se ispostavlja da nijedan od navedenih alata nije dovoljan, te je stoga potrebno kombinovati ih.
Za kreiranje XSLT listova i testiranje XPath-izraza je posebno zgodan Exchanger (kao nekomercijalni editor). On sadrži i
program za izvršavanje korak po korak, otkrivanje i otklanjanje grešaka (eng. debugger), ali taj
koji ne funkcioniše uvek. Jedno od pouzdanijih rešenja za testiranje XSL-transformacija je
XML Visualizer.
XSL-transformacije koriste XPath-izraze da prepoznaju određeni deo XML-dokumenta
i da izvrše odgovarajuće akcije. Par (XPath-izraz, akcija) se naziva XSL-šablon
i realizuje se pomoću elementa xsl:template.
XSL stilski list vrši obradu XML dokumenta po sledećim pravilima:
- Obrada uvek počinje od korenog čvora (/).
- Ako tokom obrade dođe red na neki čvor XML drveta (tekući čvor ili kontekstni čvor), postoje dve mogućnosti:
- Ako u XSL-stilskom listu postoji šablon koji propisuje akciju obrade za tekući čvor, onda
se izvršava ta akcija (akcija može da definiše da li ima još čvorova koje treba
obraditi ili ne, i kojim redosledom se oni obrađuju). Ako ima više šablona koji definišu
akciju za isti čvor, bira se šablon sa preciznijim XPath-izrazom (apsolutne adrese imaju prioritet nad relativnim).
- U protivnom, ako ne postoji nijedan šablon koji definiše akciju obrade za tekući čvor,
izvršava se podrazumevana akcija i to:
- ako je tekući čvor koreni čvor (/) ili element, prelazi se na obradu
svakog elementa-deteta tekućeg čvora;
- ako je tekući čvor atribut ili tekstuelni čvor, ispisuje se vrednost tekućeg čvora;
- ako je tekući čvor prostor imena, XML komentar ili instrukcija obrade, ne radi se ništa.
- Obrada se završava kada više nema čvorova koje treba obraditi.
- Primer U1.
- Ulazni XML:
- racun-prost1bez.xml.
- Zadatak:
- Za svaku stavku računa ispisati isti tekst "Evo jedne stavke"
- XSLT stilski list:
- stavke.xsl. Ovo nije korektno rešenje jer ispisuje i naziv prodavnice.
Razlog je 1. pravilo kombinovano sa pravilom 2b, te se ne obrađuju samo elementi sa
nazivom stavka, već sva deca korenog čvora, a time i prodavnica.
- XSLT stilski list:
- stavke2.xsl.
Testiranjem narednih nekoliko "rešenja", proverite koja to zaista jesu i obrazložite zašto:
stavke3.xsl, stavke4.xsl,
stavke5.xsl, stavke6.xsl.
- Primer U2
- Zadatak:
- Kreirati HTML tabelu tako da svaki red predstavlja jednu stavku računa.
Kolone tabele odgovaraju podacima artikal,
količina,
cena.
- XSLT stilski list:
- tabela.xsl.
- Rezultat transformacije:
- rezultat-tabela.html
- Primer U3
- Zadatak:
- Kreirati HTML listu tako da svaki element predstavlja jednu artikal računa.
- XSLT stilski list:
- lista.xsl.
- Rezultat transformacije:
- rezultat-lista.html
- Primer KS1:
- Zadatak:
- Kreirati HTML listu tako da svaki element predstavlja jednu artikal računa
koji je poručen u količini većoj od 1.
- XSLT stilski list:
- kolicina.xsl.
- Rezultat transformacije:
- rezultat-kolicina.html
U narednim zadacima se koristi ista ulazna XML datoteka ispiti.xml.
U svim narednim primerima koristi se isti ulazni XML: marc-primeri.xml,
pri šemu se u tekstovima zadataka na elemente marc:record,
marc:datafield i marc:subfield
referiše tim redom kao na zapise, polja i potpolja. Kada se govori o "polju 653" i sl., misli se
na element marc:datafield sa atributom tag='653'.
Takođe, pod potpoljem a) i sl., podrazumeva se marc:subfield sa atributom code='a'.
- Primer 1
- Zadatak:
- Prikazati ukupan broj zapisa.
- XSLT stilski list:
-
zad1.xsl.
(U rešenju se koristi XPath funkcija
count()
kao i XSL elementi
xsl:value-of i
xsl:template.)
- Primer 2
- Zadatak:
-
Prikazati ukupan broj razglednica, fotografija (zbirno i pojedinačno). (U rešenjima se koriste XPath funkcije
text(),
contains()
i operatori
=,
and
i
or.)
- XSLT stilski list:
- zad2.xsl
- XSLT stilski list:
- zad2b.xsl
- XSLT stilski list:
- zad2c.xsl
- Primer 3
- Zadatak:
- Prikazati vrednost prvog polja 653 iz svakog zapisa.
- XSLT stilski list:
- zad3.xsl.
(U rešenju se posredno koristi XPath funkcija
position().)
- Primer 4
- Zadatak:
- Prikazati vrednosti svih potpolja a) i c) iz polja 245.
- XSLT stilski list:
- zad4.xsl
- Primer 5
- Zadatak:
- Generisati novi XML dokument dobijen od originala brisanjem potpolja h) u polju 245.
- XSLT stilski list:
- zad5.xsl.
(U rešenju se koristi XPath funkcija
node(),
XPath operatori
@* i
|,
kao i XSL elementi
xsl:copy .)
- Primer 6
- Zadatak:
- Izdvojiti sve URL-adrese (polje 856, potpolje u)
sortirati adrese po rastućem broju signature.
- XSLT stilski list:
- zad6-simple.xsl.
(U rešenju se koristi XSL element
xsl:sort .)
- Primer 7
- Zadatak:
- Generisati novi XML dokument dobijen od originala dodavanjem praznog polja 243 sa potpoljem a) na kraj svakog zapisa
- XSLT stilski list:
- zad7.xsl.
- Primer 8
- Zadatak:
- Prikazati vrednosti polja 653 bez prvog potpolja a).
- XSLT stilski list:
- zad8.xsl.
(U rešenju se koristi XPath funkcije
not()
i
position(),
kao i XPath operator
*.)
- XSLT stilski list:
- zad8b.xsl.
(U ovom rešenju se
prvo potpolje a) uklanja samo ako to nije i jedino potpolje polja 653!
Koriste se XSL elementi
xsl:choose,
xsl:when i xsl:otherwise; )
- Primer 9
- Zadatak:
- Generisati novi XML dokument dobijen od originala tako što je u svakom polju sa vrednošću atributa "500"
ta vrednost zamenjena sa "522"
- XSLT stilski list:
- zad9.xsl.
(U rešenju se koriste XSL element
xsl:attribute.)
- Primer 10
- Zadatak:
- Prikazati vrednosti svih potpolja čiji brat (sestra, sibling) element ima vrednost "eng".
Preciznije: za svako polje koje sadrži potpolje sa vrednošću "eng",
prikazati vrednosti svih ostalih njegovih potpolja.
- Primer 11
- Zadatak:
- Za svaki zapis prikazati naslov (polje 245, potpolje a), autora (polje 100, potpolje a) i
godinu izdanja (polje 260 potpolje c) u txt formatu i dodati redne brojeve ispred.