Wolna encyklopedia
XSLT (ang. XSL Transformations, Extensible Stylesheet Language Transformations, w wolnym tłumaczeniu Przekształcenia Rozszerzalnego Języka Arkuszy Stylów) – oparty na XML-u 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-a (np. na stronę WWW XHTML, wzór matematyczny MathML lub dokument biurowy ODF), jak również na zwykły HTML i czysty tekst.[1]
Dzięki dużej sile wyrazu[2], łatwości implementacji i powszechnemu stosowaniu XML-a 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. pattern matching) jak awk. Jego bezpośrednim poprzednikiem jest DSSSL, odpowiednik XSLT dla SGML-a.
Aktualnie obowiązującą wersją XSLT jest 2.0.
Spis treści |
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-a. 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-a 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:includeixsl: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 atrybutupriority, 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 atrybutemselectlub - jeśli go brak - wszystkich dzieci aktualnego elementu. Jeśli w szablonie brak jest instrukcjixsl: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ą instrukcjixsl: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
dzieckaCokolwiekpasują 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, tekstbumzostaje więc pominięty. - Następnie przetwarzane jest drugie dziecko
cokolwiekczyli tekstpo 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.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.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
- ↑ Patrz: rozdział specyfikacji dotyczący możliwych formatów wyjściowych (en).
- ↑ XSLT jest kompletny w sensie Turinga. Dowód w języku angielskim znajduje się na przykład tutaj: A Simple Proof for the Turing-Completeness of XSLT and XQuery.
Zobacz też
Linki zewnętrzne
- Specyfikacja XSLT 1.0
- Specyfikacja XSLT 2.0
- XSLT w Mozilla Developer Center
- XSLT - Kursokonferencja
- XSLT w przeglądarkach internetowych
- XSLT w Mozilli
- MSXML Parser - XML-owy silnik IE
- procesory XSLT
- Saxon (Java, saxon.sourceforge.net/)
- TransforMiiX (C++, www.mozilla.org/projects/xslt/)
- Xalan-Java (Java, xml.apache.org/xalan-j/)
- Xalan-C++ (C++, xml.apache.org/xalan-c/)
- libxslt/xsltproc (C, xmlsoft.org/XSLT/)
- XT (Java, http://www.blnz.com/xt/index.html, autor James Clark)
- Sablotron (C++, www.gingerall.com/charlie/ga/xml/p_sab.xml)
- Microsoft msxsl.exe (C++, [1])
- PHP 5 funkcje XSLT (PHP 5, http://www.php.net/xslt)
Rdzenne technologie XML-a: Namespaces in XML • XML Inclusions (XInclude) • XML Information Set • xml:id
XML Events • XML Fragment Interchange • XML Base • Associating Style Sheets with XML documents
Języki stylistyczne: Cascading Style Sheets (CSS) • Document Style Semantics and Specification Language (DSSSL), Rodzina Extensible Stylesheet Language:
Extensible Stylesheet Language (XSL) • XSL Formatting Objects (XSL-FO) • XSL Transformations (XSLT) • XML Path Language (XPath)
Języki z rodziny XML Linking: XML Linking Language (XLink) • XML Base • XML Pointer Language (XPointer)
Języki zapytań dokumentów XML: XML Path Language (XPath) • XML Query Language (XQuery) • XML Syntax for XQuery (XQueryX)
Rodzaje schematów dokumentów XML: Document Type Definition (DTD) • XML Schema • REgular LAnguage for XML Next Generation (RELAX NG)