XML (XSLT i XPath),


Za brzi pristup kliknite:
XML - eXtensible Markup Language,
XML i CSS,
XML, XSLT i XPath


XML - eXtensible Markup Language (XSLT i XPath)
Vježba broj 1
Pogledajmo nekoliko XML dokumenata i na osnovu njih diskutujmo čemu služi XML, i objasnimo kako ga mi želimo iskoristiti:

cd_catalog.xml
Ovo je CD katalog, sačuvan kao XML dokument.

plant_catalog.xml
Ovo je katalog biljaka iz neke cvjećare, sačuvan kao XML dokument.

simple_meni.xml
Ovo je meni za doručak iz jednog poznatog zeničkog restorana, sačuvan ko XML dokument.

Zaključimo:
Svrha XML-a je da transportuje i sačuva podatke, sa fokusom na objašnjenje šta je podatak.

HTML je dizajniran da prikaže podatke, sa fokusom na objašnjenje kako podaci izgledaju.

XML je važan za internet programiranje i nije težak za učenje.

XML dokument ne nosi informacije kako prikazati dokument.

Bez ikakvih informacija kako prikazati XML dokument, večina pretraživača će samo prikazati sadržaj XML dokumena.

U sljedećim vježbama, glavni problem našeg razmatranja će biti kako prikazati XML dokument u pretraživaču, koristeći CSS, XSLT i JavaScript.
       
Vježba broj 2
Pogledajmo XML dokument koji sadrži grešku:
note_error.xml
       
XML i CSS
Vježba broj 1
Dat je sljedeći XML dokument:

JednaRecenica.xml

Napisati CSS stylesheet koji će dati XML dokument prikazati na sljedeći način

JednaRecenica_saCSSom.xml

Rješenje:
CSSzaJednuRecenicu.css
       
Vježba broj 2
Dat je sljedeći XML dokument:

vizit_karta.xml

Napisati CSS stylesheet koji će dati XML dokument prikazati na sljedeći način

vizit_karta_sa_cssom.xml

Rješenje:
css_za_vizit_karta.css
       
Vježba broj 3
Dat je sljedeći XML dokument:

vizit_karte.xml

Napisati CSS stylesheet koji će dati XML dokument prikazati na sljedeći način

vizit_karte_sa_cssom.xml

Rješenje:
css_za_vizit_karte.css
       
Vježba broj 4
Dat je sljedeći XML dokument:

vizit_karte.xml

Napisati CSS stylesheet koji će dati XML dokument prikazati na sljedeći način

vizit_karte_sa_cssom.xml

Rješenje:
css_za_vizit_karte_sadodatkom.css
       
Vježba broj 5
Dat je sljedeći XML dokument:

vizit_karte.xml

Napisati CSS stylesheet koji će dati XML dokument prikazati na sljedeći način

vizit_karte_sa_cssom.xml

Rješenje:
css_za_vizit_karte_sadodatkom.css
       
Vježba broj 6
Dat je sljedeći XML dokument:

meni.xml

Napisati CSS stylesheet koji će dati XML dokument prikazati na sljedeći način

meni_sa_cssom.xml

Rješenje:
meni.css
       
XML, XSLT i XPath
Vježba broj 1
Dat je XML dokument sa sljedećim sadržajem

<recenica> Iz pepela ustajem sa kosama cvenim. </recenica>

Dokument: Recenica dana.xml
Napisati XSLT style sheet za prikaz ovog dokumenta.

Traženi izgled: Recenica dana uredjena.xml

Rješenje:
hello.xsl
       



Objašnjenje za vježbu broj 1
U prvoj vježba XML dokument ima jendan (<?xml-stylesheet>) a XSLT dokument ima tri elementa (<xsl:stylesheet>, <xsl:template> i <xsl:value-of/>) za koje ne znamo čemu služe.
<?xml-stylesheet type="text/xsl" href="hello.xsl"?>
naredba koju uvijek kucamo u XML dokument i koja predstavlja
vezu između XML i XSLT dokumenta
<xsl:stylesheet> element je najvažniji element za stylesheet. Njegov sinonim je <xsl:transform> koji se može koristiti kao alternativa.

