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 &gt; 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 &gt; 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