Kurs WWW
Kurs WWW
Język XML, część II
Język XML, część II
Paweł Rajba
Paweł Rajba
pawel@ii.uni.wroc.pl
http://pawel.ii.uni.wroc.pl/
Zawartość modułu
Zawartość modułu
Wprowadzenie do XSL
XPath
XSLT
XSL-FO
Na podstawie kursów ze stron:
Na podstawie kursów ze stron:
http://www.w3schools.com/xpath/default.asp
http://www.w3schools.com/xpath/default.asp
http://www.w3schools.com/xsl/default.asp
http://www.w3schools.com/xsl/default.asp
http://www.w3schools.com/xslfo/default.asp
http://www.w3schools.com/xslfo/default.asp
Kurs WWW
Copyright © Paweł Rajba
- 1 -
Kilka uwag wstępnych o XSL
Kilka uwag wstępnych o XSL
XSL – pochodzi od
XSL – pochodzi od
eXtensible Stylesheet Language
eXtensible Stylesheet Language
CSS – style dla HTML-a
CSS – style dla HTML-a
XSL – style dla XML-a
XSL – style dla XML-a
XSL składa się z trzech części
XSL składa się z trzech części
XPath – język nawigacji dokumentów XML
XPath – język nawigacji dokumentów XML
XSLT – transformacja dokumentów XML
XSLT – transformacja dokumentów XML
XSL-FO – język formatowania dokumentów XML
XSL-FO – język formatowania dokumentów XML
Kurs WWW
Copyright © Paweł Rajba
- 2 -
XPath
XPath
Terminologia
Terminologia
Node – węzłem są elementy, atrybuty, tekst, itp.
Node – węzłem są elementy, atrybuty, tekst, itp.
np. <znacznik>, <p>akapit</p>, lang="en"
np. <znacznik>, <p>akapit</p>, lang="en"
Wartości atomowe
Wartości atomowe
np. Akapit, "en",
np. Akapit, "en",
Item – node lub wartość atomowa
Item – node lub wartość atomowa
Terminologia zależności (jak w DOM)
Terminologia zależności (jak w DOM)
Parent, Children, Siblings, Ancestors, Descendants
Parent, Children, Siblings, Ancestors, Descendants
Kurs WWW
Copyright © Paweł Rajba
- 3 -
XPath
XPath
Składnia wzorców, przykłady
Składnia wzorców, przykłady
para – dopasuje się do elementu para
para – dopasuje się do elementu para
* - dopasuje się do każdego elementu
* - dopasuje się do każdego elementu
chap|appen – dopasuje się do chap i appen
chap|appen – dopasuje się do chap i appen
ol/item – dopasuje się do item, którego rodzicem
ol/item – dopasuje się do item, którego rodzicem
jest ol
jest ol
ol//item –
ol//item –
dopasuje się do item, którego przodkiem
dopasuje się do item, którego przodkiem
jest ol
jest ol
. – bieżący węzeł
. – bieżący węzeł
.. – rodzic danego węzła
.. – rodzic danego węzła
Kurs WWW
Copyright © Paweł Rajba
- 4 -
XPath
XPath
Składnia wzorców, przykłady
Składnia wzorców, przykłady
/ – root
/ – root
@class – dopasuje się do atrybutu class
@class – dopasuje się do atrybutu class
id("W11") – dopusje się do elementu o id=W11
id("W11") – dopusje się do elementu o id=W11
div[@class="appendix"]//p
div[@class="appendix"]//p
items/item[position()>1]
items/item[position()>1]
item[position() mod 2 = 1]
item[position() mod 2 = 1]
para[last()=1]
para[last()=1]
para[1]
para[1]
Kurs WWW
Copyright © Paweł Rajba
- 5 -
XPath
XPath
Przykłady
Przykłady
/bookstore
/bookstore
bookstore/book
bookstore/book
//book
//book
bookstore//book
bookstore//book
//@lang
//@lang
/bookstore/book[0] – pierwszy element
/bookstore/book[0] – pierwszy element
/bookstore/book[price>35]/title
/bookstore/book[price>35]/title
Kurs WWW
Copyright © Paweł Rajba
- 6 -
XPath
XPath
Dokładne określenie lokalizacji
Dokładne określenie lokalizacji
Relacje zależności: ancestor, ancestor-or-self,
Relacje zależności: ancestor, ancestor-or-self,
attribute, child, descendant, descendant-or-self,
attribute, child, descendant, descendant-or-self,
following, following-sibling, namespace, parent,
following, following-sibling, namespace, parent,
preceding, preceding-sibling, self
preceding, preceding-sibling, self
Ścieżka ma postać
Ścieżka ma postać
/step/step/...
/step/step/...
lub
lub
step/step/...
step/step/...
każdy krok ścieżki ma postać
każdy krok ścieżki ma postać
axisname::nodetest[predykat]
axisname::nodetest[predykat]
Przykłady: child::book, attribute::lang, child::*,
Przykłady: child::book, attribute::lang, child::*,
attribute::*, ancestor::book, child::*/child::price
attribute::*, ancestor::book, child::*/child::price
Kurs WWW
Copyright © Paweł Rajba
- 7 -
XPath
XPath
Kilka przykładowych funkcji
Kilka przykładowych funkcji
compare(s1,s2) – zwraca -1, jeśli s1<s2; 0, jeśli
compare(s1,s2) – zwraca -1, jeśli s1<s2; 0, jeśli
s1=s2 i 1 jeśli, s1>s2
s1=s2 i 1 jeśli, s1>s2
concat(s1,s2,...) - zwraca połączone napisy
concat(s1,s2,...) - zwraca połączone napisy
np. concat('XPath ','is ','FUN!') // XPath is FUN
np. concat('XPath ','is ','FUN!') // XPath is FUN
codepoints-to-string(int,int,...) - zwraca napis
codepoints-to-string(int,int,...) - zwraca napis
złożony z kodów będących argumentami
złożony z kodów będących argumentami
np. string-to-codepoints("Thérèse")
np. string-to-codepoints("Thérèse")
Wynik: 84, 104, 233, 114, 232, 115, 101
Wynik: 84, 104, 233, 114, 232, 115, 101
substring(string,start,len) – wycina fragment napisu
substring(string,start,len) – wycina fragment napisu
np. substring('Beatles',1,4) Wynik: 'Beat'
np. substring('Beatles',1,4) Wynik: 'Beat'
Kurs WWW
Copyright © Paweł Rajba
- 8 -
XPath
XPath
Kilka przykładowych funkcji
Kilka przykładowych funkcji
string-length(napis) – zwraca dłuość napisu
string-length(napis) – zwraca dłuość napisu
name() - zwraca nazwę bieżącego węzła
name() - zwraca nazwę bieżącego węzła
index-of((item,item,...),searchitem) – zwraca numer
index-of((item,item,...),searchitem) – zwraca numer
szukanego elementu; numeracja od 1
szukanego elementu; numeracja od 1
count((item,item,...)) - zwraca ilość węzłów
count((item,item,...)) - zwraca ilość węzłów
position() - zwraca numer aktualnie przetwarzanego
position() - zwraca numer aktualnie przetwarzanego
elementu
elementu
last() - zwraca ilość elementów na liście
last() - zwraca ilość elementów na liście
Kurs WWW
Copyright © Paweł Rajba
- 9 -
XPath
XPath
Przykład
Przykład
kurswww-p1-produkty.xml
kurswww-p1-produkty.xml
Kurs WWW
Copyright © Paweł Rajba
- 10 -
XSLT
XSLT
Wprowadzenie
Wprowadzenie
Korzysta z XPath
Korzysta z XPath
Służy do transformacji dokumentów XML na inne
Służy do transformacji dokumentów XML na inne
dokumenty XML, dokumenty HTML, itd.
dokumenty XML, dokumenty HTML, itd.
Przeglądarki obsługujące XSLT:
Przeglądarki obsługujące XSLT:
Firefox 1.0.2
Firefox 1.0.2
Mozilla 1.7.8
Mozilla 1.7.8
Netscape 8
Netscape 8
Opera 8
Opera 8
Internet Explorer 6
Internet Explorer 6
Kurs WWW
Copyright © Paweł Rajba
- 11 -
XSLT
XSLT
Deklaracja arkusza transformacji
Deklaracja arkusza transformacji
<xsl:stylesheet version="1.0"
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:transform version="1.0"
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
Odwołanie do arkusza XSL w dokumencie XML
Odwołanie do arkusza XSL w dokumencie XML
<?xml-stylesheet type="text/xsl" href="arkusz.xsl"?>
<?xml-stylesheet type="text/xsl" href="arkusz.xsl"?>
Kurs WWW
Copyright © Paweł Rajba
- 12 -
XSLT
XSLT
Arkusz XSL może zawierać pewną liczb reguł
Arkusz XSL może zawierać pewną liczb reguł
(template)
(template)
Do utworzenia reguły używamy elementu
Do utworzenia reguły używamy elementu
<xsl:template match="wartość">
<xsl:template match="wartość">
atrybut match określa element, dla którego reguła będzie
atrybut match określa element, dla którego reguła będzie
obowiązywać
obowiązywać
wartość atrybutu match to wyrażenie XPath
wartość atrybutu match to wyrażenie XPath
Kurs WWW
Copyright © Paweł Rajba
- 13 -
XSLT
XSLT
Element value-of
Element value-of
Służy do pobrania wartości elementu z dokumentu
Służy do pobrania wartości elementu z dokumentu
XML i przekazanie jej do wyniku
XML i przekazanie jej do wyniku
Składnia
Składnia
<xsl:value-of select="element">
<xsl:value-of select="element">
select określa wyrażenie XPath
select określa wyrażenie XPath
Przykład
Przykład
<xsl:value-of select="/dostawa/produkt/nazwa">
<xsl:value-of select="/dostawa/produkt/nazwa">
Kurs WWW
Copyright © Paweł Rajba
- 14 -
XSLT
XSLT
Element for-each
Element for-each
Służy do iterowania elementów z dokumentu XML
Służy do iterowania elementów z dokumentu XML
Składnia
Składnia
<xsl:for-each select="element">
<xsl:for-each select="element">
select określa wyrażenie XPath
select określa wyrażenie XPath
Przykład
Przykład
<xsl:for-each select="nazwa_pliku">
<xsl:for-each select="nazwa_pliku">
<xsl:value-of select="."/>
<xsl:value-of select="."/>
</xsl:foreach>
</xsl:foreach>
Kurs WWW
Copyright © Paweł Rajba
- 15 -
XSLT
XSLT
Element sort
Element sort
Umożliwia sortowanie wyniku uzyskanego przez
Umożliwia sortowanie wyniku uzyskanego przez
foreach
foreach
Składnia
Składnia
<xsl:sort order="ascending | descending"
<xsl:sort order="ascending | descending"
case-order="upper-first | lower-first">
case-order="upper-first | lower-first">
Znaczenie atrybutów zgodne z opisem
Znaczenie atrybutów zgodne z opisem
Podanie kilku elementów sort realizuje sortowanie
Podanie kilku elementów sort realizuje sortowanie
zagnieżdżone
zagnieżdżone
Kurs WWW
Copyright © Paweł Rajba
- 16 -
XSLT
XSLT
Element if
Element if
Umieści treść w wyniku, jeśli będzie spełniony
Umieści treść w wyniku, jeśli będzie spełniony
określony warunek
określony warunek
Składnia
Składnia
<xsl:if test="warunek"> treść </xsl:if>
<xsl:if test="warunek"> treść </xsl:if>
Przykład
Przykład
<xsl:if test=". > 10">Robimy na zielono</xsl:if>
<xsl:if test=". > 10">Robimy na zielono</xsl:if>
Kurs WWW
Copyright © Paweł Rajba
- 17 -
XSLT
XSLT
Element choose
Element choose
Podobny do instrukcji switch z języka C
Podobny do instrukcji switch z języka C
Składnia
Składnia
<xsl:choose>
<xsl:choose>
<xsl:when test="expression">
<xsl:when test="expression">
... some output ...
... some output ...
</xsl:when>
</xsl:when>
<xsl:otherwise>
<xsl:otherwise>
... some output ....
... some output ....
</xsl:otherwise>
</xsl:otherwise>
</xsl:choose>
</xsl:choose>
Kurs WWW
Copyright © Paweł Rajba
- 18 -
XSLT
XSLT
Element apply-templates
Element apply-templates
Przetwarza dzieci znacznika
Przetwarza dzieci znacznika
Składnia
Składnia
<xsl:apply-templates select="element">
<xsl:apply-templates select="element">
Podanie opcjonalnego atrybutu select spowoduje
Podanie opcjonalnego atrybutu select spowoduje
przetwarzanie tylko określonych elementów
przetwarzanie tylko określonych elementów
Kurs WWW
Copyright © Paweł Rajba
- 19 -
XSLT
XSLT
Do utworzenia elementu wraz atrybutami mamy
Do utworzenia elementu wraz atrybutami mamy
znaczniki element i attribute
znaczniki element i attribute
Przykład
Przykład
XSL:
XSL:
<xsl:element name="napis">
<xsl:element name="napis">
<xsl:attribute name="kolor">czerwony</xsl:attribute>
<xsl:attribute name="kolor">czerwony</xsl:attribute>
Wielki napis
Wielki napis
</xsl:element>
</xsl:element>
Wynik:
Wynik:
<napis kolor="czerwony">Wielki napis</napis>
<napis kolor="czerwony">Wielki napis</napis>
Kurs WWW
Copyright © Paweł Rajba
- 20 -
XSLT
XSLT
Do utworzenia komentarza mamy znacznik
Do utworzenia komentarza mamy znacznik
comment
comment
Przykład
Przykład
XSL:
XSL:
<xsl:comment>To jest komentarz</xsl:comment>
<xsl:comment>To jest komentarz</xsl:comment>
Wynik:
Wynik:
<!--To jest komentarz-->
<!--To jest komentarz-->
Do uworzenia tekstu mamy znacznik text
Do uworzenia tekstu mamy znacznik text
Przykład
Przykład
<xsl:text>To będzie zwykły kawałek tekstu</xsl:text>
<xsl:text>To będzie zwykły kawałek tekstu</xsl:text>
Kurs WWW
Copyright © Paweł Rajba
- 21 -
XSLT
XSLT
Przykład
Przykład
kurswww-p2A-osoby.xml
kurswww-p2A-osoby.xml
kurswww-p2B-osoby.xml
kurswww-p2B-osoby.xml
kurswww-p3-produkty.xml
kurswww-p3-produkty.xml
Kurs WWW
Copyright © Paweł Rajba
- 22 -
XSL-FO
XSL-FO
Służy do formatowania elementów w XML
Służy do formatowania elementów w XML
Jest pod pewnym względem podobne do CSS
Jest pod pewnym względem podobne do CSS
Kurs WWW
Copyright © Paweł Rajba
- 23 -
XSL-FO
XSL-FO
Szablon dokumentu
Szablon dokumentu
<?xml version="1.0" encoding="ISO-8859-2"?>
<?xml version="1.0" encoding="ISO-8859-2"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:layout-master-set>
<fo:simple-page-master master-name="A4">
<fo:simple-page-master master-name="A4">
<!-- Page template goes here -->
<!-- Page template goes here -->
</fo:simple-page-master>
</fo:simple-page-master>
</fo:layout-master-set>
</fo:layout-master-set>
<fo:page-sequence master-reference="A4">
<fo:page-sequence master-reference="A4">
<!-- Page content goes here -->
<!-- Page content goes here -->
</fo:page-sequence>
</fo:page-sequence>
</fo:root>
</fo:root>
Kurs WWW
Copyright © Paweł Rajba
- 24 -
XSL-FO
XSL-FO
W XSL FO również występuje tzw. box model
W XSL FO również występuje tzw. box model
Kolejne poziomy obszarów
Kolejne poziomy obszarów
strony (page)
strony (page)
regiony (region)
regiony (region)
bloki (block)
bloki (block)
wiersze (line)
wiersze (line)
zawartość wierszy (inline)
zawartość wierszy (inline)
Kurs WWW
Copyright © Paweł Rajba
- 25 -
XSL-FO
XSL-FO
Dokument dzieli się na strony
Dokument dzieli się na strony
w wydruku jest to jedna lub więcej stron
w wydruku jest to jedna lub więcej stron
na ekranie jest to jedna wielka strona
na ekranie jest to jedna wielka strona
Każda strona dzieli się na regiony
Każda strona dzieli się na regiony
region-body (treść strony)
region-body (treść strony)
region-before (nagłówek)
region-before (nagłówek)
region-after (stopka)
region-after (stopka)
region-start (lewy panel nawigacyjny)
region-start (lewy panel nawigacyjny)
region-end (prawy panel nawigacyjny)
region-end (prawy panel nawigacyjny)
Kurs WWW
Copyright © Paweł Rajba
- 26 -
XSL-FO
XSL-FO
Każdy region zawiera bloki
Każdy region zawiera bloki
Każdy blok może zawierać inne bloki lub
Każdy blok może zawierać inne bloki lub
wiersze
wiersze
Wiersze zawierają jakąś zawartość, zwykle po
Wiersze zawierają jakąś zawartość, zwykle po
prostu tekst.
prostu tekst.
Kurs WWW
Copyright © Paweł Rajba
- 27 -
XSL-FO
XSL-FO
Jak to dokładnie wygląda?
Jak to dokładnie wygląda?
XSL-FO korzysta z <fo:page-sequence> do
XSL-FO korzysta z <fo:page-sequence> do
zdefiniowania stron wyniku
zdefiniowania stron wyniku
Każda strona wynikowa odwołuje się do ,,page
Każda strona wynikowa odwołuje się do ,,page
master'', który definiuje układ strony
master'', który definiuje układ strony
Każda strona wynikowa ma elementy <fo:flow>
Każda strona wynikowa ma elementy <fo:flow>
określające jej zawartość
określające jej zawartość
Kolejne strony są drukowane lub wyświetlane
Kolejne strony są drukowane lub wyświetlane
sekwencyjnie
sekwencyjnie
Kurs WWW
Copyright © Paweł Rajba
- 28 -
XSL-FO
XSL-FO
Strony XSL-FO są wypełnione zawartością
Strony XSL-FO są wypełnione zawartością
elementu <xsl:flow>
elementu <xsl:flow>
Element ten ma atrybut "flow-name", który
Element ten ma atrybut "flow-name", który
może przyjmować następujące wartości
może przyjmować następujące wartości
xsl-region-body (odpowiednik region-body)
xsl-region-body (odpowiednik region-body)
xsl-region-before (odpowiednik
xsl-region-before (odpowiednik
region-before)
region-before)
xsl-region-after (odpowiednik
xsl-region-after (odpowiednik
region-after)
region-after)
xsl-region-start (odpowiednik
xsl-region-start (odpowiednik
region-start)
region-start)
xsl-region-end (odpowiednik
xsl-region-end (odpowiednik
region-end)
region-end)
Kurs WWW
Copyright © Paweł Rajba
- 29 -
XSL-FO
XSL-FO
Wzorce stron (tzw. page masters) definiują
Wzorce stron (tzw. page masters) definiują
układ stron
układ stron
Przykłady
Przykłady
<fo:simple-page-master master-name="intro">
<fo:simple-page-master master-name="intro">
<fo:region-body margin="5in" />
<fo:region-body margin="5in" />
</fo:simple-page-master>
</fo:simple-page-master>
<fo:simple-page-master master-name="left">
<fo:simple-page-master master-name="left">
<fo:region-body margin-left="2in" margin-right="3in" />
<fo:region-body margin-left="2in" margin-right="3in" />
</fo:simple-page-master>
</fo:simple-page-master>
<fo:simple-page-master master-name="right">
<fo:simple-page-master master-name="right">
<fo:region-body margin-left="3in" margin-right="2in" />
<fo:region-body margin-left="3in" margin-right="2in" />
</fo:simple-page-master>
</fo:simple-page-master>
pierwszy może być używany jako wstęp, dwa kolejne do stron
pierwszy może być używany jako wstęp, dwa kolejne do stron
nieparzystych i parzystych
nieparzystych i parzystych
Kurs WWW
Copyright © Paweł Rajba
- 30 -
XSL-FO
XSL-FO
Do określenia rozmiaru strony mamy atrybuty
Do określenia rozmiaru strony mamy atrybuty
page-width
page-width
page-height
page-height
Do określenia marginesów mamy
Do określenia marginesów mamy
margin-top
margin-top
margin-bottom
margin-bottom
margin-left
margin-left
margin-right
margin-right
margin (wszystkie cztery marginesy)
margin (wszystkie cztery marginesy)
Kurs WWW
Copyright © Paweł Rajba
- 31 -
XSL-FO
XSL-FO
Przykład układu strony A4
Przykład układu strony A4
<fo:simple-page-master master-name="A4"
<fo:simple-page-master master-name="A4"
page-width="297mm" page-height="210mm"
page-width="297mm" page-height="210mm"
margin-top="1cm" margin-bottom="1cm"
margin-top="1cm" margin-bottom="1cm"
margin-left="1cm" margin-right="1cm">
margin-left="1cm" margin-right="1cm">
<fo:region-body margin="3cm"/>
<fo:region-body margin="3cm"/>
<fo:region-before extent="2cm"/>
<fo:region-before extent="2cm"/>
<fo:region-after extent="2cm"/>
<fo:region-after extent="2cm"/>
<fo:region-start extent="2cm"/>
<fo:region-start extent="2cm"/>
<fo:region-end extent="2cm"/>
<fo:region-end extent="2cm"/>
</fo:simple-page-master>
</fo:simple-page-master>
Kurs WWW
Copyright © Paweł Rajba
- 32 -
XSL-FO
XSL-FO
Umieszczanie bloków, przykład
Umieszczanie bloków, przykład
<fo:page-sequence>
<fo:page-sequence>
<fo:flow flow-name="xsl-region-body">
<fo:flow flow-name="xsl-region-body">
<fo:block>
<fo:block>
<!-- Treść -->
<!-- Treść -->
</fo:block>
</fo:block>
</fo:flow>
</fo:flow>
</fo:page-sequence>
</fo:page-sequence>
Formatowanie bloków
Formatowanie bloków
Mamy szereg właściwości znanych już z CSSa
Mamy szereg właściwości znanych już z CSSa
Kurs WWW
Copyright © Paweł Rajba
- 33 -
XSL-FO
XSL-FO
Tworzenie list, przykład
Tworzenie list, przykład
<fo:list-block>
<fo:list-block>
<fo:list-item>
<fo:list-item>
<fo:list-item-label>
<fo:list-item-label>
<fo:block>*</fo:block>
<fo:block>*</fo:block>
</fo:list-item-label>
</fo:list-item-label>
<fo:list-item-body>
<fo:list-item-body>
<fo:block>Volvo</fo:block>
<fo:block>Volvo</fo:block>
</fo:list-item-body>
</fo:list-item-body>
</fo:list-item>
</fo:list-item>
Kurs WWW
Copyright © Paweł Rajba
- 34 -
<fo:list-item>
<fo:list-item>
<fo:list-item-label>
<fo:list-item-label>
<fo:block>*</fo:block>
<fo:block>*</fo:block>
</fo:list-item-label>
</fo:list-item-label>
<fo:list-item-body>
<fo:list-item-body>
<fo:block>Saab</fo:block>
<fo:block>Saab</fo:block>
</fo:list-item-body>
</fo:list-item-body>
</fo:list-item>
</fo:list-item>
</fo:list-block>
</fo:list-block>
XSL-FO
XSL-FO
Do tworzenia tabel mamy następujące obiekty
Do tworzenia tabel mamy następujące obiekty
fo:table-and-caption
fo:table-and-caption
fo:table
fo:table
fo:table-caption
fo:table-caption
fo:table-column
fo:table-column
fo:table-header
fo:table-header
fo:table-footer
fo:table-footer
fo:table-body
fo:table-body
fo:table-row
fo:table-row
fo:table-cell
fo:table-cell
Kurs WWW
Copyright © Paweł Rajba
- 35 -
XSL-FO
XSL-FO
Przykłady
Przykłady
kurswww-p4-w3c.xml
kurswww-p4-w3c.xml
kurswww-p5-osoby.xml
kurswww-p5-osoby.xml
Kurs WWW
Copyright © Paweł Rajba
- 36 -