Title: XPath, XSLT, (and XSL:FO)
1XPath, XSLT, (and XSLFO)
Zaawansowane Aplikacje Internetowe
2Wyklad
- XPath adresy do elementów XML
- Czemu sluzy XPath?
- Sciezki (ang. access paths)
- Osie (ang. axes)
- Warunki (ang. node tests)
- Predykaty (ang. predicates)
- Wyrazenia (ang. expressions)
- XSLT transformacje plików XML
- XSLFO prawdziwy raj dla smakoszy
3Czemu sluzy XPath?
- Gdy XML zyskal popularnosc, powstaly technologie
pochodne, potrzebny byl jednoznaczny opis adresu
elementu w pliku XML - XPath przypomina sciezki w systemie plików, z
paroma dodatkowymi elementami - Moze adresowac wiecej niz jeden element
- Posiada warunki
- Posiada wyrazenia
4Xpath XML jako drzewo
- XPath traktuje XML jako drzewo elementów
- Kazdy z lisci moze byc
- tagiem, atrybutem, instrukcja sterujaca,
komentarzem, tekstem, elementem namespace - Liscie sa ze soba powiazane galeziami, które
nazywamy osiami
5Przyklad reprezentacji w postaci drzewa
lt?xml version"1.0" ?gt lttopicsgt ltpoliticsgt
ltleadersgt ltperson id"shussein"
country"iraq"gt
ltnamegtSaddamlt/namegtlt/persongt ltperson
id"gbush" country"us"gt
ltnamegtGeorgelt/namegtlt/persongt lt/leadersgt
lt/politicsgt ltmoviesgt ltdirectorsgt
ltperson id"pgreeneway"gt
ltnamegtPeterlt/namegtlt/persongt ltperson
id"slee"gt ltnamegtSpikelt/namegtlt/persongt
lt/directorsgt ltmovie
director"pgreeneway"
rank"great"gtProspero's bookslt/moviegt
ltmoviegtGhost Doglt/moviegt lt/moviesgt lt/topicsgt
6Proste sciezki dostepu
lt?xml version"1.0" ?gt lttopicsgt ltpoliticsgt
ltleadersgt ltperson id"shussein"
country"iraq"gt ltnamegtSaddamlt/namegtlt/p
ersongt ltperson id"gbush"
country"us"gt ltnamegtGeorgelt/namegtlt/persongt
lt/leadersgt lt/politicsgt ltmoviesgt
ltdirectorsgt ltperson
id"pgreeneway"gt ltnamegtPeterlt/namegtlt/persongt
ltperson id"slee"gt ltnamegtSpikelt/nam
egtlt/persongt lt/directorsgt ltmovie
director"pgreeneway" rank"great"gtProspero's
bookslt/moviegt ltmoviegtGhost Doglt/moviegt
lt/moviesgt lt/topicsgt
/topics/politics/leaders/person
/topics/movies/directors
/topics/movies/movie/_at_director
/topics/movies/movie/text()
7Nazwy sciezek dostepu (osi)
- Parent
- Child
- Ancestor
- Ancestor-or-self
- Descendant
- Descendant-or-self
- Preceding
- Preceding-sibling
- Following
- Following-sibling
8Sciezki dostepu, c.d.
lt?xml version"1.0" ?gt lttopicsgt ltpoliticsgt
ltleadersgt ltperson id"shussein"
country"iraq"gt ltnamegtSaddamlt/namegtlt/p
ersongt ltperson id"gbush"
country"us"gt ltnamegtGeorgelt/namegtlt/persongt
lt/leadersgt lt/politicsgt ltmoviesgt
ltdirectorsgt ltperson
id"pgreeneway"gt ltnamegtPeterlt/namegtlt/persongt
ltperson id"slee"gt ltnamegtSpikelt/nam
egtlt/persongt lt/directorsgt ltmovie
director"pgreeneway" rank"great"gtProspero's
bookslt/moviegt ltmoviegtGhost Doglt/moviegt
lt/moviesgt lt/topicsgt
//person/ancestorleaders/person
//leaders/person
9Predykaty
- Predykaty umozliwiaja funkcjonalne wyeliminowanie
niektórych wezlów - /pathpredicate
- Predykaty moga zawierac funkcje i operatory
- Tylko wezly dla których predykat jest prawdziwy
zostaja wlaczone do wyniku
10Operatory
11Funkcje
12Funkcje i predykaty w praktyce
lt?xml version"1.0" ?gt lttopicsgt ltpoliticsgt
ltleadersgt ltperson id"shussein"
country"iraq"gt ltnamegtSaddamlt/namegtlt/p
ersongt ltperson id"gbush"
country"us"gt ltnamegtGeorgelt/namegtlt/persongt
lt/leadersgt lt/politicsgt ltmoviesgt
ltdirectorsgt ltperson
id"pgreeneway"gt ltnamegtPeterlt/namegtlt/persongt
ltperson id"slee"gt ltnamegtSpikelt/nam
egtlt/persongt lt/directorsgt ltmovie
director"pgreeneway" rank"great"gtProspero's
bookslt/moviegt ltmoviegtGhost Doglt/moviegt
lt/moviesgt lt/topicsgt
//personposition() 1
13XPath za i przeciw
- Czy latwo sie nauczyc XPath?
- Tak, choc czasem nie jest latwo
- Czy XPath jest uzyteczny?
- Jak najbardziej, ma wiele zastosowan, ale glównie
uzywany jest w XSLT
count(//document_at_id current()/_at_refid/preceding
document)1
14XSLT
- XSLT Extensible Stylesheet Language
Transformations - Regulowy jezyk przetwarzania dokumentów XML w
inne dokumenty XML (lub w dokumenty tekstowe) - Jezyk sam jest zapisany oczywiscie w XML!
- Uzywa jezyka XPath do adresowania elementów pliku
zródlowego - Podsumowujac XSLT jest jezykiem programowania
15Prosty plik XSLT i reguly
lt?xml version"1.0"?gt ltxslstylesheet
xmlnsxsl"http//www.w3.org/1999/XSL/Transform"
version"1.0"gt ltxsltemplate match"/"gt
This template lists all persons
ltxslapply-templates select"//person" /gt
lt/xsltemplategt ltxsltemplate
match"person"gt Person (idltxslvalue-of
select"_at_id" /gt) ltxslvalue-of
select"name" /gt lt/xsltemplategt
ltxsltemplate match"" /gt lt/xslstylesheetgt
16Przetwarzanie w XSLT
- Zawsze zaczyna sie w tagu glównym (ang. root
node) '/' - Pasujace reguly sa dopasowywane i uruchamiane
- Zmienia sie wezel kontekstu (ang. context node) w
zaleznosci od odpalonych regul - Procedura jest powtarzana rekurencyjnie dla
nowych wezlów kontekstowych
17XSLT przetwarzanie
lt?xml version"1.0" ?gt lttopicsgt ltpoliticsgt
ltleadersgt ltperson id"shussein"
country"iraq"gt
ltnamegtSaddamlt/namegtlt/persongt ltperson
id"gbush" country"us"gt
ltnamegtGeorgelt/namegtlt/persongt lt/leadersgt
lt/politicsgt ltmoviesgt ltdirectorsgt
ltperson id"pgreeneway"gt
ltnamegtPeterlt/namegtlt/persongt ltperson
id"slee"gt ltnamegtSpikelt/namegtlt/persongt
lt/directorsgt ltmovie
director"pgreeneway"
rank"great"gtProspero's
bookslt/moviegt ltmoviegtGhost Doglt/moviegt
lt/moviesgt lt/topicsgt
lt?xml version"1.0"?gt ltxslstylesheet
xmlnsxsl"http//www.w3.org/1999/XSL/Transform"
version"1.0"gt ltxsltemplate match"/"gt
This template lists all persons
ltxslapply-templates select"//person"
/gt lt/xsltemplategt ltxsltemplate
match"person"gt Person (idltxslvalue-of
select"_at_id" /gt) ltxslvalue-of
select"name" /gt lt/xsltemplategt
ltxsltemplate match"" /gt lt/xslstylesheetgt
18Ale po co jest XSLT?!
- Aby zmienic strukture pliku XML!
19lt?xml version"1.0" encoding"Cp852"?gt ltdepartment
sgt ltdepartment name"Computer Science"gt
ltpersongt ltnamegtDawidlt/namegt lt/persongt
ltpersongt ltnamegtKrzysztoflt/namegt
lt/persongt lt/departmentgt ltdepartment
name"Agriculture"gt ltpersongt
ltnamegtDawidlt/namegt lt/persongt lt/departmentgt
ltdepartment name"Spacecrafting"gt ltpersongt
ltnamegtKrzysztoflt/namegt lt/persongt
lt/departmentgt ltdepartment name"Hyperactive
Forestry"gt ltpersongt ltnamegtBoguslt/namegt
lt/persongt lt/departmentgt lt/departmentsgt
lt?xml version"1.0" ?gt ltpeoplegt ltpersongt
ltnamegtDawidlt/namegt ltdeptgtComputer
Sciencelt/deptgt ltdeptgtAgriculturelt/deptgt
lt/persongt ltpersongt
ltnamegtKrzysztoflt/namegt ltdeptgtSpacecrafting
lt/deptgt ltdeptgtComputer Sciencelt/deptgt
lt/persongt ltpersongt
ltnamegtBoguslt/namegt ltdeptgtHyperactive
Forestrylt/deptgt lt/persongt lt/peoplegt
20lt?xml version"1.0"?gt ltxslstylesheet
xmlnsxsl"http//www.w3.org/1999/XSL/Transform"
version"1.0"gt ltxsloutput encoding"Cp852"
method"xml" indent"yes" /gt ltxsltemplate
match"/"gt ltdepartmentsgt
ltxslapply-templates select"//dept" /gt
lt/departmentsgt lt/xsltemplategt
ltxsltemplate match"dept"gt ltxslif
test"count(.//precedingdept./text()
current()/text()) 0"gt
ltdepartmentgt ltxslattribute
name"name"gt ltxslvalue-of
select"./text()" /gt
lt/xslattributegt
ltxslvariable name"currentDept"
select"./text()" /gt
ltxslfor-each select"//person./dept/text()
currentDept"gt ltpersongt
ltnamegtltxslvalue-of
select"name" /gtlt/namegt
lt/persongt lt/xslfor-eachgt
lt/departmentgt lt/xslifgt
lt/xsltemplategt lt/xslstylesheetgt
21Zad. domowe!
- Napisz arkusz XSLT, który wykona transformacje
odwrotna!
lt?xml version"1.0" encoding"Cp852"?gt ltdepartment
sgt ltdepartment name"Computer Science"gt
ltpersongt ltnamegtDawidlt/namegt lt/persongt
ltpersongt ltnamegtKrzysztoflt/namegt
lt/persongt lt/departmentgt ltdepartment
name"Agriculture"gt ltpersongt
ltnamegtDawidlt/namegt lt/persongt lt/departmentgt
ltdepartment name"Spacecrafting"gt ltpersongt
ltnamegtKrzysztoflt/namegt lt/persongt
lt/departmentgt ltdepartment name"Hyperactive
Forestry"gt ltpersongt ltnamegtBoguslt/namegt
lt/persongt lt/departmentgt lt/departmentsgt
lt?xml version"1.0" ?gt ltpeoplegt ltpersongt
ltnamegtDawidlt/namegt ltdeptgtComputer
Sciencelt/deptgt ltdeptgtAgriculturelt/deptgt
lt/persongt ltpersongt
ltnamegtKrzysztoflt/namegt ltdeptgtSpacecrafting
lt/deptgt ltdeptgtComputer Sciencelt/deptgt
lt/persongt ltpersongt
ltnamegtBoguslt/namegt ltdeptgtHyperactive
Forestrylt/deptgt lt/persongt lt/peoplegt
22Tylko po to jest ten XSLT?
- XSLT jest równiez jezykiem zapytan do plików XML,
podobnie jak SQL jest jezykiem zapytan do baz
danych - XQuery.
ltxsltemplate match"/"gt
ltPeopleFromComputerScienceInstitutegt
ltxslcopy-of select"//person./dept/text()
'Computer Science'/name" /gt
lt/PeopleFromComputerScienceInstitutegt
lt/xsltemplategt
ltPeopleFromComputerScienceInstitutegt
ltnamegtDawidlt/namegt ltnamegtKrzysztoflt/namegt lt/Peop
leFromComputerScienceInstitutegt
23Tylko po to jest ten XSLT?
- Jezyk, który umozliwia konwersje z XML do HTML!
- Umozliwia skupienie sie na tresci strony, a nie
jej wygladzie
24Example of XML HTML conversion
25(No Transcript)
26(No Transcript)
27ltxsltemplate match"download"gtltxslif
test"not(_at_lng) or lang_at_lng"gt lttable
class"download"gt ltxslattribute
name"style"gt ltxslchoosegt
ltxslwhen test"_at_float'right'"gtfloat right
margin-right 0em clear bothlt/xslwhengt
ltxslwhen test"_at_float'inline'"gtdisplay
inlinelt/xslwhengt ltxslotherwisegtfloat
left margin-left 0em clear bothlt/xslotherwis
egt lt/xslchoosegt lt/xslattributegt
lttrgt lttd class"pic" align"center"
valign"middle" rowspan"2"gt ltimggt
ltxslattribute name"src"gt
ltxslcall-template name"rewriteImgURL"gt
ltxslwith-param name"href" select"concat('/gf
x/icons/',substring(_at_src,stringength(_at_src)-2),'.gi
f')" /gt lt/xslcall-templategt
lt/xslattributegt lt/imggt lt/tdgt lttd
class"link" align"left" valign"top"gt
ltagt ltxslattribute name"href"gt
ltxslcall-template name"rewriteURL"gt
ltxslwith-param name"href" select"_at_src" /gt
lt/xslcall-templategt
lt/xslattributegt ltxslapply-templates /gt
lt/agt
lt/tdgt lt/trgt lttrgt lttd class"desc"
align"left" valign"top"gt Download file
lt/tdgt lt/trgt lt/tablegt lt/xslifgtlt/xsltemplategt
28Za i przeciw XSLT
- XSLT jest bardzo wszechstronnym jezykiem
- Styl programowania deklaratywnego nie jest dla
kazdego - Latwo osiagnac separacje tresci od prezentacji
(XML-gtHTML)! - XSLT nie jest najszybszy
- XSLT nie jest przystosowany do produkowania
formatów binarnych (PDF)
29XSLFO jezyk opisu graficznego
- XSLFO opisuje w postaci pliku XML graficzny
rozklad elementów strony na pewnym nosniku
(papier, WWW) - Procesory XSLFO moga produkowac pliki PDF, PS i
inne - Apache FOP
- RenderX XEP
- XSLFO jest dosc skomplikowany, ale dzieki XSLT
mozna osiagnac separacje tresci od formatowania
(format DocBook tak dziala!)
30Przyklad pliku XSLFO file
lt?xml version"1.0" encoding"UTF-8"?gt ltforoot
xmlnsfo"http//www.w3.org/1999/XSL/Format"gt
ltfolayout-master-setgt ltfosimple-page-mas
ter master-name"my-page"gt
ltforegion-body margin"1in"/gt
lt/fosimple-page-mastergt lt/folayout-master-se
tgt ltfopage-sequence master-reference"my-pag
e"gt ltfoflow flow-name"xsl-region-body"gt
ltfoblockgtHello, world!lt/foblockgt
lt/foflowgt lt/fopage-sequencegt lt/forootgt
31Dziekuje
- NA ZAJECIA PROSZE SIE PRZYGOTOWAC!
- ZADANIA DOMOWE MUSZA BYC ODROBIONE!