XSL
Transkrypt
XSL
XSLT
Dariusz Dudek
Plan prezentacji
Krótko o XML
Arkusze stylów
XSLT
XSL
XSL Path
Przegląd konstrukcji języka i przykłady
Narzędzia
Podsumowanie
Literatura
Cechy XML’a
Rozszerzalny język znaczników
Stworzony do przechowywania danych
Opisuje strukturę i semantykę danych
Nie definiuje sposobu prezentacji danych oddziela logikę od prezentacji
Prezentacja wymaga dodatkowych
mechanizmów
Arkusze stylów
Określają sposób prezentowanie dokumentów
XML’owych
Najpopularniejsze arkusze stylów
Kaskadowe arkusz stylów CSS
Arkusze XSL
Arkusze CSS
Stworzone z myślą o HTML’u
Pozwalają na formatowanie HTML
Umożliwiają transformacje XML’a w HTML
Stosunkowo proste w tworzeniu
Arkusze XSL
Opracowane dla XML’a
Umożliwiają transformację w HTML TXT i
XML
Pozwalają na zmianę struktury dokumentu,
filtrowanie elementów, sortowanie
Skomplikowane w tworzeniu
Przykład XML
<ksiazki>
<ksiazka>
<autor>
<imie>
Adam
</imie>
<nazwisko>
Mickiewicz
</nazwisko>
</autor>
<tytul>
Pan Tadeusz
</tytul>
<rok-wydania>
1980
</rok-wydania>
</ksiazka>
<ksiazki>
Przykład CSS
autor{display:block;
font-size:14pt;
color:red}
tytul{display:block;
font-size:14pt;
color:green}
rok-wydania{display:block;
font-size:12pt;
color:blue}
Przykład CSS
Proste XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Tra
nsform" version="1.0">
</xsl:stylesheet>
Proste XSLT
XSLT
Język określający sposób transformacji
dokumentów XML
Jest językiem deklaratywnym – opisuje co a nie
jak ma być zrobione
Dokument XML ma strukturę drzewa –
transformacja tworzy nowe drzewo
XSLT stosuje szablony do elementów drzewa
pasujących do zadanych wzorców
XSLT
To także dokument XML
Musi być „well-formed”
Najczęstsze błędy wynikają właśnie ze złego
formatowania
XSL
XSLT jest częścią szerszej specyfikacji XSL,
stanowiącej zbiór zaleceń związanych z
prezentacją i formatowaniem dokumentów
XML. Na XSL składa się:
XLST – język transformacji
XML Path – język umożliwiający nawigację w
drzewie XML
XML FO – język określający formatowanie
dokumentu
Schemat działania procesorów XSL
Procesor odczytuje plik XML i stosuje do niego
transformatę XSLT generując nowy dokument
Procesory XSL
Xalan
Saxon
MSXML – wykorzystywany w IE
TransforMiix – wykorzystywany w
Mozilla/Firefox Netscape Comunicator
Uruchamiane zazwyczaj z linii poleceń
XML Path
Umożliwia poruszanie się po drzewie XML
Pozwala na wybranie elementów, które mają
zostać przetworzone a także warunków jakie
muszą spełniać
Wyszukiwanie następuje poprzez dopasowanie
wzorca
XML Path
Ścieżka – wyrażenie pozwalające odwołać się do
poszczególnych węzłów drzewa
Syntaktyka analogiczna do systemu plików
Unix/Linux
/ksiazki/ksiazka/autor/
XML Path
Wyrażenia – ciąg znaków przetwarzany przez
procesor XSLT w celu uzyskania wyniku
Wynikiem może być
node-set
boolean
number
string
Rodzaje węzłów
Węzeł główny
Węzły elementów
/ - reprezentuje cały dokument
/książki – elementy ograniczone znacznikami
Węzły atrybutów
Węzły przetwarzania poleceń
Węzły komentarza
Węzły tekstowe
Węzły przestrzeni nazw
Adresowanie
Bezwzględne – zaczyna się od /
Względne – w odniesieniu do przetwarzanego
elementu
self - „.” - bieżący węzeł
parent „..” – węzeł nadrzędny
child – węzęł podrzędny
descendant-or-self - „//” – wszystkie węzły
podrzędne
Adresowanie
Adresować można:
elementy
atrybuty
zawartość znaczników
komentarze
Dostępne funkcje
Procesor XSLT zawiera implementację
standardowych funkcji (core functions)
string name(node-set?)
boolean contains(string, string)
number count(node-set)
number string-length(string?)
i wiele innych
XSLT
Podstawowe konstrukcje języka
xsl:stylesheet
xsl:template
xsl:aply-templates
xsl:for-each
xsl:if
xsl:chose
xsl:sort
xsl:element
xsl:output
xsl:number
xsl:element
xsl:stylesheet
Deklaruje wersję i przestrzeń nazw
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform
" version="1.0">
</xsl:stylesheet>
<xsl:transform
xmlns:xsl="http://www.w3.org/1999/XSL/Transform
" version="1.0">
</xsl:transform>
xsl:template
Definiuje reguły które będą zastosowane w momencie
znalezienia węzła
<xsl:template match="/ksiazki">
<html>
<head>
<title></title>
</head>
<p><xsl:value-of select="ksiazka/autor/imie"/></p>
</html>
</xsl:template>
xsl:template
xsl:aply-templates
Powoduje rekursywne przetwarzanie potomków danego węzła
<xsl:template match="/ksiazki">
<html>
<head>
<title></title>
</head>
<p><xsl:apply-templates
select="ksiazka/autor/imie"/></p>
</html>
</xsl:template>
xsl:aply-templates
xsl:for-each
<xsl:for-each select = „wyrażenie którego wynik
to zbiór węzłów” />
Stosuje szablon do każdego węzła ze zbioru
xsl:for-each
<xsl:template match="/ksiazki">
<html>
<head><title></title></head>
<table>
<xsl:for-each select="ksiazka/autor">
<tr ><td bgcolor="yellow"><xsl:value-of
select="imie"/></td>
<td><xsl:value-of select="nazwisko"/></td></tr>
</xsl:for-each>
</table>
</html>
</xsl:template>
xsl:for-each
xsl:if
<xsl:if test = „wyrażenie” />
Realizuje instrukcje warunkową – szablon jest
aplikowany tylko gdy spełniony zostanie
warunek
Nie istnieje „else”
xsl:if
<xsl:template match="ksiazka">
<xsl:if test="rok-wydania > 1989">
<xsl:apply-templates select="rokwydania"/>
<br></br>
</xsl:if>
</xsl:template>
xsl:if
xsl:choose
<xsl:choose>
<xsl:when test = „wyrażenie logiczne”>
</xsl:when>
...
<xsl:otherwise />
</xsl:choose>
Funkcjonalność switcha
Nakładany jest szablon dla którego spełniony jest warunek
Jeśli żaden warunek nie jest spełniony to implikowany jest
szablon z otherwise
xsl:choose
<xsl:template match="ksiazka">
<table>
<xsl:choose>
<xsl:when test="rok-wydania > 1989">
<tr bgcolor="yellow"><xsl:apply-templates select="rokwydania"/></tr>
</xsl:when>
<xsl:otherwise>
<tr bgcolor="brown"><xsl:apply-templates select="rokwydania"/></tr>
</xsl:otherwise>
</xsl:choose>
</table>
</xsl:template>
xsl:choose
xsl:sort
<xsl:sort
select = string-expression
lang = { nmtoken }
data-type = { "text" | "number" }
order = { "ascending" | "descending" }
case-order = { "upper-first" | "lower-first" }
/>
Umożliwia sortowanie listy według zadancych
kryteriów
xsl:sort
<xsl:template match="ksiazki">
<table>
<xsl:apply-templates select="ksiazka">
<xsl:sort select="autor/nazwisko"/>
<xsl:sort select="autor/imie"/>
</xsl:apply-templates>
</table>
</xsl:template>
<xsl:template match="ksiazka">
<tr><td><xsl:value-of select="autor/nazwisko"/></td>
<td><xsl:value-of select="autor/imie"/></td></tr>
</xsl:template>
xsl:sort
xml:output
<xsl:output
method = "xml" | "html" | "text"
version = nmtoken
encoding = string
omit-xml-declaration = "yes" | "no"
standalone = "yes" | "no"
doctype-public = string
doctype-system = string
cdata-section-elements = qnames
indent = "yes" | "no"
media-type = string />
Określa docelowy format dokumentu XML
xsl:number
<xsl:number
level = "single" | "multiple" | "any"
count = pattern
from = pattern
value = number-expression
format = { string }
lang = { nmtoken }
letter-value = { "alphabetic" | "traditional" }
grouping-separator = { char }
grouping-size = { number } />
xsl:number
•
format – implikuje numerowanie
•
•
•
•
•
•
„1”
„01”
„A”
„a”
„i”
„I”
– 1, 2, 3
– 01, 02, 03
– A, B, C
– a, b, c
– i, ii, iii, iv
– I, II, III
xsl:number
<xsl:template match="ksiazka">
<table>
<tr>
<td><xsl:number level="any"/>
<xsl:apply-templates
select="autor/nazwisko"/></td>
<td><xsl:apply-templates
select="autor/imie"/></td>
</tr>
</table>
</xsl:template>
xsl:number
xsl:import xsl:include
Umożliwiają włączenie innych arkuszy
<xsl:include
href = uri-reference />
Może wystąpić tylko w głównym elemencie
<xsl:import
href = uri-reference />
Może wystąpić w dowolnym miejscu po
ostatnim xsl:include
xsl:element
<xsl:element
name = { qname }
namespace = { uri-reference }
use-attribute-sets = qnames>
</xsl:element>
Pozwala na dodanie nowego elementu
xsl:element
<xsl:template match="ksiazka">
<table>
<tr><xsl:apply-templates
select="autor/imie"/></tr>
<tr><xsl:apply-templates
select="autor/nazwisko"/></tr>
<tr><xsl:element name="rokurodzenia">1900</xsl:element></tr>
</table>
</xsl:template>
xsl:element
Narzędzia
Altova XMLSPY
Oxygen
Funkcjonują jako „samobieżki” oraz pluginy do
Eclipse’a
Podsumowanie
XSLT pozwala na transformacje w HTML XML i
TEXT
XML Path określa które elementy będą
transformowane, szablon definiuje sposób
transformacji
Transformacja XML->XML to wygodne rozwiązanie
dla biznesu
Możliwe reorganizację dokumentu
Filtrowanie zawartości
Łączenie kilku dokumentów
Podsumowanie
Wada - w przypadku gdy chcemy odfiltrować
tylko kilka znaczników musimy się napisać
Literatura
www.w3.org/Style/XSL
www.w3.org/TR/xslt
www.w3.org/TR/xpath
„Poznaj XSLT” Michael Floyd
www.google.pl