XSL Transformations
Z Wikipedii
XSLT (ang. XSL Transformations, Extensible Stylesheet Language Transformations, w wolnym tłumaczeniu Przekształcenia Rozszerzalnego Języka Arkuszy Stylów) jest opartym na XML-u językiem 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 |
[edytuj] 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.
[edytuj] 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.
[edytuj] 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.
[edytuj] 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.
[edytuj] 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.
[edytuj] 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.
[edytuj] Zobacz też
[edytuj] Linki zewnętrzne
- Specyfikacja XSLT 1.0
- Specyfikacja XSLT 2.0
- XSLT w Mozilla Developer Center
- 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)
| Kolejny sukces Blanika |
|
Leszek Blanik, mistrz świata i Europy w skoku przez konia w gimnastyce sportowej, odniósł kolejny sukces. Polak zajął trzecie miejsce podczas zawodów Pucharu Świata w chińskim Tianjin, które były próbą generalną przed sierpniowymi igrzyskami olimpijskimi w Pekinie - pisze "Sport".
|
| Guzman zrezygnował z tytułu WBO, Arthur nowym mistrzem świata |
|
Pochodzący z Dominikany Joan Guzman zrezygnował z tytułu bokserskiego mistrza świata w wadze junior lekkiej organizacji WBO. Nowym czempionem został Szkot Alex Arthur, który dotychczas był tymczasowym (interim) mistrzem.
|
| Skandal we Włoszech - bliskie związki Interu z mafią |
|
Włoska policja podsłuchująca od dwóch lat mafijnego bossa ma dowody, że piłkarze i działacze Interu kontaktowali się z nim telefonicznie 1686 razy - pisze korespondent "Rzeczpospolitej" z Rzymu.
|
| Fabus przedłużył kontrakt |
|
Martin Fabus doszedł do porozumienia z działaczami Ruchu Chorzów i przedłużył wygasający w czerwcu tego toku kontrakt z "Niebieskimi". Nowa umowa będzie obowiązywała do 2010 roku.
|
| "Chciałbym, żeby były wielkie emocje, a na to się zanosi" |
|
Zdaniem prezesa Polskiego Związki Koszykówki Romana Ludwiczuka finałowa walka o mistrzostwo Polski koszykarzy powinna być równie emocjonująca jak tegoroczna rywalizacja w ekstraklasie koszykarek, zakończona w siódmym meczu zwycięstwem Wisły w Gdyni nad Lotosem po dogrywce.
|