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 |
|
|
|
|