thumb|250px|Proces transformacji XSLT 1.0 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 tekstPatrz: . XSLT jest kompletny w sensie Turinga.Dowód w języku angielskim znajduje się na przykład tutaj:
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: ... <cokolwiek> <DzieckoCokolwiek skąd="skądkolwiek">bum</DzieckoCokolwiek> po bum </cokolwiek> ...
mając do dyspozycji następujące reguły: <xsl:template match="cokolwiek/DzieckoCokolwiek[@skąd='skądkolwiek']" priority="-1"> <i>(szablon 1)</i> </xsl:template>
<xsl:template match="cokolwiek/DzieckoCokolwiek"> <i>(szablon 2)</i> </xsl:template>
<xsl:template match="DzieckoCokolwiek"> <i>(szablon 3)</i> </xsl:template>
Produktem transformacji będzie <i>(szablon 2)</i> 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: <?xml version="1.0" encoding="UTF-8"?> <Książka> <id> <Tytuł>Pobawmy się w webmasterów</Tytuł> <isbn>123456789</isbn> <Autor>Jeszcze nieznany</Autor> </id> <SpisTreści> <R>Rozdział 1</R> <R>Rozdział 2</R> <R>Rozdział 3</R> </SpisTreści> </Książka> 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: <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
<xsl:output method="xml" indent="yes" doctype-public="-//W3C//DTD XHTML 1.1//EN" doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"/>
<xsl:template match="Książka"> <html> <head> <title>Książka „<xsl:value-of select="./id/Tytuł"/>”</title> </head> <body> <xsl:apply-templates/> </body> </html> </xsl:template>
<xsl:template match="id"> <h3>Dane identyfikacyjne książki</h3> Tytuł: <xsl:value-of select="Tytuł"/><br /> ISBN: <xsl:value-of select="isbn"/><br /> Autor: <xsl:value-of select="Autor"/><br /> </xsl:template>
<xsl:template match="SpisTreści"> <h3>Spis treści</h3> <table> <xsl:apply-templates/> </table> </xsl:template>
<xsl:template match="R"> <tr><td><xsl:value-of select="."/></td></tr> </xsl:template> </xsl:stylesheet>
Aby transformacja zadziałała, zakładając, że szablon znajduje się w pliku książka.xsl, w dokumencie XML dodajemy linijkę <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="książka.xsl"?> <Książka> ... </Książka> Przypisy
Linki zewnętrzne Rekomendacja XSLT 1.0 Rekomendacja XSLT 2.0
Kategoria:XML Kategoria:Aplikacje XML Kategoria:Języki znaczników