XML - ćwiczenia 8 - XSLT

Patryk Czarnik

Utworzono: 2002.11.25

Zmodyfikowano: 2002.11.25

Referencje

Rekomendacje

XSLT
XPath
XSL

W naszym labie działa takie polecenie:
java org.apache.xalan.xslt.Process -XSL szablon.xsl -IN wejscie.xml -OUT wynik.html

"Funkcje" w XSLT

Szablony nazwane stanowią konstrukcję analogiczną do funkcji i umożliwiają "normalne" programowanie. Rekurencja daje XSLT moc obliczeniową maszyny Turinga.

<!-- Szablon nazwany ("funkcja")-->
<xsl:template name="wiersz">
  <!-- Parametry formalne -->
  <xsl:param name="tytul" select="Wiersz tabeli:"/>
  <xsl:param name="kolumny"/>
  <!-- Treść szablonu ("ciało funkcji") -->
  <tr><th><xsl:value-of select="$tytul"/></th>
    <xsl:for-each select="$kolumny">
      <td><xsl:value-of select="."/></td>
    </xsl:for-each>
  </tr>
</xsl:template>
<!-- ... -->
<!-- Wywołanie gdzieś w treści innego szablonu -->
<table>
<xsl:for-each select="/lista-sklepow/sklep[$i]/towar">
  <xsl:call-template name="wiersz">
    <xsl:with-param name="tytul" select="nazwa-towaru"/>
    <xsl:with-param name="kolumy" select="./*[position() > 1]"/>
  </xsl:call-template>
</xsl:for-each>
</table>

Tworzenie XSLT jako wyniku XSLT

XSLT jest też XML-em, a więc może być wyprodukowany jako wynik XSLT. Trzeba zrobić coś, żeby odróżnić elementy, ktróre mają być interpretowane jako XSLT, od elementów, które mają być wynikiem transormacji. Umożliwia to element namespace-alias.
Przykład z rekomendacji:

<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:fo="http://www.w3.org/1999/XSL/Format"
  xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias">

  <xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>
	
  <xsl:template match="/">
    <axsl:stylesheet>
    <xsl:apply-templates/>
    </axsl:stylesheet>
  </xsl:template>
		
  <xsl:template match="block">
    <axsl:template match="{.}">
    <fo:block><axsl:apply-templates/></fo:block>
    </axsl:template>
  </xsl:template>
</xsl:stylesheet>

Przykłady i zadania

przykład silnia

  1. Jak Ci się chce, napisz liczby Fibbonaciego.
  2. A jak się nie chce, to chociaż "repeat" - wypisanie podanego parametru value n razy (n to też parametr).

przykład tabela

  1. Napisz XSLT, które na podstawie pliku z opisem tabeli (zgodnego ze schemat-tabeli.dtd) generuje XSLT służące do wizualizacji takich tabel jak w pliku tabela1.xml.

przykład towary

  1. Napisz XSLT które wypisuje każdą kategorię występującą w spisie dokładnie raz i dla każdej kategorii wszystkie towary z niej.

Zadanie domowe

Dotyczy grupy Patryka, termin 10 grudnia, 4 punkty.
Napisz XSLT wizualizujące dokumenty zgodne z napisanym wcześniej przez Ciebie schematem dokumentu z opiniami o samochodach. Napisz to w taki sposób, żeby łatwo można było zmienić sposób prezentacji gdyby ktoś (klient?) miał na to ochotę.

źródło w XML