XML - ćwiczenia 8 - XSLT

Referencje

Rekomendacje

XSLT
XPath
XSL

W naszym labie działają takie polecenia:
java org.apache.xalan.xslt.Process -XSL szablon.xsl -IN wejscie.xml -OUT wynik.html
xsltproc -o wynik.html szablon.xsl wejscie.xml

"Funkcje" w XSLT

Szablony nazwane stanowią konstrukcję analogiczną do funkcji i umożliwiają "normalne" programowanie.

<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">
    <!-- Parametry aktualne -->
    <xsl:with-param name="tytul" select="nazwa-towaru"/>
    <xsl:with-param name="kolumny" 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. Napisz szablon nazwany repeat o parametrach value i n wypisujący wartość parametru value n razy.
  2. Dla chętnych - liczby Fibbonaciego.

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, np. tak:
    1. Kategoria kawa:
      • Jacobs
      • Tchibo
    2. Kategoria herbata:
      • Lipton
      • Tekane

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.