Title: XSLT
1XSLT czesc 2
2Rodzaje przetwarzania XSLT (1)
- Przetwarzanie sterowane struktura dokumentu
zródlowego (ang. push) - przechodzimy po strukturze dokumentu zródlowego,
- generujemy fragmenty struktury dokumentu
wyjsciowego. - ltxsltemplate match"..."gt ...
ltxslapply-templates/gt ...lt/xsltemplategt
3Rodzaje przetwarzania XSLT (2)
- Przetwarzanie sterowane struktura dokumentu
wyjsciowego (ang. pull) - jedna duza regula dla wezla root,
- generujemy strukture dokumentu docelowego,
- wyciagamy odpowiednie wartosci z dokumentu
zródlowego. - ltxslstylesheet version"1.0"
xmlnsxsl"http//www.w3.org/1999/XSL/Transform"
xmlns"http//www.w3.org/TR/xhtml1/strict"gtltx
sltemplate match"/"gt lthtmlgtltheadgtlttitlegtExpens
e Report Summarylt/titlegtlt/headgt ltbodygt
lth1gtCompany ltxslvalue-of select"company/name"/gt
lt/h1gt ltpgtTotal Amount ltxslvalue-of
select"expense-report/total"/gtlt/pgt lt/bodygt
lt/htmlgtlt/xsltemplategtlt/xslstylesheetgt
4Uproszczone przeksztalcenia
- Tylko jeden wzorzec dla wezla root.
- Pomijamy element stylesheet.
- lthtml xmlnsxsl"http//www.w3.org/1999/XSL/Trans
form" xmlns"http//www.w3.org/TR/xhtml1/str
ict" xslversion"1.0"gt
ltheadgtlttitlegtExpense Report Summarylt/titlegtlt/headgt
ltbodygt lth1gtCompany ltxslvalue-of
select"company/name"/gtlt/h1gt ltpgtTotal
Amount ltxslvalue-of select"expense-report/t
otal"/gtlt/pgt lt/bodygtlt/htmlgt
5Zaawansowane mozliwosci XSLT
- Sortowanie wezlów.
- Tryby przetwarzania (modes)
- przelaczanie miedzy trybami,
- niezaleznie definiowane wzorce dla kazdego trybu.
- Zmienne.
- Wzorce nazwane
- wywolywane jak podprogramy (procedury),
- przekazywanie parametrów,
- rekursja.
6Sortowanie
- Mozna stosowac w
- apply-templates,
- for-each.
- ltxsltemplate match"miasta"gt lth1gtMiasta wg
liczby mieszkancówlt/h1gt ltxslapply-templates
select"miasto"gt ltxslsort
select"liczba-mieszk"
order"descending"/gt lt/xslapply-templatesgtlt/xs
ltemplategt
7Tryby przetwarzania (modes)
- ltxsltemplate match"/"gt lth1gtltxslvalue-of
select"book/title"/gtlt/h1gt lth2gtSpis
trescilt/h2gt ltxslapply-templates mode"toc"/gt
ltxslapply-templates/gtlt/xsltemplategtltxsltemp
late match"chapter" mode"toc"gt ltpgtlta
href"generate-id()"gt ltxslvalue-of
select"title"/gtlt/agtlt/pgtlt/xsltemplategtltxsltem
plate match"chapter"gt lth2gtlta
name"generate-id()"gt ltxslvalue-of
select"title"/gtlt/agtlt/h2gt ltxslapply-templates/gt
lt/xsltemplategt
8Zmienne
- Jak w funkcyjnych jezykach programowania
- brak instrukcji przypisania,
- brak efektów ubocznych.
- Deklaracja
- ltxslvariable name"..."/gt
- wartosc
- atrybut select ? wyrazenie odpowiedniego typu,
- zawartosc elementu ? fragment drzewa wynikowego,
- Uzycie
- w wyrazeniach name,
- ltxslcopy-of select"expression"/gt
9Wykorzystanie rekursji w XSLT (1)
- Sposób na brak prawdziwych zmiennych i petli
iteracyjnych. - Przyklad suma wartosci ksiazek
- ltbooksgt ltbookgt lttitlegtPan Tadeuszlt/titlegt
ltqtygt12lt/qtygtltpricegt10.99lt/pricegt lt/bookgt
ltbookgt lttitlegtMistrz i Malgorzatalt/titlegt
ltqtygt1lt/qtygtltpricegt15.99lt/pricegt lt/bookgt
ltbookgt lttitlegtImie Rózylt/titlegt
ltqtygt2lt/qtygtltpricegt6.99lt/pricegt lt/bookgtlt/booksgt
10Wykorzystanie rekursji w XSLT (2)
- Przyklad XSLT
- ltxsltemplate name"total-val"gt ltxslparam
name"list"/gt ltxslchoosegt ltxslwhen
test"list"gt ltxslvariable name"first"
select"list1 "/gt ltxslvariable
name"rest"gt ltxslcall-template
name"total-val"gt ltxslwith-param
name"list" select"listposition()!
1 "/gt lt/xslcall-templategt
lt/xslvariablegt ltxslvalue-of
select"first/qty first/price
rest"/gt lt/xslwhengt
ltxslotherwisegt0lt/xslotherwisegt
lt/xslchoosegtlt/xsltemplategt
11Wykorzystanie rekursji w XSLT (3)
- Przyklad XSLT, c.d.
- ltxsltemplate match"/"gt ltxslvariable
name"total"gt ltxslcall-template
name"total-val"gt ltxslwith-param
name"list" select"//book"/gt
lt/xslcall-templategt lt/xslvariablegt
ltpgtTotal sales ltxslvalue-of select"total"/gt
lt/pgtlt/xsltemplategt
12Ograniczona uzytecznosc zmiennych
- Specjalny typ danych fragment drzewa wynikowego
(result tree fragment) - wartosc mozna jedynie
- skopiowac do drzewa wynikowego lub innej
zmiennej, - przeksztalcic do napisu
- nie mozna (w czystym XSLT) przeksztalcic na node
set, - praktycznie niemozliwe obliczenia na zmiennych w
kilku przebiegach. - Zmienna typu node setltxslvariable name"b"
select"/books"/gtltxslfor-each
select"b/book"gt...lt/xslfor-eachgt - Zmienna typu result tree fragmentltxslvariable
name"subtotals"gt ltxslfor-each
select"/books/book"gt ltsubtlgtltxslvalue-of
select"qty price"/gtlt/subtlgt
lt/xslfor-eachgtlt/xslvariablegt
13Funkcja node-set()
- Przeksztalca fragment drzewa wynikowego (result
tree fragment) w zbiór wezlów (node set). - Niedostepna w czystym XSLT
- Dostepna jako rozszerzenie m. in. w
- procesorach XT, Saxon, MSXML,
- bibliotece rozszerzen EXSLT.
- ltxslvariable name"subtotals"gt ltxslfor-each
select"/books/book"gt ltsubtlgtltxslvalue-of
select"qty price"/gtlt/subtlgt
lt/xslfor-eachgtlt/xslvariablegtltxslvalue-of
select"sum(exslnode-set(subtotals)/subtl)"/gt
14Generowanie przeksztalcen XSL (1)
- Problem
- zródlo przeksztalcenia nie zawiera metainformacji
o strukturze dokumentu, - metainformacje pojawiaja sie na wyjsciu.
ltwniosek-urlopowygt ltwniosekgt ltpracownikgtSzymon
Ziololt/pracownikgt ltrodzajgtwypoczynkowylt/rodzajgt
ltodgt2003-06-20lt/odgt ltdogt2003-06-27lt/dogt
ltdni-roboczychgt6lt/dni-roboczychgt lt/wniosekgt
ltdecyzjagt ltzgodagt1lt/zgodagt ltzastepcagtJan
Kowalskilt/zastepcagt lt/decyzjagtlt/wniosek-urlopowy
gt
Zródlo Ziolo, Sz., XSLT do kwadratu, Software
2.0, nr 6/2003
15Generowanie przeksztalcen XSL (2)
- Rozwiazanie
- zapisanie metainformacji w szablonie,
- generowanie przeksztalcenia z szablonu.
- ltdokument nazwa"wniosek-urlopowy"
etykieta"Wniosek urlopowy"gt ltsekcja
nazwa"wniosek" etykieta"Wniosek"gt ltpole
nazwa"pracownik" etykieta"Pracownik"/gt
ltpole nazwa"rodzaj" etykieta"Rodzaj urlopu"/gt
ltpole nazwa"od" etykieta"Od dnia"/gt
ltpole nazwa"do" etykieta"Do dnia"/gt ltpole
nazwa"dni-roboczych" etykieta"Ilosc
dni roboczych"/gt lt/sekcjagt ltsekcja
nazwa"decyzja" etykieta"Decyzja przelozonego"gt
ltpole nazwa"zgoda" etykieta"Zgoda
przelozonego" typ"boolean"/gt
ltpole nazwa"zastepca" etykieta"Zastepca"/gt
lt/sekcjagtlt/dokumentgt
16Generator przyklad (1)
- ltxslstylesheet version"1.0"
xmlnsxsl"http//www.w3.org/1999/XSL/Transform" - xmlnsres"http//www.w3.org/1999/XSL/Transfor
mAlias"gt - ltxslnamespace-alias stylesheet-prefix"res"
result-prefix"xsl"/gt -
- ltxsltemplate match"/"gt
- ltresstylesheet version"1.0"gt
- ltresoutput method"html"/gt
- ltxslapply-templates/gt
- lt/resstylesheetgt
- lt/xsltemplategt
- ltxsltemplate match"sekcja"gt
- ltrestemplate match"_at_nazwa"gt
- ltpgtltbgtltxslvalue-of select"_at_etykieta"/gtlt/bgt
lt/pgt - lttablegtltresapply-templates/gtlt/tablegt
- lt/restemplategt
- ltxslapply-templates/gt
- lt/xsltemplategt
17Generator przyklad (2)
- ltxsltemplate match"pole"gt
- ltrestemplate match"_at_nazwa"gt
- lttrgtlttdgtltxslvalue-of select"_at_etykieta"/gtlt/
tdgt - lttdgtltbgt
- ltxslchoosegt
- ltxslwhen test"_at_typ'boolean'"gt
- ltreschoosegt
- ltreswhen test"text()'1'"gttaklt/res
whengt - ltresotherwisegtnielt/resotherwisegt
- lt/reschoosegt
- lt/xslwhengt
- ltxslotherwisegt
- ltresvalue-of select"text()"/gt
- lt/xslotherwisegt
- lt/xslchoosegt
- lt/bgtlt/tdgtlt/trgt
- lt/restemplategt
- ltxslapply-templates/gt
- lt/xsltemplategt
18Zastosowanie w projekcie KEDU ZUS
wyciecie dokumentu
wyciecie formularza
Arkusz stylów
Generator arkuszy stylów
Szablon
WizualizacjaHTML
19KEDU ZUS przyklad wizualizacji
20Formatting Objects przyklad drzewa wynikowego
- lt?xml version"1.0" encoding"utf-8"?gtltforoot
xmlnsfo"http//www.w3.org/1999/XSL/Format"gt...
ltfopage-sequencegt ltfoflowgt
ltfoblock font-size"18pt" font-weight"bold"
text-align"centered"gtPrefacelt/foblockgt
ltfoblock font-size"12pt" space-before"1pc"
text-align"justified"gt This is a simple
test document. It shows a ltfoinline
font-style"italic"gtpartiallt/foinlinegt
fo-result tree (page layout missing).lt/foblockgt
lt/foflowgt lt/fopage-sequencegt...lt/forootgt
21Formatting Objects przyklady regul
- ltxsltemplate match"chapter"gt
ltfoflowgtltxslapply-templates/gtlt/foflowgtlt/xslte
mplategtltxsltemplate match"chapter/title"gt
ltfoblock font-size"18pt" font-weight"bold"
text-align"centered"gt
ltxslapply-templates/gt lt/foblockgtlt/xsltemplat
egt ltxsltemplate match"para"gt ltfoblock
font-size"12pt" space-before"1pc"
text-align"justified"gt ltxslapply-templates/gt
lt/foblockgtlt/xsltemplategtltxsltemplate
match"emphasis"gt ltfoinline font-style"italic"
gtltxslapply-templates/gt lt/foinlinegtlt/xsltempl
ategt
22Narzedzia
- Procesory XSLT
- XT, James Clark (Java),
- Oracle XML Parser for Java / C / PL-SQL,
- Xalan, Apache (Java, C),
- SAXON, Michael H. Kay (Java implementuje XSLT
2.0 i XQuery), - Sablotron (C, open source),
- Microsoft XML Core Services (MSXML 4.0),
- XSLTC (XSLT compiler, Java), Apache.
- Procesor XSLFO
- FOP, Apache (Java generuje dokumenty w formacie
PDF). - Edytory XSLT
- XMLSPY, Altova
- Xselerator XSL Editor/Debugger, MarrowSoft,
- xslide Emacs Major Mode for XSL Stylesheets.
23Najwazniejsze ograniczenia XSLT 1.0
- Brak konwersji fragmentów drzewa wynikowego na
pelnoprawne zbiory wezlów. - Brak mozliwosci generowania wielu dokumentów
wyjsciowych. - Brak wsparcia dla grupowania wezlów.
- Brak mozliwosci definiowania wlasnych funkcji.
24Gdzie szukac dalej
- EXSLT
- www.exslt.org/
- Kosek, J., Understanding the node-set() Function
- www.xml.com/pub/a/2003/07/16/nodeset.html
- Tyszko, S., Rekurencyjne szablony w XSLT
- Software 2.0, nr 6/2002, Wydawnictwo Software
- Ziolo, Sz., XSLT do kwadratu
- Software 2.0, nr 6/2003, Wydawnictwo Software