Format naredbe je sljedći:
<xsl:stylesheet
     id? = id
     default-collation? = uri-lista
     default-validation? = "preserve" | "strip"
     exclude-result-prefixes? = znakovi
     extension-element-prefixes? = znakovi
     input-type-annotations? = "preserve" | "strip" | "unspecified"
     use-when? = izraz
     version = broj
     xpath-default-namespace? = uri
     <!-- Sadržaj: (xsl:import*, ostale-deklaracije) -->
</xsl:stylesheet>

U prvoj vježbi mi smo koristili:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
...
</xsl:stylesheet>
XSLT Stile Sheet definicija i sve naredbe
koje se odnose na XML dokument se nalaze između ova dva taga

<xsl:template> element definiše šablon za pravljenje izlaza. Može se pozvati ili sa poređenjem imena vrha sa uzorkom, ili eksplicitno pomoću imena.

Format naredbe je sljedći:
<xsl:template
     match? = struktura
     name? = qime
     priority? = broj
     mode? = znakovi
     as? = niz-tip>
     <!-- Sadržaj: (xsl:param*, niz-konstruktor) -->
</xsl:template>

U prvoj vježbi mi smo koristili naredbu
<xsl:template match="/">
...
</xsl:template>
naredba za poziv template-a koji će se izvršiti
čim pretraživač počne čitati XML dokument


Atributi
Ime Vrijednost Značenje
match
(nije obavezan)
struktura Struktura koja određuje koji vrh je prikladan da se nastavi sa ovim šablonom. Ako je ovaj atribut odsutan, mora se nalaziti name atribut
name
(nije obavezan)
leksičko qime Ime šablona. Ako je ovaj atribut odsutan, mora se nalaziti match atribut.
priority
(nije obavezan)
broj Broj (pozitivan ili negativan, cijeli ili decimalni) koji označava prioritet ovog šablona i koristi se kad je više šablona u igri sa istim vrhom.
mode
(nije obavezan)
Praznimprostorom-razdvojena lista mode imena, ili "#all" Mod ili moduli sa kojima ovaj šablon vlada. Kada se <xsl:apply-templates> koristi za procesiranje skupa vrhova, jedini šabloni razmatrani su oni sa poređenjem modula.
as
(nije obavezan)
NizTip Tip niza koji se proizvede kad je ovaj šablon izračunat. Tip greške je prijavljen ako se rezultat ne podudara sa ovim tipom.
 
<xsl:value-of> naredba konstruiše tekst vrh, i ispiše rezultat kao sljedeći u nizu.

Format naredbe je sljedći:
<xsl:value-of
     select? = izraz
     separator? = { string }
     disable-output-escaping? = "yes" | "no">
     <!-- Sadržaj: niz-konstruktor -->
</xsl:value-of>

U prvoj vježbi mi smo koristili
<xsl:value-of select="recenica"/>
naredba koj će ispisati tekst koji se nalahi na vrhu pod imenom recenica


Atributi
Ime Vrijednost Značenje
select
(nije obaveznan)
XPath izraz Vrijednost koja će se pojaviti na izlazu.
separator
(nije obavezan)
Vrijednost atributa
šablon
vraća string
String koji će se koristiti da razdvoji susjedne predmete u izlazu.
disable-output-escaping
(nije obavezan)
"yes" ili "no" Vrijednost "yes" pokazuje da će se specijalni karakter u izlazu (kao npr. <) prikazati kao što jest, prije nego koristeći XML bijeg sa <. Defaultna vrijednost je "no".
Vježba broj 2
XSL style sheet sadrži jedan ili više skupova pravila koji se zovu templates (šabloni).

Template (šablon) sadrži pravila koja se primjenjuju kada je određen vrh pronađen. (Šta je vrh?)

Jedan od atributa je match.

Dat je sljedeći XML dokument: cdcatalog.xml.
Napisati XML stylesheet za prikaz ovog dokumenta na sljedeći način
cdcatalog_with_xsl.xml.

Rješenje:
vjezba.xsl
       



Objašnjenje za vježbu broj 2
Ponovimo:
<?xml-stylesheet type="text/xsl" href="vjezba.xsl"?>
naredba koju uvijek kucamo u XML dokument i koja predstavlja
vezu između XML i XSLT dokumenta


U ovoj vježbi smo koristili dva XSLT elementa <xsl:stylesheet> i <xsl:template>.

