XSL Transformations - Google

XSL Transformations

Z Wikipedii

(Przekierowano z XSLT)
Skocz do: nawigacji, szukaj
Proces transformacji XSLT
Proces transformacji XSLT

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

Zobacz więcej w osobnym artykule: Składnia i semantyka XSL Transformations.

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: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.

[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 dzieckaCokolwiek 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.

[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

[edytuj] Zobacz też

[edytuj] Linki zewnętrzne


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.
Linki: Strona g³ówna