Słowem wstępu Część rodziny języków XSL Standard: W3C XSLT 1.0-1999 razem XPath 1.0 XSLT 2.0-2007 Trwają prace nad XSLT 3.0
Problem Zakładane przez XML usunięcie danych dotyczących prezentacji pociąga za sobą konieczność opracowania metody wizualizacji i przetwarzania takich dokumentów. W celu realizacji niezbędnych przekształceń powstał język XSL (extensible Stylesheet Language). W ramach tego standardu powstały specyfikacje: XSLT (XSL Transformations); XSL FO (XSL Formating Objects);
Charakterystyka XSLT określany jako deklaratywny język oparty na regułach przekształceń Transformuje jedne dokumenty XML w inne np. zwykły XML w XHTML. Najczęściej mówi się, że XSLT przekształca drzewo źródłowe w drzewo wynikowe. Używa XPath do nawigacji po drzewie XML
XPath - krótkie przypomnienie / Wybiera korzeń dokumentu - ścieżka bezwględna // Wybiera węzeł w dokumencie, nieważne gdzie się znajduje wartość atrybutu można pobrać z użyciem @. wartość bieżącego węzła.. wartość węzła nadrzędnego w nawiasach kwadratowych podaje się predykaty wyszukiwania
XPath - przykład //dzial[@id ='234']/pracownik[1]/text()
Możliwości XSLT Instrukcje sterujące Sortowanie i grupowanie Tworzenie wyniku Zmienne i parametry Szablony nazwane i funkcje Serializacja danych
Preambuła Każdy dokument XSLT jest poprawnym dokumentem XML Zaczyna się od nagłówka i dołączenia przestrzeni nazw
Użycie XSLT Aby dołączyć transformację XSLT należy w nagłówku docelowego dokumentu XML dodać:
Struktura arkusza transformacji Arkusz (stylesheet) składa się z szablonów. Szablon (template) mówi jak przekształcać węzeł dokumentu wejściowego na fragment dokumentu wynikowego Wnętrze szablonu konstruktor sekwencji: tekst i elementy spoza przestrzeni nazw XSLT przepisywane do wyniku, instrukcje XSLT sterowanie przetwarzaniem, dodatkowe operacje, wyrażenia XPath dostęp do dokumentu źródłowego, sprawdzanie warunków, arytmetyka itp.
Idea działania Jako pierwszy uruchamiany szablon dla korzenia dokumentu / Taki szablon istnieje, nawet gdy nie jest jawnie zdefiniowany w arkuszu Instrukcje apply-templates wewnątrz szablonu powodują przejście po drzewie dokumentu źródłowego i uruchamianie szablonów dla kolejnych pasujących węzłów w obrębie kontekstu bieżącego szablonu Szablony dopasowywane do węzłów w zależności od rodzaju węzła, nazwy elementu, położenia w drzewie dokumentu i innych warunków Bez znajomości XPath za dużo w XSLT się nie pobawimy ;)
Struktura arkusza
Dopasowywanie szablonów Atrybut match do jakich węzłów pasuje szablon Wywołanie apply-templates powoduje uruchomienie pasujących do nich szablonów Opcjonalny atrybut select dla jakich węzłów (domyślnie dla dzieci)
Dopasowanie szablonu
Dopasowanie szablonu
Wybór szablonu Wzorce XPath zawarte w atrybutach match szablonów. Węzeł musi pasować do wzorca. Spośród wielu pasujących wybierany jest ten o najściślej podanym wyrażeniu w atrybucie match (istnieje formalny algorytm w rekomendacji). Możliwość ręcznego podania atrybutu priority. Konflikt błąd lub wybierany późniejszy szablon
Tryby przetwarzania
Parametry szablonów
Pętle Przechodzenie po wszystkich węzłach wyliczonych przez wyrażenie XPath w atrybucie select
Instrukcje warunkowe - if Sprawdzenie warunku logicznego zdefiniowanego w atrybucie test Jeśli prawdziwy -> obliczenie i wstawienie wyniku. Nie ma instrukcji else
Instrukcje warunkowe - choose Wybory (when/test) wyliczane są po kolei. Wybierana jest jedna gałąź pierwsza spełniająca warunek. Opcjonalna fraza otherwise.
Sortowanie wyników Instrukcji sort można użyć w wywołniaach foreach, for-each-group i apply-templates Przyjmuje atrybuty select, data-type, order Można wywołać kilka razy
Grupowanie wyników źródło danych jest zdefiniowane w atrybucie select klucz grupowania: group-by group-adjacent group-starting-with group-ending-with funkcja current-group() zwraca całą aktualną grupę funkcja current-grouping-key() zwraca bieżącą wartość klucza
Grupowanie wyników
Zmienne
Zmienne (2) Zmienne są deklaratywne Brak instrukcji przypisania Lokalny zakres odwołań
Zmienne (3)
Budowanie wyników Elementy spoza przestrzeni nazw XSLT traktowane są dosłownie -> następuje przepisanie do dokumentu wynikowego
Budowanie wyników - podejście programowe
Budowanie wyników - podejście programowe Wstawienie instrukcji przetwarzania lub komentarza
Warunkowe wstawianie tekstu
Warunkowe wstawianie atrybutu
HOWTO Do wyniku chcemy wstawić wyniki pewnego wyrażenia XPath do wyboru mamy value-of, apply-templates, copy-of co robić? jak żyć?
value-of Wypisuje wartość znajdującą się pod podaną ścieżką Xpath Wartość prosta (liczba, data, napis). Pojedynczy węzeł tekstowy lub atrybut, którego na pewno nie chcemy przetwarzać. Nieintuicyjne działanie w XSLT 1.0 oraz niezgodności miedzy 1.0 a 2.0.
Instrukcja value-of Różnice między XSLT 1.0 i 2.0
apply-templates Węzły z dokumenty źródłowego do przetworzenie własnymi szablonami nawet jeśli chcemy po prostu wpisać do wyniku tekst, dzięki szablonom wbudowanym domyślnie spłaszcza strukturę i wpisuje do wyniku tekst.
copy-of Węzły ze źródła, które chcemy skopiować do wyniku wraz z poddrzewem. Węzły stworzone w innych fragmentach szablonu, np. wynik przetwarzania zapisany na zmiennej, parametr szablonu etc.
Zastosowania XSLT Prezentacja dokumentów tekstowych. Prezentacja danych zapisanych w XML. Konwersja danych między formatami XML-owymi. Filtry, raporty, podsumowania. XSLT w wyniku przekształcenia XSLT. Tworzenie skryptów i plików konfiguracyjnych.
Przykład bardziej złożony