Prisjetimo se formata ovih naredbi:
<xsl:stylesheet
     id? = id
     default-collation? = uri-lista
     default-validation? = "preserve" | "strip"
     exclude-result-prefixes? = znakovi
     extension-element-prefixes? = znakovi
     input-type-annotations? = "preserve" | "strip" | "unspecified"
     use-when? = izraz
     version = broj
     xpath-default-namespace? = uri
     <!-- Sadržaj: (xsl:import*, ostale-deklaracije) -->
</xsl:stylesheet>


Ponovimo:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
...
</xsl:stylesheet>
XSLT Stile Sheet definicija i sve naredbe
koje se odnose na XML dokument se nalaze između ova dva taga


<xsl:template
     match? = struktura
     name? = qime
     priority? = broj
     mode? = znakovi
     as? = niz-tip>
     <!-- Sadržaj: (xsl:param*, niz-konstruktor) -->
</xsl:template>



Ponovimo:
<xsl:template match="/">
...
</xsl:template>
naredba za poziv template-a koji će se izvršiti
čim pretraživač počne čitati XML dokument


Vježba broj 3 - XSLT <xsl:value-of> Element
<xsl:value-of> element se koristi za "vađenje" vrijednosti obilježenog vrha.

Pogledajmo primjer:
cdcatalog.xml
cdcatalog_with_xsl.xml

Rješenje:
vjezba3.xsl
       



Objašnjenje za vježbu broj 3
U ovoj vježbi smo koristili tri XSLT elementa <xsl:stylesheet>, <xsl:template> i <xsl:value-of>.

Prisjetimo se formata <xsl:value-of> naredbe:
<xsl:value-of
     select? = izraz
     separator? = { string }
     disable-output-escaping? = "yes" | "no">
     <!-- Sadržaj: niz-konstruktor -->
</xsl:value-of>

U vježbi smo imali sljedeće:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="catalog/cd/title"/>
<xsl:value-of select="catalog/cd/artist"/>

<xsl:value-of select="catalog/cd/title"/>
<xsl:value-of select="catalog/cd/artist"/>
naredbe koje će ispisati tekst koji se nalazi na vrhovima
pod imenom title i artist


Vježba broj 4
Pogledajmo sljedeći xml dokument: rečenice_0.xml. Želimo napisati XSLT style sheet koji će nam dati dokument prikazati u sljedećem obliku: recenice_uredjene.xml.

Rješenje:
stilZa4.xsl
       



Objašnjenje za vježbu broj 4
Četvrta vježba koristi sljedeća četiri elementa
<xsl:stylesheet>, <xsl:template>, <xsl:value-of> i <xsl:apply-templates>

Naredbe <xsl:stylesheet>, <xsl:template> i <xsl:value-of/> smo već koristili. Prisjetimo se formata naredbi:

<xsl:stylesheet
     id? = id
     default-collation? = uri-lista
     default-validation? = "preserve" | "strip"
     exclude-result-prefixes? = znakovi
     extension-element-prefixes? = znakovi
     input-type-annotations? = "preserve" | "strip" | "unspecified"
     use-when? = izraz
     version = broj
     xpath-default-namespace? = uri
     <!-- Sadržaj: (xsl:import*, ostale-deklaracije) -->
</xsl:stylesheet>

U ovoj vježbi smo koristili
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template
     match? = struktura
     name? = qime
     priority? = broj
     mode? = znakovi
     as? = niz-tip>
     <!-- Sadržaj: (xsl:param*, niz-konstruktor) -->
</xsl:template>


<xsl:template match="dokument">
...
</xsl:template>
naredba koj će pokrenuti dati template čim naiđe
na vrh dokument u XML dokumentu


U ovoj vježbi smo koristili:
<xsl:template match="dokument">
<xsl:template match="rec2">
<xsl:template match="rec3">
<xsl:template match="rec4">


<xsl:value-of
     select? = izraz
     separator? = { string }
     disable-output-escaping? = "yes" | "no">
     <!-- Sadržaj: niz-konstruktor -->
</xsl:value-of>

<xsl:value-of select="."/>
naredba koj će ispisati tekst koji se nalazi u datom vrhu


<xsl:apply-templates> naredba definiše skup vrhova koji će biti procesrani i zahtjeva od sistema da ih procesira birajući odgovarajući šablon za svaki od njih.

Format naredbe je
<xsl:apply-templates
     select? = izraz
     mode? = simbol>
     <!-- Sadržaj: (xsl:sort | xsl:with-param)* -->
</xsl:apply-templates>

