xsl:template

Transkrypt

xsl:template
Hipertekst i hipermedia
Język XSLT
dr inż.Wioleta Szwoch
Wioleta Szwoch, KISI ETI PG
1
XPath (XML Path Language)
• Standard do identyfikacji części
dokumentu XML-owego
• Wykorzystanie wyrażeń do nawigacji w
dokumencie XML
– Składnia podobna do ścieżek systemu plików w Unix
– Możliwość wydobycia potrzebnych nam węzłów
• Zawiera bibliotekę funkcji standardowych
• Znajduje zastosowanie w innych standardach
Wioleta Szwoch, KISI ETI PG
2
ancestor
1
3
2
5
sibling
4
Węzeł
odniesienia
6
8
7
sibling
preceding
following
9
11
10
12
descendant
Wioleta Szwoch, KISI ETI PG
3
XPath
• składnia
– wybór węzła
nazwa węzła
/ korzeń
. bieżący węzeł (self::node())
.. rodzic (parent::node())
@nazwa atrybutu
– predykaty
• pozwalają na sprawdzenie własności,
których nie da się wyrazić w samych
testach węzłów
• dowolne wyrażenie XPath
Wioleta Szwoch, KISI ETI PG
5
XPath
• składnia
– wybór nieznanych węzłów
* dowolny węzeł
@*
dowolny atrybut
node() dowolny węzeł
– wybór wielu ścieżek
|
Wioleta Szwoch, KISI ETI PG
6
XPath
• funkcje
– możliwość operacji na:
• liczbach,
– round(), sum(), ...
• łańcuchach tekstów,
– concat(), substring(), string(),...
• wartościach logicznych
– true(), false(), not(),...
• pozostałe
– count(), position(), last()...
Wioleta Szwoch, KISI ETI PG
7
XPath
• Operatory
– porównania i logiczne
!= , <= , = , > , >=
and, or, not
– liczbowe
+, -, *, div, mod
– (towar[1]/wartość + towar[2]/wartość ) div 100
Wioleta Szwoch, KISI ETI PG
8
XSL (eXtensible Stylesheet Language)
• SGML(1986) ( XML)
• DSSSL (XSL)
– Document Style and Semantics Specification Language
– język arkuszy stylów
– język do przetwarzania i przekształcania dokumentów
SGML do postaci, która można wyświetlić lub
wydrukować
– zbyt skomplikowana struktura definiowania formatów
dokumentów
– A HUGE MONSTER OF A LANGUAGE
Wioleta Szwoch, KISI ETI PG
9
XSL (eXtensible Stylesheet Language)
XSLT (XSL Transformation)
XSL FO (XSL Formating Objects)
• Język pozwalający przekształcać i wyświetlać
dane z dokumentów XML
• Co by było, gdyby nie było XSL?
Wioleta Szwoch, KISI ETI PG
10
XSLT
• Extensible StyleSheet Language Transformations
– Rozszerzalny Język Arkuszy Stylów – Przekształcenia
• CSS – Kaskadowe Arkusze Stylów
– arkusz stylów określa styl, czyli wygląd pewnych znaczników (HTML lub
XML)
– możemy zdefiniować rodzaj czcionki, rozmiar i kolor tekstu, rodzaj
obramowania, kolor tła, …
• Arkusz stylów XSLT
– dokument generujący dane wynikowe na podstawie dokumentu XML, przy
czym dokument wynikowy może zawierać lub nie informacje formatujące
– kompletny wysokopoziomowy język do manipulowania dokumentami XML
– nie zastępuje on istniejących języków programowania, ale je uzupełnia
Wioleta Szwoch, KISI ETI PG
11
XSLT
• Extensible StyleSheet Language Transformations
• Język przekształceń drzew XML
• Istotą XSLT jest dopasowywanie pewnych wzorców
do elementów dokumentu XML
• Język deklaratywny
– arkusz stylu określa budowę dokumentu wynikowego, a
nie sposób w jaki ma on powstać
• Język sterowany danymi
– kod wykonywany w odpowiedzi na napotkanie pewnych
danych; kod wykonywany niedeterministycznie
12
Wioleta Szwoch, KISI ETI PG
XSLT - transformacje dokumentów
• znaczenie XSLT
– umożliwia pracę z dokumentami XML
• nie musimy pisać programów do przetworzenia XML
– otrzymujemy z XML różne typy dokumentów
(strony HTML, …)
– ta sama transformacja stosowana do wielu
dokumentów XML
– różne XSLT do tego samego XML  różna postać tej
samej informacji
Wioleta Szwoch, KISI ETI PG
13
XSLT - transformacje dokumentów
dokument
XML
XML
HTML
RTF
PDF
procesor
XSLT
Dokument
XSLT
inne
Dokument
wynikowy
Wioleta Szwoch, KISI ETI PG
14
XSLT - transformacje dokumentów
• Procesory XSLT
– XT (James Clark)
• Jeden z pierwszych
• stworzony w Javie
– Xalan (Apache)
• Łatwe wykorzystanie w środowisku Java i C++
– Msxml (Microsoft)
• Rozpowszechniany z IE
– SAXON
• Procesor XSLT z pełną obsługą XSLT 1.0 i XPath 1.0
– LotusXSL, Koala XSL Engine, iXSLT, XT, …
Wioleta Szwoch, KISI ETI PG
15
XSLT
• Jak pokazać, że plik XML ma być przetworzony
wg pliku XSLT?
• Powiązanie w linii komend (np. Xalan)
– java org.apache.xalan.xslt.Process -IN plik.xml -XSL plik.xsl -OUT plik.html
• Powiązanie transformacji z plikiem XML
– <?xml-stylesheet type= ” text/xsl” href= ” arkusz.xsl”?>
Wioleta Szwoch, KISI ETI PG
16
Przebieg transformacji
• w samodzielnym programie – procesorze XSLT
• po stronie klienta
– transformacje wykonuje program klienta odczytując
arkusz stylów
• po stronie serwera
– program serwera wykorzystuje arkusz stylów do
automatycznej transformacji dokumentu i wysyła go do
klienta
Wioleta Szwoch, KISI ETI PG
17
Struktura dokumentu XSLT
• Deklaracja XML
• Znacznik xsl:stylesheet
– atrybut xmlns:xsl daje URI dla przestrzeni nazw XSLT
• xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
– atrybut version podaje numer wersji
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”
version="1.0">
........
</xsl:stylesheet>
Wioleta Szwoch, KISI ETI PG
18
Struktura dokumentu XSLT
• Deklaracja XML
• Znacznik xsl:stylesheet
– atrybut xmlns:xsl daje URI dla przestrzeni nazw XSLT
• xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
– atrybut version podaje numer wersji
• Elementy pierwszego poziomu (top-level)
• Szablony
– podstawowa zawartość arkusza transformacji XSLT
Wioleta Szwoch, KISI ETI PG
19
Struktura dokumentu XSLT
•
•
•
•
•
•
•
•
•
•
•
•
xsl:attribute-set
xsl:decimal-format
xsl:import
xsl:include
xsl:key
xsl:namespace-alias
xsl:output
xsl:param
xsl:preserve-space
xsl:strip-space
xsl:template
xsl:variable
•
•
•
•
•
•
•
•
•
•
•
•
określa zbiór atrybutów
definiuje sposób wyświetlania liczb
importuje arkusze stylów
włącza arkusze stylów
określa klucz
wskazuje na przestrzeń nazw w dokumencie wynikowym
określa rodzaj dokumentu wynikowego
pozwala utworzyć parametry
zachowuje białe znaki w określonym elemencie
usuwa białe znaki z określonego elementu
określa szablon
definiuje zmienne
Wioleta Szwoch, KISI ETI PG
20
Struktura dokumentu XSLT
•
•
•
•
•
•
•
•
•
•
•
•
xsl:apply-imports
xsl: apply-templates
xsl: attribute
xsl:call-template
xsl:choose
xsl:comment
xsl:copy
xsl:copy-of
xsl:element
xsl:fallback
xsl:for-each
xsl:if
•
•
•
•
•
•
•
•
•
•
xsl:message
xsl: number
xsl: otherwise
xsl:processing-instruction
xsl:sort
xsl:text
xsl:transform
xsl:value-of
xsl:when
xsl:with-param
Wioleta Szwoch, KISI ETI PG
21
Struktura dokumentu XSLT
hello.xsl
hello.xml
<?xml version="1.0"?>
<?xml version="1.0"?>
<xsl:stylesheet
<hi>Hello XSLT!</hi>
xmlns:xsl=“http://www.w3.o
rg/1999/XSL/Transform”
<?xml-stylesheet type= ”text/xsl” href= ”hello.xsl”?>
version="1.0">
<xsl:output method="html" />
<xsl:template match="/">
<b><xsl:value-of
Hello XSLT!
select="hi"/></b>
</xsl:template>
</xsl:stylesheet>
Wioleta Szwoch, KISI ETI PG
22
Format dokumentu wyjściowego
• xsl:output
• różnorodne atrybuty
– method określa format dokumentu wyjściowego
• html, xml, text
– encoding, version, ...
• metoda domyślna: xml
Wioleta Szwoch, KISI ETI PG
23
XSLT –wydobycie informacji
• xsl:value-of
– select
• określa węzeł z którego należy pobrać informacje
• wartością select wyrażenie XPath lub jakaś z funkcji XSLT
• xsl:value-of wyświetla jedynie pierwszą
informację, określoną w atrybucie select
Wioleta Szwoch, KISI ETI PG
24
XSLT - szablony
• xsl:template
• Umożliwiają określenie tego, jak transformacja ma
działać
• Zawierają zbiór instrukcji wykonywanych po jego
wywołaniu
• Regułę (wzorzec) można wywołać przez dopasowanie
węzła drzewa dokumentu XML do atrybutu match
• Węzły dopasowuje się a nie wybiera, są one przetwarzane
tak jak napotyka je procesor XML
Wioleta Szwoch, KISI ETI PG
25
XSLT - szablony
• xsl:template
– match
• oznacza zakres stosowania wzorca
– mode
• tryb
– name
• nazwa
<?xml version="1.0
<R>
<A>1</A>
<B>2</B>
<A>3</A>
</R>
<xsl:template match="R">
…
</xsl:template>
<xsl:template match="A">
…
</xsl:template>
<xsl:template match="B">
…
</xsl:template>
ogólny format szablonu
Wioleta Szwoch, KISI ETI PG
26
Testy węzłów
<?xml version="1.0"?>
<R>
<A>1</A>
<B>2</B>
<A>3</A>
</R>
/
: korzeń
*
: element
@* : atrybut
.
: aktualny węzeł
“text()”, “comment()”, “processing-instruction”
“node()” : dowolny węzeł
Wioleta Szwoch, KISI ETI PG
27
XSLT - szablony
• xsl:template
– match
– mode
– name
• wywołania szablonów
– xsl:apply-templates
– xsl:call-templates
• szablonów nie można w sobie zagnieżdżać
Wioleta Szwoch, KISI ETI PG
28
XSLT - szablony
• element template musi mieć jeden z atrybutów:
– match
• definiuje transformację dla elementu opisanego przez ten
atrybut
<xsl:template match="...">...</xsl:template>
– name
• wynik na wyjście za każdym razem gdy szablon jest
wykonywany
<xsl:template name="...">...</xsl:template>
Wioleta Szwoch, KISI ETI PG
29
XSLT - szablony
• Wykonanie szablonu ze wzorcem
– Definicja szablonu:
<xsl:template match="elem">...</xsl:template>
– Wywołanie szablonu:
• do wszystkich dzieci bieżącego węzła:
<xsl:apply-templates/>
• wybranie węzłów do których szablon jest stosowany
<xsl:apply-templates select="..." />
Wioleta Szwoch, KISI ETI PG
30
XSLT - szablony
• Wykonanie szablonu z nazwą
– Definicja szablonu:
<xsl:template name="nazwa">...</xsl:template>
– Wywołanie szablonu:
<xsl:call-template name="nazwa"/>
• Przypomina bardziej klasyczne programowanie
• Umożliwiają przejęcie pełnej kontroli nad
sterowaniem
Wioleta Szwoch, KISI ETI PG
31
XSLT - transformacje dokumentów
• dopasowywanie wzorców
...
<nowela>
<tytuł> Władca hiperdokumentów </tytuł>
<autor>Xawery M. Lingwista</autor>
<rozdział>
<tytuł>Księga pierwsza</tytuł>
<treść>Nowela ta w ...</treść>
</rozdział>
...
...
<xsl:template match="nowela/rozdział/tytuł">
<h1><xsl:value--of select=”. ”/></h1>
<h1><xsl:value
</xsl:template>
...
Wioleta Szwoch, KISI ETI PG
32
XSLT - szablony
...
<xsl:template match="ssaki">
<h1><xsl:apply-templates/></h1>
</xsl:template>
...
<xsl:template match="ptaki">
<h1><xsl:apply-templates/></h1>
</xsl:template>
…
...
<xsl:template match="ssaki|ptaki">
<h1><xsl:apply-templates/></h1>
</xsl:template>
...
Wioleta Szwoch, KISI ETI PG
33
XSLT - szablony
• szablony z trybem
– możliwość przetwarzania tego samego zbioru węzłów
wiele razy <xsl:template match="root">
<xsl:apply-templates mode="tryb1"/>
<xsl:apply-templates mode="tryb2"/>
</xsl:template>
<xsl:template match="elem" mode="tryb1">
<xsl:text>tryb1:</xsl:text>
<xsl:value-of select="."/>
</xsl:template>
<xsl:template match="elem" mode="tryb2">
<xsl:text>tryb2:</xsl:text>
<xsl:value-of select="."/>
</xsl:template>
Wioleta Szwoch, KISI ETI PG
34
XSLT
• Język XSLT umożliwia
– przetwarzanie warunkowe,
– tworzenie pętli
– parametryzację
• dane spoza pliku xml i xslt mogą wpływać na wynik
Wioleta Szwoch, KISI ETI PG
35
XSLT - Instrukcja warunkowa
• xsl:if
– test
• nie umożliwia tworzenia rozgałęzień
<xsl:if test="plec='Kobieta'">
<font class="napis">Zona</font>
</xsl:if>
<xsl:if test="plec='Mezczyzna'">
<font class="napis">Maz</font>
</xsl:if>
Wioleta Szwoch, KISI ETI PG
36
XSLT - wielokrotny wybór
• xsl:choose
– xsl:when : określa warunki
• test
– xsl:otherwise : ostateczne instrukcje
– sprawdzanie wyrażeń do pierwszego spełnionego
warunku
Wioleta Szwoch, KISI ETI PG
37
XSLT - wielokrotny wybór
<xsl:choose>
<xsl:when test="@plec='kobieta'">
<img src="bk-female.png" alt="Kobieta"/>
</xsl:when>
<xsl:when test="@plec='mezczyzna'">
<img src="bk-male.png" alt="Mezczyzna"/>
</xsl:when>
</xsl:choose>
Wioleta Szwoch, KISI ETI PG
38
XSLT - pętle
• xsl:for-each
– select
• procesor XSLT przetwarza wszystkie węzły
odpowiadające wzorcowi podanemu w atrybucie
select
• możliwość sortowania - xsl:sort
Wioleta Szwoch, KISI ETI PG
39
<xsl:for-each select="osoba">
<xsl:sort select="@plec"/>
<xsl:sort select="nazwisko"/>
<xsl:sort select="imie"/>
<center>
<xsl:choose>
<xsl:when test="@plec='kobieta'">
<table class="kobieta" align="center"> <xsl:call-template name="tabelka"/>
</table>
</xsl:when>
<xsl:when test="@plec='mezczyzna'">
<table class="mezczyzna" align="center"> <xsl:call-template name="tabelka"/>
</table>
</xsl:when>
</xsl:choose>
</center>
</xsl:for-each>
Wioleta Szwoch, KISI ETI PG
40
XSLT - wykorzystanie CSS
dokument
XML
wydobywa dane
procesor
XSLT
Dokument
HTML
Dokument
XSLT
Style CSS
określa szczegóły prezentacji
dokument
XML
procesor
XSLT
Dokument
CSS
HTML
Dokument
XSLT CSS
Wioleta Szwoch, KISI ETI PG
41
Sortowanie
• xsl:sort
• atrybuty
– select
• sortowanie odbywa się wg elementu lub atrybutu tu opisanego
– order
• kierunek sortowania ascending rosnące, descending-malejące
– case-order
• określa priorytet wielkości liter, (upper-first , lower-first )
– lang
– data-type
• sortowanie liter lub liczb (text, number)
• możliwość wielu kryteriów sortowania
Wioleta Szwoch, KISI ETI PG
42
Sortowanie
• xsl:sort używamy w połączeniu z
– xsl:for-each
– xsl:apply-templates
• xsl:sort w for-each muszą pojawić się przed
wszystkimi innymi elementami
• sortowanie w xsl:apply-templates może być
ryzykowne
<xsl:apply
xsl:apply--templates
>
<xsl:sort select="wezel
select="wezel"/>
"/>
</xsl:apply
</
xsl:apply--templates
templates>
>
Wioleta Szwoch, KISI ETI PG
43
Numerowanie
• xsl:number
• może znajdować się w dowolnym miejscu w
szablone lub elemencie xsl:for-each
• definiowanie postaci numeru - atrybut format
–
–
–
–
–
–
1
01
a
B
i
....
1,2,3...
01,02,03,...
a,b,c,...z,aa...
A,B,C...
i,ii,iii,iv,...
Wioleta Szwoch, KISI ETI PG
44
Numerowanie
• atrybut level
– = ”any”
• ciągła numeracja elementów niezależnie od ich elementu
rodzica
– = ”multiple”
• numerowanie wielopoziomowe (np. 1.2; 3.2.4, …)
• możliwość grupowania numerowania
Wioleta Szwoch, KISI ETI PG
45
Zmienne
• xsl:variable
• definicja zmiennej
–<xsl:variable name="NazwaZmiennej">Wartość Zmiennej</xsl:variable>
–<xsl:variable name="NazwaZmiennej" select ="’Wartość Zmiennej’"/>
• odwołanie do zmiennej
–<xsl:value-of select=”$NazwaZmiennej”/>
Wioleta Szwoch, KISI ETI PG
46
Zmienne
• lokalne
<xsl:template name="...">
<xsl:variable name="...">...</xsl:variable>
</xsl:template>
• globalne
<xsl:stylesheet ...>
<xsl:variable name="...">...</xsl:variable>
...
</xsl: stylesheet >
Wioleta Szwoch, KISI ETI PG
47
Zmienne
• stałe
• ich wartości nie można modyfikować (read only)
• zalety zmiennych
– ułatwiają czytanie kodu
• złożone wyrażenie zapisane jako zmienna
• możliwość rozbijania złożonych wyrażeń na części
– wielokrotne wykorzystanie
• zwiększenie wydajności szczególnie w przypadku
skomplikowanych wyrażeń dających w wyniku fragment
drzewa
– zapisanie wartości węzłów w danej chwili niedostępnych48
Wioleta Szwoch, KISI ETI PG
Zmienne
• proste
– zawierają pojedyncze wartości
– używane zwykle do wstawiania tych samych wartości
w wielu miejscach dokumentu
• złożone
– zawierają zbiory węzłów i fragmenty drzewa
Wioleta Szwoch, KISI ETI PG
49
Formatowanie liczb
• Konwersja wartości liczbowych na łańcuchy
format-number(number, format_pattern, dec_format)
wartość do
sformatowania
{prefix}number{.fraction}{suffix}
<xsl:decimal-format
name="formatname"
decimal-separator=""
grouping-separator=""
infinity=""
minus-sign=""
NaN=""
percent=""
per-mille=""
zero-digit=""
digit=""
pattern-separator=""/>
Wioleta Szwoch, KISI ETI PG
nazwa formatu
zdefiniowanego przez
użytkownika
50
Zmiana struktury dokumentu
wyjściowego
• Tworzenie nowych elementów, atrybutów
– <xsl:element>
– <xsl:attribute>
• Kopiowanie elementów z dokumentu źródłowego
– <xsl:copy>
• kopia bieżącego węzła bez atrybutów i węzłów dzieci
– <xsl:copy-of>
• kopia bieżącego węzła z węzłami dzieci i atrybutami
Wioleta Szwoch, KISI ETI PG
51
<document>
...to a physical condition of a document some portions of the
<xsl:template match="paragraph">
text may also be blurred with stains, punch holes, torn out
<p>
edges, corners and other noise-like
effects.
------<paragraph/>
In order to tackle these problems </p>
in ... may exhibit different
degrees of fatigue.
</xsl:template>
<paragraph/>
A set of selected documents may be satisfactory for some of
these aspects, and at the same time ... defined quality
metrics to measure the indicated document aspects.
<paragraph/>
<xsl:template
A methodology for measuring quality of documents
across match="paragraph">
name="p">
DDLC phases is...was used with relative wide<xsl:element
band pass.
<paragraph/>
------Other issues...can be worked out with the QED
tool.
</xsl:element>
<paragraph/>
</xsl:template>
Quality improvement that can be really obtained there
requires adding to the DDLC...
</document>
Wioleta Szwoch, KISI ETI PG
52
Tworzenie nowych elementów
• tworzenie elementów, znanych dopiero podczas
wykonywania arkusza
<xsl:template match="………..">
<xsl:element name="{wezel_drzewa_dokumentu}">
------</xsl:element>
</xsl:template>
Wioleta Szwoch, KISI ETI PG
53
Wypisywanie tekstu
• piszemy tekst
• <xsl:text>
<xsl:value-of select="nazwisko">
<xsl:text> </xsl:text>
<xsl:value-of select="imie">
<xsl:text> </xsl:text>
Wioleta Szwoch, KISI ETI PG
54
Podsumowanie XSLT
• Język deklaratywny sterowany danymi
• Możliwość przetwarzania warunkowego, pętli,
parametryzacji, sortowania, numerowania, …
• Szablony pokazują jak ma działać transformacja
• Struktura
– Poprawny plik XML
– Elementy pierwszego poziomu i pozostałe
• Różnorodne typy dokumentów wyjściowych
Wioleta Szwoch, KISI ETI PG
55

Podobne dokumenty