XSLT (, ) – oparty na XML język przekształceń dokumentów XML. Pozwala na przetłumaczenie dokumentów z jednego formatu XML na dowolny inny format zgodny ze składnią XML (np. na stronę WWW XHTML, wzór matematyczny MathML lub dokument biurowy ODF), jak również na zwykły HTML i czysty tekst . XSLT jest kompletny w sensie Turinga.
Dzięki dużej sile wyrazu, łatwości implementacji i powszechnemu stosowaniu XML jako standardu dla zapisu informacji, XSLT jest uniwersalnym narzędziem znajdującym zastosowanie w wielu rodzajach oprogramowania. Najbardziej popularne to generowanie stron WWW w serwisach internetowych oraz konwersja pomiędzy alternatywnymi formatami np. w pakietach biurowych.
XSLT jest rozwijany przez W3C jako część rodziny języków XSL (obok XPath i XSL-FO). Powstał pod wpływem języków funkcyjnych oraz języków opartych na dopasowywaniu wzorców (ang. ) jak awk. Jego bezpośrednim poprzednikiem jest DSSSL, odpowiednik XSLT dla SGML.
Najnowszą wersją rekomendacji XSLT jest 2.0, ale ze względu na jej powolne rozpowszechnienie ( brak obsługi w Xalanie, czy „fabrycznie” na platformie .NET) rekomendacja 1.0 jest nadal powszechnie wykorzystywana.
Omówienie
XSLT przypomina języki funkcyjne – arkusze XSLT zbudowane są z reguł opisujących, w jaki sposób zamienić poszczególne elementy wejściowego XML. Warsztat programisty XSLT obejmuje m.in. instrukcje sterujące, możliwość definicji własnych funkcji (tzw. szablonów nazwanych), funkcje wbudowane realizujące na przykład sortowanie. Do znajdowania i wskazywania elementów źródłowego XML używany jest XPath.
Składnia i semantyka
Arkusze XSLT są poprawnymi dokumentami XML. Elementem głównym jest xsl:stylesheet
. Prefiks xsl:
w używanych w tym dokumencie nazwach elementów oznacza jedynie, że należą one do przestrzeni nazw XSLT – tak więc xsl:stylesheet
należy czytać jako element stylesheet
z przestrzeni nazw XSLT.
Algorytm transformacji
Każdy procesor XSLT posługuje się przedstawionym poniżej w skrócie algorytmem.
1. Przygotowanie do transformacji:
* Parsowany jest arkusz XSLT oraz wejściowy XML oraz budowane są ich drzewa. Uwzględniony jest fakt, że arkusz XSLT może się składać z wielu plików (instrukcje xsl:include
i xsl:import
).
* Z dokumentów usuwane są nadmiarowe białe znaki.
* Do drzewa XSLT dołączane są standardowe reguły.
2. Transformacja:
* Tworzony jest główny element drzewa wyjściowego (root node).
* Główna część: przetwarzane są elementy drzewa wejściowego, począwszy od elementu głównego.
* Zwracane jest drzewo wyjściowe, w formacie określonym przez xsl:output
.
Każdy element drzewa wejściowego przetwarzany jest następująco:
* Znajdowany jest najlepiej pasujący szablon. Ze wszystkich szablonów pasujących do przetwarzanego elementu (każdy szablon nienazwany ma wzorzec – atrybut match
) wybierany jest ten o najwyższym priorytecie (obliczonym na podstawie atrybutu priority
, postaci wzorca oraz pozycji w dokumencie – elementy zaimportowane mają zawsze najniższy priorytet).
* Znaleziony szablon jest aplikowany. Elementy szablonu znajdujące się w przestrzeni nazw XSLT (zazwyczaj te z prefiksem xsl:
) traktowane są jak instrukcje i odpowiednio interpretowane. Reszta jest zwyczajnie kopiowana do drzewa wynikowego.
* Jeśli w szablonie umieszczona jest instrukcja xsl:apply-templates
, procesor przechodzi w tym miejscu do rekurencyjnego przetwarzania listy elementów wskazanych atrybutem select
lub – jeśli go brak – wszystkich dzieci aktualnego elementu. Jeśli w szablonie brak jest instrukcji xsl:apply-templates
, żadne z elementów aktualnego poddrzewa (dzieci i ich następniki) nie są w tym miejscu dopasowywane (przetwarzane). Należy jednak pamiętać, że mogą zostać przeznaczone do dopasowania (za pomocą instrukcji xsl:apply-templates
) z innego szablonu.
Przykład
Powiedzmy, że procesor XSLT transformuje poniższy fragment dokumentu XML:
…
po bum
…
mając do dyspozycji następujące reguły:
(szablon 1)
(szablon 2)
(szablon 3)
Produktem transformacji będzie
(szablon 2) po bum
* Brak reguły dla cokolwiek
, użyta więc będzie standardowa każąca przetwarzać wszystkie dzieci po kolei.
* Do DzieckoCokolwiek
pasują wszystkie 3 reguły, jednak pierwsza posiada nadany niski priorytet -1, trzecia zaś postać wzorca otrzyma priorytet -0,5 natomiast druga 0. Wybrana więc zostanie druga.
* Wewnątrz niej brak instrukcji xsl:apply-templates
, tekst bum
zostaje więc pominięty.
* Następnie przetwarzane jest drugie dziecko cokolwiek
czyli tekst po bum
. Brak dla niego reguły, stosowana więc jest standardowa.
Zastosowanie w tworzeniu stron WWW
XSLT jest szeroko stosowany przy tworzeniu stron WWW. Pozwala na oddzielenie warstwy informacji od warstwy prezentacji, które w HTML-u są mocno pomieszane. Procesory XSLT wbudowane są w nowoczesne przeglądarki WWW.
Przykład
Załóżmy, że mamy do przedstawienia jakąś książkę. Możemy informacje o niej zapisać w formacie XML:
Powyżej zawarte są wszystkie informacje, jakie posiadamy o tej książce. Jednak aby wyświetlić ją w przeglądarce, potrzebne są jeszcze instrukcje, jak to zrobić. Do tego służy dokument XSLT:
Dane identyfikacyjne książki
Tytuł:
ISBN:
Autor:
Spis treści
Aby transformacja zadziałała, zakładając, że szablon znajduje się w pliku książka.xsl, w dokumencie XML dodajemy linijkę
…
Przypisy
Linki zewnętrzne
* [http://www.w3.org/TR/xslt Rekomendacja XSLT 1.0]
* [http://www.w3.org/TR/xslt20/ Rekomendacja XSLT 2.0]
Kategoria:XML
Kategoria:Aplikacje XML
Kategoria:Języki znaczników