Mi smo u ovoj vježbi koristili
<xsl:apply-templates select="rec4"/>
<xsl:apply-templates select="rec2"/>
<xsl:apply-templates select="rec4"/>
<xsl:apply-templates select="rec3"/>
naredbe koje pozivaju i izvšavaju redom template
rec4, template rec2, ponovo template rec4 i template rec3


Vježba broj 5 - Komentar
CSS = Style Sheets za HTML
XSLT = Style Sheets for XML (i više od toga)

XPath je jezik za navigaciju u XML dokumentima.
XSLT stoji za XSL Transformacije
XSL (EXtensible Stylesheet Language)
       
Vježba broj 6 - Komentar
Ispravna Stile Sheet deklaracije su sljedeće:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

ili

<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       
Vježba broj 7 - XSLT <xsl:for-each> Element
<xsl:for-each> element nam dozvoljava da izvršimo petlju u XSLT dokumentu.

Pogledajmo primjer:
cdcatalog.xml
cdcatalog_with_xsl.xml

Rješenje:
vjezba7.xsl
       



Objašnjenje za vježbu broj 7
U ovoj vježbi smo koristili četri XSLT elementa:
<xsl:stylesheet>, <xsl:template>, <xsl:for-each> i <xsl:value-of>

Ova četri elementa su formirale sljedeće naredbe:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="catalog/cd">
<xsl:value-of select="title"/>
<xsl:value-of select="artist"/>

Nova element koji ranije nismo vidjeli je <xsl:for-each>

Format ove naredbe je
<xsl:for-each
     select = niz-izraz>
     <!-- Sadržaj: (xsl:sort*, niz-konstruktor) -->
</xsl:for-each>


<xsl:for-each select="catalog/cd">
...
</xsl:for-each>
naredbe koje se nalaze između gornja dva taga će se izvšiti
onoliko puta koliko postoji vrhova koji su "djeca" od vrha cd

 
Vježba broj 8 - Filtriranje izlaza
Također možemo filtrirati izlaz iz XML fajla dodavajući kriterij atributu select u <xsl:for-each> elementu.

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">

Dozvoljeni filter operatori su
•   = (jednako)
•   != (nije jednako)
•   < manje od
•  > veće od

Pogledajmo primjer:
Dat je katalog cdcatalog.xml

Potrebno je iz kataloga ispisati sve nazive albuma i izvođače koji su iz Velike Britanije, drugim riječima potrebno je dobiti sljedeću tabelu cdcatalog_with_xsl.xml

Rješenje
filtriranje_v1.xsl
       



Objašnjenje za vježbu broj 8


<xsl:for-each select="catalog/cd[country='UK']">
...
</xsl:for-each>
naredba koja "prolazi" kroz sve vrhove čiji je "roditelj" cd
i koja ujedno iz tih vrhova izdvaja sve one vrhove country
koji sadrže tekst UK

 
Vježba broj 9
Dat je katalog cdcatalog_v2.xml.

Ispisati sve izvođače iz kataloga, zajedno sa nazivom njihovih albuma, kao i godinu izdanja albuma, koji se nalaze između 1996 i 2008. Traženi ispis bi izgledao ovako:
cdcatalog_v2_sastilom.xml

Rješenje:
filtriranje_v2.xsl
       



Objašnjenje za vježbu broj 9


<xsl:for-each select="catalog/cd[year>1996 and 2008>year]">
...
</xsl:for-each>
naredba koja "prolazi" kroz sve vrhove čiji je "roditelj" cd
i koja ujedno iz tih vrhova izdvaja sve one vrhove year koje imaju
tekst čiji je broj između 1996 i 2008

 
Vježba broj 10
Dat je katalog cdcatalog_v2.xml.

Iz datog kataloga izdvojiti dvije tabele: prva tabela će sadržavati imena svih izvođača, nazive njigovih albuma i godinu izdanja, godine koje se nalaze između 1980 i 1990, dok će druga tabela sadržavati sve izvođače, zajedno sa nazivom njihovih albuma, kao i godinu izdanja albuma, koje se nalaze između 2000 i 2011. Traženi ispis bi izgledao ovako:
cdcatalog_v2_dvijetabele.xml

Rješenje:
filtriranje_v3.xsl
       



Objašnjenje za vježbu broj 10


