Wykład 04

Transkrypt

Wykład 04
Plan
Przetwarzanie dokumentów XML
i zaawansowane techniki WWW
Wykład 04
T. Romańczukiewicz
Jagiellonian University
2009/2010
T. Romańczukiewicz
XML 04
Plan
Plan
1
XSLT
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Plan
1
XSLT
Wstep
˛
Przykłady
Instrukcje sterujace
˛
Elementy i atrrybuty
Zmienne
Funkcje
Podsumowanie
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
XSL
XPath
XSLT (ang. XSL Transformations jezyk
˛
do transformowania dokumentów XML do
innych dokumentów XML
XSL (ang. Extensible Stylesheet Language)
HTML zawiera dobrze zdefiniowane znaczniki. Przegladarki
˛
wiedza˛ co one
oznaczaja.
˛
Znaczniki HTML określaja˛ format w jakim dane sie˛ bed
˛ a˛ wyświetlane.
CSS - arkusz stylów dla HTML. Określa jak konkretnie maja˛ wygladać
˛
elementy w
przegladarce.
˛
W XML autor sam definiuje dowolne znaczniki. Aby je wyświetlić musi określić ich
styl.
Można użyć CSS dla XML tak jak to sie˛ robi dla HTML.
Lepiej: XSL - arkusz stylów dla XML. Sam jest poprawnie zdefiniowanym
dokumentem XML.
XSLT - Jezyk
˛
transformacji dokumentów XML
XPath - Jezyk
˛
do nawigacji w dokumentach XML
XML-FO - (ang. Extensible Stylesheet Language Formatting Objects) jezyk
˛
służacy
˛ do
formatowania danych z dokumentu XML do prezentacji.
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
XSLT
XSLT
Jest najważniejsza˛ cz˛eścia˛ XSL
Transformuje jedne dokumenty XML w inne. Np zwykły XML w XHTML.
Używa XPath do nawigacji po drzewie XML
Może transformować dowolny element pliku XML na element (X)HMLT
Dzieki
˛ XPath może wybierać poszczególne elementy.
Może przestawiać elementy dodawać i zmieniać atrybuty, ukrywać i pokazywać
elementy itd.
Przekształceń
można dokonywać po stronie klienta
przegladarka,
˛
ale uwaga: starsze przegladarki
˛
moga˛ mieć problemy (FF≥ 3, IE≥ 6,
Opera≥ 9)
Javascript
po stronie serwera (asp)
gotowe programy np. xsltproc,
API i parsery Xalan, libxslt.
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Przykład
Listing 1: cdcatalog.xsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Zamiast znacznika <xsl:stylesheet> można używać <xsl:transform>.
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Przykład
Listing 2: cdcatalog.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
<cd>
<title>Black Sabbath</title>
<artist>Black Sabbath</artist>
<price>66.6</price>
<year>1970</year>
</cd>
<cd>
<title>Strange Highways</title>
<artist>Dio</artist>
<country>USA</country>
<year>1994</year>
</cd>
<cd>
<title>Ghost of a Rose</title>
<artist>Blackmores Night</artist>
<country>UK</country>
<year>2003</year>
</cd>
</catalog>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Element template
Elementem głównym XSLT jest <xsl:stylesheet> lub <xsl:transform>
W arkuszu XSLT znajduje sie˛ co najmniej jeden element <template>.
Posiada on atrybut match, którego wartość jest wyrażeniem XPath. Element ten
wybiera kontekst (wezeł)
˛
dla dalszego przetwarzania danych.
np <xsl:template match="/"> wybiera element główny
Zawartość <xsl:template match="/"> definiuje elementy HTML, przy pomocy
których dane z dokumentu XML bed
˛ a˛ prezentowane.
Wewnatrz
˛ elemetów HTML można sie˛ odwoływać do pliku XML poprzez element:
<xsl:value-of select="catalog/cd/title"/>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Przykład
Listing 3: cdcatalog.xsl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Wypisze tylko pierwsza˛ pozycje˛ z katalogu.
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Element for-each i inne instrukcje sterujace
˛
Listing 4: cdcatalog.xsl
1
2
3
4
5
6
7
8
...
<xsl:for-each select="katalog/cd">
<tr>
<td><xsl:vale-of select="tatle"/></td>
<td><xsl:vale-of select="artist"/></td>
</tr>
</xsl:for-each>
...
Atrybut select jest wyrażeniem XPath. Mże zawierać również dodaktowe filtry:
Dozwolone filtry to
<xsl:for-each select="catalog/cd[artist=’Dio’]">
=
równe
!=
nierówne
&lt;
mniejsze
&gt;
wieksze
˛
Inne instruckje sterujace:
˛
<xsl:if test="price &gt; 6">
<xsl:sort select="artist"/>
Uwaga: brak else
Można użyć w
for-each, for-each-group, apply-templates
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Instrukcja choose
Listing 5: Instrukcja choose
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<xsl:choose>
<xsl:when test="expression">
... some output ...
</xsl:when>
<xsl:otherwise>
... some output ....
</xsl:otherwise>
</xsl:choose>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price &gt; 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
perform-sort
Listing 6: Sortowanie
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:sort select="artist"/>
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
applay-templates
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="cd">
<p>
<xsl:apply-templates select="title"/>
<xsl:apply-templates select="artist"/>
</p>
</xsl:template>
<xsl:template match="title">
Title: <span style="color:#ff0000">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
<xsl:template match="artist">
Artist: <span style="color:#00ff00">
<xsl:value-of select="."/></span>
<br />
</xsl:template>
</xsl:stylesheet>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Wynikowe drzewo
XSLT przekształca jeden dokument XML w drugi. W wynikowym drzewie można
tworzyć na kilka sposobów:
W˛ezły moga˛ być wpisane w arkusz XSLT
Można je tworzyć przy pomocy konstruktorów <xsar:element>,
Moga˛ być przepisane z pliku źródłowego
Listing 7: Elementy w arkuszu
1
2
3
4
5
6
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
T. Romańczukiewicz
XML 04
<xsar:comment>
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
xsl:element
Listing 8: Elementy w arkuszu cd.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="catalog/cd">
<xsl:element name="singer">
<xsl:value-of select="artist" />
</xsl:element>
<br />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
xsl:attribute
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<picture>
<xsl:attribute name="source"/>
</picture>
<picture>
<xsl:attribute name="source">
<xsl:value-of select="images/name" />
</xsl:attribute>
</picture>
<xsl:attribute-set name="font">
<xsl:attribute name="fname">Arial</xsl:attribute>
<xsl:attribute name="size">14px</xsl:attribute>
<xsl:attribute name="color">red</xsl:attribute>
</xsl:attribute-set>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Zastosowania tworzenia nowych elementów
Wstawienie instrukcji przetwarzania lub komentarza.
Wstawienie samych białych znaków.
Wstawienie tekstu bez nadmiarowych białych znaków.
Dynamicznie określana nazwa elementu lub atrybutu.
Warunkowe wstawienie atrybutu.
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Listing 9: Przykłady zastosowań.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!−− i n s t r u k c j a p r z e t w a z a n i a −−>
<xsl:processing-instruction target="xml-stylesheet">
type="text/css" href="styl.css"
</xsl:processing-instruction>
<!−− D y n a m i cz n i e nadawana nazwa e l e m e n t u −−>
<xsl:element name="h{max((count(ancestor-or-self::sekcja), 6))}">
...
</xsl:element>
<!−− Warunkowe w s t a w i a n i e a t r y b u t u −−>
<p>
<xsl:if test="@stanowisko = kierownik">
<xsl:attribute name="class">
szef
</xsl:attribute>
</xsl:if>
</p>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Szablony wartości atrybutu
Szablony wartości atrybutu można wstawiać w
atrybutach drzewa wynikowego
<img src="{$image}/{$size}/{@id}.jpg"/>
w niektórych instrukcjach XSLT
<xsar:element name="h{count(ancestror-or-self::sekcja)}">
Cz˛eści stałe napisy kopiowane do wyniku
Wyrażenia XPATH umieszczone miedzy
˛
{i}
Reprezentacja tekstowa wyliczanej sekwencji
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
element output
Element <xsl:output> definiuje format danych wynikowych.
Musi sie˛ pojawić jako dziecko <xsl:stylesheet> lub <xsl:transform>
method
xml html text name
version
string
encoding
string
omit-xml-declaration
yes no
standalone
yes no
indent
yes no
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Zmienne
Zmienne w XSLT sa˛ elementami postaci:
1
2
3
<xsl:variable name="name" select="expression">
<!−− C o n t e n t : t e m p l a t e −−>
</xsl:variable>
W zależności od tego gdzie sa˛ zdefiniowane moga˛ być zmiennymi lokalnymi
(wewnatrz
˛ konkretnego szablonu) lub globalnymi (w całym arkuszu)
Wartość zmiennej określa sie˛ poprzez zawartość elementu lub poprzez atrybut
select
Uwaga: Gdy raz określi sie˛ wartość zmiennej, nie można jej już modyfikować.
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Zmienne
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<xsl:variable name="header">
<tr>
<th>Element</th>
<th>Description</th>
</tr>
</xsl:variable>
<xsl:template match="/">
<table>
<xsl:copy-of select="$header" />
<xsl:for-each select="reference/record">
<tr>
<xsl:if category="XML">
<td><xsl:value-of select="element"/></td>
<td><xsl:value-of select="description"/></td>
</xsl:if>
</tr>
</xsl:for-each>
</table>
<br />
<table>
<xsl:copy-of select="$header" />
<xsl:for-each select="table/record">
<tr>
<xsl:if category="XSL">
<td><xsl:value-of select="element"/></td>
<td><xsl:value-of select="description"/></td>
</xsl:if>
</tr>
</xsl:for-each>
</table>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
copy i copy-of
1
2
3
4
5
6
7
<xsl:copy use-attribute-sets="name-list">
<!−− C o n t e n t : t e m p l a t e −−>
</xsl:copy>
<xsl:copy-of use-attribute-sets="name-list">
<!−− C o n t e n t : t e m p l a t e −−>
</xsl:copy-of>
Element <xsar:copy> tworzy kopie˛ aktualnego wezła,
˛
ale bez dzieci i atrybutów.
Przestrzeń nazw jest automatycznie kopiowana!
Element <xsar:copy-of> tworzy kopie˛ aktualnego wezła
˛
wraz z dziećmi i atrybutami
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Szablony nazwane
W szablonie atrybut name.
call-template
uruchamia.
Bez zmiany wezła
˛
bieżacego
˛
(inaczej niż apply-templates).
Możliwa rekurencja
1
2
3
4
5
6
7
8
9
10
11
12
<xsl:template name="opisz-element">
<p>Element o nazwie <xsl:value-of select="name()"/>.</p>
</xsl:template>
<xsl:template match="/">
<html><body>
<h1>Wszystkie elementy:</h1>
<xsl:for-each select="//*">
<xsl:call-template name="opisz-element"/>
</xsl:for-each>
</body></html>
</xsl:template>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Listing 10: Przykład rekurencji
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<xsl:template name="silnia">
<xsl:param name="n"/>
<xsl:param name="res" select="1"/>
<xsl:choose>
<xsl:when test="$n &gt; 1">
<xsl:call-template name="silnia">
<xsl:with-param name="n" select="$n - 1"/>
<xsl:with-param name="res"
select="$n * $res"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$res"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
Element <xsl:param
parametr szablonu.
name="obligatory name"select="optional expr">
deklaruje
Element <xsl:with-param name="obligatory name"select="optional expr">
(wywołanie) definiuje wartość parametru przekazanego do szablonu.
Atrybut name musi sie˛ zgadzać, z nazwa˛ elemenu <xsl:param>.
Użycie jest dozwolone jedynie wewnatrz
˛ <xsl:apply-templates> i
<xsl:call-template>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Defiowanie własnych funkcji
1
2
3
4
5
6
<xsl:function name="loc:silnia">
<xsl:param name="n"/>
<xsl:sequence select="if($n &lt;= 1)
then 1
else $n * loc:silnia($n - 1)"/>
</xsl:function>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Funkcje w XSLT
XSLT zawiera około 100 funkcji:
Przykłady funkcji
current()
Zwraca aktualny wez˛
˛ eł
document()
Używane do odczytywania wezłów
˛
z innego dokumentu XML
element-available()
Sprawdza czy dany elemeny jest rozumiany
przez procesor XSLT. Jeśłi nie można użyć elementu
<xslt:fallback>
format-number()
Zamienia liczba˛ na ciag
˛ znaków
function-available()
Sprawdza czy funkcja jest dostepna
˛
generate-id()
Zwraca unikalny ciag
˛ identyfikujacy
˛ dany wezeł
˛
system-property()
Zwraca wartości systemowe
<xsl:version>, <xsl:vendor>, <xsl:vendor-url>
unparsed-entity-uri()
Zwraca URI nieprzetworzonej encicji.
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Listing 11: Przykład srawdzania dostepno
˛
ści
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html><body>
<xsl:choose>
<xsl:when test="element-available(’xsl:comment’)">
<p>xsl:comment is supported.</p>
</xsl:when>
<xsl:otherwise>
<p>xsl:comment is not supported.</p>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="element-available(’xsl:delete’)">
<p>xsl:delete is supported.</p>
</xsl:when>
<xsl:otherwise>
<p>xsl:delete is not supported.</p>
</xsl:otherwise>
</xsl:choose>
</body></html>
</xsl:template>
</xsl:stylesheet>
T. Romańczukiewicz
XML 04
XSLT
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
Zastosowania
Prezentacja dokumentów
Prezentacja bazy danych
Konwersja miedzy
˛
dokumentami XML
Raporty, podsumowania itp
Tworzenie skryptów i plików konfiguracyjnych
T. Romańczukiewicz
XML 04
XSLT
1
2
3
Wstep
˛
Przykłady Instrukcje sterujace
˛
Elementy i atrrybuty Zmienne
<Zyczenia>
Wesolych Swiat
< / Zyczenia>
T. Romańczukiewicz
XML 04

Podobne dokumenty