Procesory XSLT:
Xalan (Java, projekt Apache)
Xalan (C++, projekt Apache)
libxml (C)
Sablotron (C)
Internet Explorer i wiele programów pod Windows korzysta z biblioteki MSXML.
Dokumentacja JAXP - standard określa m.in. jaki interfejs powinny mieć procesory XSLT w Javie.
API pakietu javax.xml.transform - standardowy pakiet do transformacji w Javie 1.4.
W naszym labie działa takie polecenie:
java org.apache.xalan.xslt.Process -XSL szablon.xsl -IN wejscie.xml -OUT wynik.html
Internet Explorer i Mozilla potrafią też dokonywać tranformacji XSLT zgodnie z deklaracją stylu podaną w dokumencie XML:
<?xml-stylesheet type="text/xsl" href="szablon.xsl"?>
Extensible Stylesheet Language, rekomendacja W3C określa sposób prezentacji dokumentów XML opraty o transformacje dokumentów.
Tym razem arkusz określa sposób zamiany dokumentu XML na inny dokument XML, dla którego określony jest już sposób prezentacji. Zgodnie z ideą standardu XSL wyjściowym powinien być dokument XSL "Formatting Objects", ale w praktyce najczęściej dokonuje się tranformacji do XHTML.
XSL = XSLT (język transformacji) + "FO" (język prezentacji).
XSL Transformations, rekomendacja W3C to język (zastosowanie XML) służący do pisania arkuszy dokonujących transformacji XML -> XML. Procesor XSLT to aplikacja, która potrafi interpretować XSLT i mając dane wejściowy dokument XML i arkusz XSLT potrafi wygenerować wyjściowy dokument XML.
Arkusz (stylesheet) składa się z szablonów (templates). Każdy szablon opisuje jak zamieniać pewien fragment dokumentu wejściowego na fragment dokumentu wyjściowego. Wykonanie tranformacji polega na wywołaniu szablonu pasującego do elementu głównego.
Kiedy obliczany jest szablon dla danego węzła, ten węzeł staje się węzłem bieżącym. Instrukcje, które zmieniają węzeł bieżący to: apply-templates i for-each.
Treść szablonu jest wyrażeniem opisującym zawartość dokumentu wynikowego. Nie ma tutaj imperatywnych poleceń modyfikujących stan, wypisujących coś na wyjście itd., dlatego XSLT można uznać za język deklaratywny, w pewnych aspektach przypominający języki funkcyjne (konstrukcja let x=... in ..., co prawda trochę inny, ale "pattern-matching").
Wynikiem transformacji jest dokument XML. Standard określa trzy sposoby serializacji (zapisania jako tekstu) wynikowych dokumentów:
Zastosowania XSLT są znacznie szersze niż prezentacja XML.
element główny:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="iso-8859-2" /> <xsl:import href="inny_arkusz.xsl"/>
<xsl:template match="/"> <html><body><xsl:apply-templates/></body></html> </xsl:template> <xsl:template match="podelement"> <p><xsl:value-of select="."/></p> </xsl:template> </xsl:stylesheet>
Atrybut match w elemencie template mówi do jakich węzłów dany szablon będzie aplikowany. Jego wartością powinien być wzorzec - coś na kształt ścieżki XPath. Ten sam węzeł może pasować do wielu szablonów i ich pól match. Wówczas intuicyjnie wybierany jest ten szablon, który najbardziej precyzyjnie określa dany węzeł - dokładnie opisuje to rekomendacja.
W XSLT do adresowania fragmentów przetwarzanego dokumentu, a także do zapiwywania innych wyrażeń służy język XPath.
XML Path Language, rekomendacja W3C to język wyrażeń pozwalający na zaadresowanie fragmentu dokumentu XML oraz wiele innych rzeczy (arytmetyka liczb całkowitych i logiki, wbudowane użyteczne funkcje).
XPath definiuje drzewiasty model dokumentu XML, podobny do DOM, ale z pewnymi subtelnymi różnicami, m.in. w XPath w przezroczysty sposób są wklejane sekcje CDATA i wartości encji. XPath, w odróżnieniu od DOM, nie stanowi interfejsu programistycznego dla dokumentu, wyrażenia XPath pozwalają jedynie odczytywać fragmenty dokumentu.
Najważniejszy rodzaj wyrażeń. Ich wynikiem jest wartość typu node set, służą do odczytywania (adresowania) fragmentów dokumentu. Podstawowa składnia:
krok/krok ...
Gdzie krok to:
oś::test-węzłów [predykat] [predykat] ... .
Można stosować różne skróty notacyjne. Domyślną osią jest child, rozpoczęcie nazwy węzła od @ oznacza atrybut, * pasuje do każdej nazwy a // oznacza wszystkich potomków (nie tylko dzieci jak /).
Każde wyrażenie XPath obliczane jest w pewnym kontekście, na który składają się węzeł kontekstowy, jego pozycja (względem bliźniaków), środowisko zmiennych itp.
W XSLT zawsze jest określony węzeł bieżący, w wyrażeniach XPath można się do niego odwołać za pomocą funkcji current(), w każdym miejscu w ścieżce XPath current() ma tą samą wartość.
Węzeł kontekstowy na samym początku obliczania wyrażenia jest równy węzłowi bieżącemu, a dalej w miarę przechodzenia kolejnych kroków ścieżki XPath zmienia się. W każdym miejscu można się do niego odwołać za pomocą kropki .
Przykład:
//section[current()/@id = 'S3'] - wszystkie elementy section, jeśli bieżący węzeł ma parametr id równy S3;
//section[./@id = 'S3'] - wszystkie elementy section, które mają parametr id równy S3;
Wykorzystać XPath Vizualizer (jeśli można...).