<xsl:for-each select="catalog/cd[year>=1980 and 1990>=year]">
...
</xsl:for-each>
naredba koja "prolazi" kroz sve vrhove čiji je "roditelj" cd
i koja ujedno iz tih vrhova izdvaja sve one vrhove year koje imaju
tekst čiji je broj između 1980 i 1990, uključujući i ove godine

 
Vježba broj 11 - XSLT <xsl:sort> Element
<xsl:sort> element se koristi kad želimo da sortiramo izlaz.

Da bi sortirali izlaz jednostavno dodamo <xsl:sort> element unutar <xsl:for-each> elementa u XSL fajlu.

Pogledajmo primjer: Sortirajmo dvije tabele iz prethodne vježbe i to prvu tabelu sortirati po imenima izvođača od slova a do z, a drugu tabelu sortirati po godinama od 2011 do 2000.
cdcatalog_v2.xml
cdcatalog_sortirane_dvijetabele.xml

Rješenje:
sortiranje_v1.xsl
       



Objašnjenje za vježbu broj 11


<xsl:for-each select="catalog/cd[year>=2000 and 2011>=year]">
<xsl:sort select="year" order="descending"/>
...
</xsl:for-each>
sortiranje po vrijednosti vrha godina u opadajućem smijeru

 
Komentar 13 - Pregled nekih funkcija po kategorijama
Bulove funkcije
boolean(), false(), not(), true()

Numeričke funkcije
abs(), avg(), ceiling(), floor(), format-number(), max(), min(),
number(), round(), round-half-to-even(), sum()

String funkcije
codepoints-to-string(), compare(), concat(), contains(), ends-with(), lower-case(), matches(), normalize-space(), normalize-unicode(), replace(), starts-with(), string(), string-join(), string-length(), string-to-codepoints(), substring(), substring-after(), substring- before(), tokenize(), upper-case()

Funkcije koje vračaju poziciju vrha
base-uri(), data(), document-uri(), generate-id(), in-scope-prefixes(), lang(), local-name(), name(), namespace-uri(), namespace-uri-for-prefix(), nilled(), node-name(), root(), string(), unparsed-entity-public-id(), unparsed-entity-uri()

Funkcije koje vračaju informacije o sadržaju
base-uri(), collection(), current(), current-date(), current-dateTime(), current-group(), current-grouping-key(), current-time(), default-collation(), doc(), implicit-timezone(), last(), position(), regex-group()
       
Vježba broj 12 - Funkcija position() - Prva vježba
poem.xml

Ispisati broj ispred svakog stiha u strofi:
poem_prikacenStil.xml

Rješenje:
stil_fja_position.xsl
       
Vježba broj 13 - Funkcija position() - Druga vježba
poem.xml

Ispisati broj stiha ne razdvajajući strofe:
poem_prikacenStil_v2.xml

Rješenje:
stil_fja_position_v2.xsl
       
Vježba broj 14 - Naredba <xsl:if> - Prva vjezba
cdcatalog_v2.xml

Izlistati sve albume koji su skuplji od 10 KM
cdcatalog_v2_stil.xml

Rješenje:
Stil_za_if.xsl
       
Vježba broj 15 - Naredba <xsl:if> - Druga vjezba
poem.xml

Svaki drugi stih uvući pet milimetara:
poem_uredjena.xml

Rješenje:
stil_za_pjesmu.xsl
       
Vježba broj 16 - Naredba <xsl:number/>
books.xml

Napraviti sljedeću tabelu (redni broj ispred imena autora)
books_uredjena.xml

Rješenje:
books.xsl
       
Vježba broj 17
dorucak.xml

Napraviti sljedeću tabelu (staviti redni broj ispred imena autora)
dorucak_uredjen.xml

Rješenje:
prikazi_dorucak.xsl
       
ZADACI ZA VJEŽBU (sa riješenjima - obavezno preraditi)
Vježba broj 18 - Naredba <xsl:variable/>
dorucak.xml

Napraviti sljedeću tabelu (staviti redni broj ispred imena autora)
dorucak_uredjen.xml

Rješenje:
prikazi_dorucak.xsl
       
Vježba broj 19 - Naredba ???
dorucak.xml

Napraviti sljedeću tabelu (staviti redni broj ispred imena autora)
dorucak_uredjen.xml

Rješenje:
prikazi_dorucak.xsl
       
Vježba broj 20 - Naredba ???
dorucak.xml

Napraviti sljedeću tabelu (staviti redni broj ispred imena autora)
dorucak_uredjen.xml

Rješenje:
prikazi_dorucak.xsl