XSLT. Patryk Czarnik. XML i nowoczesne technologie zarzadzania treścia 2008/09. Instytut Informatyki UW. Patryk Czarnik 08 XSLT XML 2008/09 1 / 1

Podobne dokumenty
XSLT. Patryk Czarnik. XML i nowoczesne technologie zarządzania treścią 2008/09. Instytut Informatyki UW

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarzadzania treścia 2007/08

XSLT. Patryk Czarnik. Instytut Informatyki UW. XML i nowoczesne technologie zarzadzania treścia 2007/08

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarzadzania treścia 2011/12. Instytut Informatyki UW. Patryk Czarnik 08 XSLT XML 2011/12 1 / 54

XSLT. Patryk Czarnik. XML i nowoczesne technologie zarządzania treścią 2011/12

Słowem wstępu. Część rodziny języków XSL. Standard: W3C XSLT razem XPath 1.0 XSLT Trwają prace nad XSLT 3.0

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 04

XML Path Language (XPath)

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Osie (axes) Location paths

XML extensible Markup Language. część 6

Język XSLT. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Przetwarzanie dokumentów XML za pomocą procesora XSLT (Zajęcia r.

XML extensible Markup Language. część 4

XML extensible Markup Language. część 3

Wprowadzenie do XSLT

Rodzaje przetwarzania XSLT (1)

Wprowadzenie do arkuszy stylistycznych XSL i transformacji XSLT

Służy do wybierania/wyszukiwania fragmentów dokumentu XML. Przypomina trochę ścieżki w systemie operacyjnym. Niech będzie dany dokument XML:

LABORATORIUM 5 WSTĘP DO SIECI TELEINFORMATYCZNYCH WPROWADZENIE DO XML I XSLT

Języki formatowania dokumentów strukturalnych. XSL przekształcenia XML-a. XSL a XSLT. XSL części składowe. Zasada działania przekształcenia XSLT

XML extensible Markup Language. część 8

XPath XML Path Language. XSL Extensible Stylesheet Language. Wyrażenia XPath. XPath data model. Location paths. Osie (axes)

Extensible Markup Language III

Plan prezentacji. Krótko o XML Arkusze stylów XSLT XSL XSL Path Przegląd konstrukcji języka i przykłady Narzędzia Podsumowanie Literatura

Przetwarzanie dokumentów XML za pomocą XSLT ( r.)

XML extensible Markup Language 3

XPath XML Path Language. XPath. XSLT część 1. XPath data model. Wyrażenia XPath. Location paths. Osie (axes)

<body> <div style="max-width: 900px; margin: 0 auto;">

Języki XPath i XQuery

METAJĘZYKI. Politechnika Koszalińska Wydział Elektroniki i Informatyki Katedra Inżynierii Komputerowej

Języki i Techniki Programowania II. Wykład 13. TRaX, Applety, Java Security

Prezentacja i transformacja

Prezentacja dokumentów XML

Kurs WWW Język XML, część II

Przegląd języków zapytań

XML materiały dydaktyczne - Kurs Podstawowy XSL - wprowadzenie. XSL warstwa przekształcania (XSLT) oraz prezentacji informacji (XSL FO).

XSL, tj. XSLT i XSL-FO czyli jak przekształcać i ładnie wyświetlać XML-e. Kuba Pochrybniak

Języki XPath i XQuery

Podstawy (X)HTML i CSS

Aplikacje internetowe laboratorium XML, DTD, XSL

UCHWAŁA NR L/932/13 RADY MIASTA MYSŁOWICE. z dnia 19 grudnia 2013 r.

Języki XPath i XQuery

Wprowadzenie do standardu XSL

XQuery. XQuery. Przykład. dokument XML. XQuery (XML Query Language) XQuery 1.0: An XML Query Language. W3C Recommendation

Podstawy JavaScript ćwiczenia

XML i nowoczesne technologie zarządzania treścią

XML i nowoczesne metody zarządzania treścią

Układ informacji i powiązań między danymi w deklaracji w formacie XML

XML i nowoczesne technologie zarządzania treścią

Facelets ViewHandler

Prezentacja i transformacja

Kurs programowania. Wykład 7. Wojciech Macyna. 25 kwietnia 2017

Słowem wstępu. Standard: W3C XPath razem XSLT 1.0. XPath razem z XQuery 1.0 i XSLT 2.0. XPath trwają prace nad XPath 3.

XPath 2.0 / XSLT 2.0 / XQuery 1.0. Inne standardy związane z XML-em. XPath 2.0 XSLT 2.0. XPath 2.0 funkcyjny język programowania

Przykładowy dokument XML

Aplikacje internetowe laboratorium XML, DTD, XML Schema, XSL

HTML DOM, XHTML cel, charakterystyka

XPath i XQuery. Patryk Czarnik. XML i nowoczesne technologie zarządzania treścią 2011/12. Wprowadzenie Status Model danych XPath

Złożone komponenty JSF wg

XML w sosie własnym. Standard XML wraz z DTD, przestrzenie nazw, projektowanie struktury dokumentów. Patryk Czarnik. Instytut Informatyki UW

XML w bazach danych i bezpieczeństwie

XML extensible Markup Language 7

Plan prezentacji XSLT. XSLT Ogólna charakterystyka. Drzewo XML. Wstęp. Przedmiot: XML i jego zastosowania. Zagadnienia podstawowe

Układ informacji i powiązań między nimi w deklaracji na podatek leśny (DL-1) w formacie danych XML

Aplikacje internetowe. Interfejs użytkownika

Przykładowy dokument XML

METAJĘZYKI. Politechnika Koszalińska Wydział Elektroniki i Informatyki Katedra Inżynierii Komputerowej

Przetwarzanie dokumentów XML i zaawansowane techniki WWW Wykład 03

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

Złożone komponenty JSF wg

UCHWAŁA NR XLIII/569/14 RADY MIEJSKIEJ W CZERWIONCE-LESZCZYNACH. z dnia 25 kwietnia 2014 r.

Zaawansowany kurs języka Python

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

XQuery. sobota, 17 grudnia 11

DZIENNIK URZĘDOWY WOJEWÓDZTWA ŚLĄSKIEGO

Właściwości i metody obiektu Comment Właściwości

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Oracle PL/SQL. Paweł Rajba.

UCHWAŁA NR 135/XXVII/13 RADY MIASTA ZAMBRÓW. z dnia 26 marca 2013 r.

Aplikacje internetowe laboratorium XML, DTD, XML Schema, XSL

DTD - encje ogólne i parametryczne, przestrzenie nazw

Zaawansowane aplikacje WWW - laboratorium

Bloki anonimowe w PL/SQL

XML w bazach danych i bezpieczeństwie

Egzamin z przedmiotu Projektowanie języków XML imię i nazwisko. Zadanie Suma Punkty Max Punkty

JavaScript funkcyjność

Informatyka 1. Przetwarzanie tekstów

Tworzenie raportów XML Publisher przy użyciu Data Templates

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

DZIENNIK URZĘDOWY WOJEWÓDZTWA ŚLĄSKIEGO

Wprowadzenie do technologii XML

Programowanie internetowe

29. Poprawność składniowa i strukturalna dokumentu XML

Wykład 5_2 Arkusze stylów dziedziczenie. Technologie internetowe Zofia Kruczkiewicz

System operacyjny Linux

SPECYFIKACJA FUNKCJONALNA OPROGRAMOWANIA 11 marca 2014 XLZEBRAPRINTER

Język XML Schema. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz. UEK w Krakowie Janusz Stal & Grażyna Paliwoda-Pękosz

Transkrypt:

XSLT Patryk Czarnik Instytut Informatyki UW XML i nowoczesne technologie zarzadzania treścia 2008/09 Patryk Czarnik 08 XSLT XML 2008/09 1 / 1

XSLT status XSLT Wersja 1.0 listopad 1999 powiazane z XPath 1.0 Wersja 2.0 styczeń 2007 powiazane z XPath 2.0 Powstał w ramach Extensible Stylesheet Language. Zastosowania wykraczaja poza prezentację XML. Patryk Czarnik 08 XSLT XML 2008/09 4 / 1

Budowa arkusza XSLT Budowa arkusza Arkusz zbudowany z szablonów. Elementy (z prz. nazw) XSLT deklaracje i instrukcje. Konstruktory sekwencji fragmenty traktowane jako wyrażenia ciała szablonów, funkcji, wartościowania zmiennych i parametrów, tworza drzewo wynikowe, moga zawierać instrukcje XSLT. Patryk Czarnik 08 XSLT XML 2008/09 5 / 1

Struktura arkusza XSLT Budowa arkusza 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:param name="css"/> <xsl:template match="/"> <html> <head><link rel="styesheet" type="text/css" href="{$css}"/></head> <body><xsl:apply-templates/></body> </html> <xsl:template match="akapit"> <p><xsl:value-of select="."/></p> </xsl:stylesheet> Patryk Czarnik 08 XSLT XML 2008/09 6 / 1

Struktura arkusza XSLT Budowa arkusza deklaracje, "konfiguracja" <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:param name="css"/> <xsl:template match="/"> <html> <head><link rel="styesheet" type="text/css" href="{$css}"/></head> <body><xsl:apply-templates/></body> </html> <xsl:template match="akapit"> <p><xsl:value-of select="."/></p> </xsl:stylesheet> Patryk Czarnik 08 XSLT XML 2008/09 6 / 1

Struktura arkusza XSLT Budowa arkusza szablony <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:param name="css"/> <xsl:template match="/"> <html> <head><link rel="styesheet" type="text/css" href="{$css}"/></head> <body><xsl:apply-templates/></body> </html> <xsl:template match="akapit"> <p><xsl:value-of select="."/></p> </xsl:stylesheet> Patryk Czarnik 08 XSLT XML 2008/09 6 / 1

Struktura arkusza XSLT Budowa arkusza konstruktory sekwencji <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:param name="css"/> <xsl:template match="/"> <html> <head><link rel="styesheet" type="text/css" href="{$css}"/></head> <body><xsl:apply-templates/></body> </html> <xsl:template match="akapit"> <p><xsl:value-of select="."/></p> </xsl:stylesheet> Patryk Czarnik 08 XSLT XML 2008/09 6 / 1

Model przetwarzania XSLT Wywoływanie szablonów Szablon przekształcenie węzła we fragment drzewa atrybut match: do jakich węzłów "pasuje" szablon. Poczatek przetwarzania szablon pasujacy do korzenia. apply-templates rekurencyjne wywołania szablonów. atrybut select: dla jakich węzłów szukać i stosować szablony, brak select child::node(). dzieci. Przykład <xsl:template match="osoby"> <ul> <xsl:apply-templates select="osoba"/> </ul> <xsl:template match="osoba"> <li><xsl:apply-templates /></li> Patryk Czarnik 08 XSLT XML 2008/09 7 / 1

XSLT Dopasowywanie wzorców Wywoływanie szablonów Zawartość match wzorzec: ograniczona postać ścieżek XPath, osie tylko wgłab (child i attibute). Dla każdego węzła z wyniku select: dobierany szablon o najściślej podanym match, chyba że ręcznie podano priority, konflikt bład lub wybierany późniejszy szablon (zależne od implementacji). Patryk Czarnik 08 XSLT XML 2008/09 8 / 1

XSLT Tryby przetwarzania (modes) Wywoływanie szablonów <xsl:template match="osoby"> <table>... <xsl:apply-templates select="osoba" mode="tabela"/> </table> <xsl:template match="osoba"> <li><xsl:apply-templates select="imię nazwisko"/></li> <xsl:template match="osoba" mode="tabela"> <tr><td><xsl:value-of select="imię"/></td> <td><xsl:value-of select="nazwisko"/></td></tr> Możliwe wartości atrybutu mode: nazwa, #default, #current przy wywołaniu, #all w szablonie. Patryk Czarnik 08 XSLT XML 2008/09 9 / 1

Szablony wbudowane XSLT Wywoływanie szablonów Szablony stosowane gdy żaden z napisanych przez użytkownika nie pasuje do węzła. Dla korzenia i elementów: zastosuj rekurencyjnie szablony dla dzieci, przekazujac wszystkie podane parametry, nie przechodzi do atrybutów (!). Dla atrybutów: kopiuj wartość atrybutu do wyniku (wstawia węzeł tekstowy). Dla węzłów tekstowych: kopiuj tekst do wyniku (wstawia węzeł tekstowy). Dla instrukcji przetwarzania i komentarzy: nie rób nic. Patryk Czarnik 08 XSLT XML 2008/09 10 / 1

Szablony wbudowane XSLT Wywoływanie szablonów <xsl:template match="element() document()" mode="#all"> <xsl:param.../>... <xsl:apply-templates select="child::node()" mode="#current"> <xsl:with-param.../>... </xsl:apply-templates> <xsl:template match="text() @*" mode="#all"> <xsl:value-of select="string(.)"/> <xsl:template match="processing-instruction() comment()" mode="#all"/> Patryk Czarnik 08 XSLT XML 2008/09 11 / 1

XSLT Węzły drzewa wynikowego Tworzenie wyniku Węzły wpisane bezpośrednio w arkusz XSLT wygodne. Węzły skonstruowane za pomoca instrukcji konstruktorów (<xsl:element>, <xsl:comment> itp.) bardziej ogólne. Węzły przepisane z dokumentu źródłowego. Patryk Czarnik 08 XSLT XML 2008/09 12 / 1

XSLT Tworzenie wyniku Tworzenie węzłów wynikowych bezpośrednio Elementy spoza przestrzeni nazw XSLT oraz węzły tekstowe znajdujace się w konstruktorach sekwencji sa przepisywane do wyniku. Atrybuty tych elementów także. Zawartość elementów jest przetwarzana jako konstruktor sekwencji. <xsl:template match="pracownik"> <div> <xsl:if test="parent::dział/nazwa = księgowość "> <img src="obrazek_ksiegowego.png"/> </xsl:if> Pracownik <xsl:apply-templates /> <!- Tego nie będzie w wyniku -> </div> Patryk Czarnik 08 XSLT XML 2008/09 13 / 1

XSLT Instrukcje tworzace węzły Tworzenie wyniku Węzły dowolnych rodzajów. Nazwy ustalane dynamicznie. Istnienie atrybutów ustalane dynamicznie. <xsl:template match="pracownik"> <xsl:element name="{if parent::dział/nazwa = księgowość then księgowy else pracownik }"> <xsl:if test="@stanowisko = kierownik "> <xsl:attribute name="szef"> tak </xsl:attribute> </xsl:if> <xsl:text>zawartość tekstowa <xsl:comment>to będzie komentarz </xsl:element> <xsl:processing-instruction target="xml-stylesheet"> type="text/css" href="styl.css" </xsl:processing-instruction> Patryk Czarnik 08 XSLT XML 2008/09 14 / 1

XSLT Tworzenie wyniku Umieszczanie wyniku wyrażenia XPath Instrukcje XSLT sequence, copy-of i value-of. Wyrażenie XPath w atrybucie select, dla value-of także konstruktor sekwencji wewnatrz. Do wyniku wstawiane: sequence wyliczona sekwencja, copy-of (głęboka) kopia sekwencji, value-of węzeł tekstowy z reprezentacja tekstowa sekwencji, różnice między XSLT 1.0 a 2.0!. Patryk Czarnik 08 XSLT XML 2008/09 15 / 1

XSLT Tworzenie wyniku Umieszczanie wyniku wyrażenia XPath przykłady <xsl:sequence select="for $i in (1 to 10) return $i * $i"/> <xsl:sequence select="//pracownik[@stanowisko= handlowiec ]"/> <xsl:copy-of select="//pracownik[@stanowisko= handlowiec ]"/> <xsl:value-of select="//pracownik[@stanowisko= handlowiec ]/imię"/> <xsl:value-of> <xsl:choose> <xsl:when test="$x > 0">Większe</xsl:when> <xsl:when test="$x < 0">Mniejsze</xsl:when> </xsl:choose> </xsl:value-of> Patryk Czarnik 08 XSLT XML 2008/09 16 / 1

XSLT Tworzenie wyniku value-of w XSLT 1.0 Jeśli wartość do wypisania jest wieloelementowym zbiorem węzłów, to do wyniku przekształcenia przepisywane jest rzutowanie na string tylko pierwszego węzła ze zbioru. To źródło częstych błędów :) Dokument <osoba><imię>patryk</imię><nazwisko>czarnik</nazwisko></osoba> <osoba><imię>szymon</imię><nazwisko>zioło</nazwisko></osoba> Arkusz <wynik><xsl:value-of select="//osoba/imię"/></wynik> Wynik <wynik>patryk</wynik> Patryk Czarnik 08 XSLT XML 2008/09 17 / 1

XSLT Tworzenie wyniku value-of w XSLT 2.0 Sekwencja poddana atomizacji. Wynikowy tekst: rzutowanie każdego atomu na string rozdzielone separatorem podanym w atrybucie separator jeśli brak tego atrybutu rozdzielone spacjami. Dokument <osoba><imię>patryk</imię><nazwisko>czarnik</nazwisko></osoba> <osoba><imię>szymon</imię><nazwisko>zioło</nazwisko></osoba> Arkusz <wynik><xsl:value-of select="//osoba/imię"/></wynik> Wynik <wynik>patryk Szymon</wynik> Patryk Czarnik 08 XSLT XML 2008/09 18 / 1

XSLT Szablony wartości atrybutu Tworzenie wyniku Można używać w: atrybutach wstawianych do wyniku, niektórych atrybutach instrukcji XSLT. Części stałe po prostu napisy kopiowane do wyniku { i } zapisywane jako {{ i }}. Części zmienne obliczane dynamicznie wyrażenie XPath umieszczone między { a }, wstawiana reprezentacja tekstowa wyliczonej sekwencji (jak w value-of, ze spacja jako separatorem), także analogiczne różnice miedzy XSLT 1.0 a XSLT 2.0. <img src="{$image_server}/{@id}.jpg"/> <xsl:element name="h{count(ancestror-or-self::sekcja)}">... </xsl:element> Patryk Czarnik 08 XSLT XML 2008/09 19 / 1

XSLT Szablony wartości atrybutu Tworzenie wyniku Można używać w: atrybutach wstawianych do wyniku, niektórych atrybutach instrukcji XSLT. Części stałe po prostu napisy kopiowane do wyniku { i } zapisywane jako {{ i }}. Części zmienne obliczane dynamicznie wyrażenie XPath umieszczone między { a }, wstawiana reprezentacja tekstowa wyliczonej sekwencji (jak w value-of, ze spacja jako separatorem), także analogiczne różnice miedzy XSLT 1.0 a XSLT 2.0. <img src="{$image_server}/{@id}.jpg"/> <xsl:element name="h{count(ancestror-or-self::sekcja)}">... </xsl:element> Patryk Czarnik 08 XSLT XML 2008/09 19 / 1

XSLT Instrukcje sterujace Instrukcja for-each Przechodzenie wszystkich węzłów wyliczonych przez select W XSLT 2.0 przechodzenie dowolnej sekwencji (np. liczb). <xsl:template match="osoby"> <ul> <xsl:for-each select="osoba"> <li><xsl:value-of select="imię"/> <xsl:value-of select="nazwisko"/></li> </xsl:for-each> </ul> Patryk Czarnik 08 XSLT XML 2008/09 20 / 1

XSLT Instrukcje sterujace Instrukcja if Sprawdzenie warunku logicznego z test (Effective Boolean Value). Jeśli prawdziwy, obliczenie i wstawienie wyniku. Brak else a. <xsl:template match="rozdział"> <xsl:if test="tytuł"> <h2>rozdział <xsl:value-of select="tytuł"/></h2> </xsl:if> <xsl:apply-templates select="node() except tytuł"/> Patryk Czarnik 08 XSLT XML 2008/09 21 / 1

Instrukcja choose XSLT Instrukcje sterujace Podobnie jak if, ale wiele dozorów. Dozory (test w when) wyliczane w kolejności gałęzi when. Wybierana jedna gałaź pierwsza z prawdziwym dozorem. Opcjonalna fraza otherwise. <xsl:template match="liczby"> <xsl:choose> <xsl:when test="$x > 0"> Większe </xsl:when> <xsl:when test="$x < 0"> Mniejsze </xsl:when> <xsl:otherwise> Chyba równe... </xsl:otherwise> </xsl:choose> Patryk Czarnik 08 XSLT XML 2008/09 22 / 1

XSLT Zmienne i parametry Zmienne lokalne Przykład Zmienne deklaratywne brak instrukcji przypisania. Cykliczne referencje zabronione. <xsl:template match="cośtam"> <xsl:variable name="jaki_x"> <xsl:choose> <xsl:when test="$x > 0">dodatni</xsl:when> <xsl:when test="$x = 0">równy zero</xsl:when> <xsl:when test="$x < 0">ujemny</xsl:when> </xsl:choose> </xsl:variable>...x jest <xsl:value-of select="$jaki_x"/>... Patryk Czarnik 08 XSLT XML 2008/09 23 / 1

XSLT Zmienne i parametry Konsekwencje deklaratywności zmiennych Zmienna niezdefiniowana w miejscu odwołania <xsl:choose> <xsl:when test="$x > 0"> <xsl:variable name="jaki_x">dodatni</xsl:variable> </xsl:when> <xsl:otherwise> <xsl:variable name="jaki_x">nie dodatni</xsl:variable> </xsl:otherwise> </xsl:choose>...x jest <xsl:value-of select="$jaki_x"/>... Nowa zmienna tylko na chwilę zakrywa stara <xsl:variable name="jaki_x">nie dodatni</xsl:variable> <xsl:if test="$x > 0"> <xsl:variable name="jaki_x">dodatni</xsl:variable> </xsl:if>...x jest <xsl:value-of select="$jaki_x"/>... Patryk Czarnik 08 XSLT XML 2008/09 24 / 1

XSLT Zmienne i parametry Konsekwencje deklaratywności zmiennych Zmienna niezdefiniowana w miejscu odwołania <xsl:choose> <xsl:when test="$x > 0"> <xsl:variable name="jaki_x">dodatni</xsl:variable> </xsl:when> <xsl:otherwise> <xsl:variable name="jaki_x">nie dodatni</xsl:variable> </xsl:otherwise> </xsl:choose>...x jest <xsl:value-of select="$jaki_x"/>... Nowa zmienna tylko na chwilę zakrywa stara <xsl:variable name="jaki_x">nie dodatni</xsl:variable> <xsl:if test="$x > 0"> <xsl:variable name="jaki_x">dodatni</xsl:variable> </xsl:if>...x jest <xsl:value-of select="$jaki_x"/>... Patryk Czarnik 08 XSLT XML 2008/09 24 / 1

XSLT Zmienne i parametry globalne Zmienne i parametry Wartość parametru przekazana "z zewnatrz" podczas wywołania (można podać wartość domyślna). Przykład Zmienne wyliczane raz dla całego arkusza. <xsl:param name="nazwa"/> <xsl:variable name="ile-elementow" select="count(//element()[name() = $nazwa])"/> <xsl:variable name="tekst"> <p>dokument ma <xsl:value-of select="$ile-elementow"/> elementów.</p> </xsl:variable> <xsl:template match="/">... <xsl:sequence select="$tekst"/>... Patryk Czarnik 08 XSLT XML 2008/09 25 / 1

XSLT Zmienne i parametry Parametry szablonów W szablonie param. W wywołaniu with-param. Przykład <xsl:template match="pracownicy"> <ul> <xsl:apply-templates select="osoba"> <xsl:with-param name="prefix" select=" Pracownik: "> </xsl:apply-templates> </ul> <xsl:template match="osoba"> <xsl:param name="prefix"/> <li><xsl:value-of select="$prefix"/><xsl:apply-templates /></li> Patryk Czarnik 08 XSLT XML 2008/09 26 / 1

XSLT Szablony nazwane i funkcje Szablony nazwane Przykład W szablonie atrybut name. call-template uruchamia. Bez zmiany węzła bieżacego (inaczej niż apply-templates). Możliwa rekursja. <xsl:template name="opisz-element"> <p>element o nazwie <xsl:value-of select="name()"/>.</p> <xsl:template match="/"> <html><body> <h1>wszystkie elementy:</h1> <xsl:for-each select="//*"> <xsl:call-template name="opisz-element"/> </xsl:for-each> </body></html> Patryk Czarnik 08 XSLT XML 2008/09 27 / 1

XSLT Szablony nazwane i funkcje Parametry i rekursja w szablonach nazwanych Pozwalaja na "programowanie" w XSLT (nawet 1.0). Silnia (z akumulatorem) <xsl:template name="silnia"> <xsl:param name="n"/> <xsl:param name="res" select="1"/> <xsl:choose> <xsl:when test="$n > 1"> <xsl:call-template name="silnia"> <xsl:with-param name="n" select="$n - 1"/> <xsl:with-param name="res" select="$n * $res"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:value-of select="$res"/> </xsl:otherwise> </xsl:choose> Patryk Czarnik 08 XSLT XML 2008/09 28 / 1

XSLT Definiowanie własnych funkcji Szablony nazwane i funkcje Tylko w XSLT 2.0. Silnia (bez akumulatora) <xsl:function name="loc:silnia"> <xsl:param name="n"/> <xsl:sequence select="if($n <= 1) then 1 else $n * loc:silnia($n - 1)"/> </xsl:function> Patryk Czarnik 08 XSLT XML 2008/09 29 / 1

XSLT Sortowanie i grupowanie Sortowanie podczas przetwarzania Instrukcja sort w for-each, for-each-group i apply-templates. Opcje sortowania w atrybutach: select klucz, data-type rodzaj danych, order, case-order, stable, lang Prosty przykład <xsl:template match="wyniki_klasówki"> <ul> <xsl:apply-templates select="student"> <xsl:sort select="punkty" data-type="number" order="descending"/> <xsl:sort select="nazwisko" data-type="text"/> </xsl:apply-templates> </ul> Patryk Czarnik 08 XSLT XML 2008/09 30 / 1

Sortowanie sekwencji XSLT Sortowanie i grupowanie Instrukcja perform-sort. Przykład z rekomendacji <xsl:function name="bib:books-by-price" as="schema-element(bib:book)*"> <xsl:param name="in" as="schema-element(bib:book)*"/> <xsl:perform-sort select="$in"> <xsl:sort select="xs:decimal(bib:price)"/> </xsl:perform-sort> </xsl:function>... <xsl:copy-of select="bib:books-by-price(//bib:book) [position() = 1 to 5]"/> Patryk Czarnik 08 XSLT XML 2008/09 31 / 1

Grupowanie (tylko 2.0) XSLT Sortowanie i grupowanie Instrukcja for-each-group źródło danych: atrybut select, klucz grupowania (zależnie od sposobu): group-by, group-adjacent, group-starting-with group-ending-with. Wewnatrz for-each-group kontekst pierwszy element sekwencji tworzacej bieżac a grupę. funkcja current-group() cała aktualnej grupy (sekwencja). funkcja current-grouping-key() bieżaca wartość klucza Patryk Czarnik 08 XSLT XML 2008/09 32 / 1

Grupowanie przykłady XSLT Sortowanie i grupowanie Grupowanie po wartości <xsl:for-each-group select="//pracownik" group-by="@stanowisko"> <xsl:sort select="current-grouping-key()"/> <h2><xsl:value-of select="@stanowisko"/></h2> <p>średnia pensja: <xsl:value-of select="avg(current-group()/pensja)"/> </p> <p>nazwiska: <xsl:value-of select="current-group()/nazwisko" separator=", "/> </p> </xsl:for-each-group> Grupowanie zwn. istnienie węzłów <xsl:for-each-group select="//node()" group-starting-with="h2"> <div class="rozdzial"> <xsl:copy-of select="current-group()"/> </div> </xsl:for-each-group> Patryk Czarnik 08 XSLT XML 2008/09 33 / 1

Grupowanie przykłady XSLT Sortowanie i grupowanie Grupowanie po wartości <xsl:for-each-group select="//pracownik" group-by="@stanowisko"> <xsl:sort select="current-grouping-key()"/> <h2><xsl:value-of select="@stanowisko"/></h2> <p>średnia pensja: <xsl:value-of select="avg(current-group()/pensja)"/> </p> <p>nazwiska: <xsl:value-of select="current-group()/nazwisko" separator=", "/> </p> </xsl:for-each-group> Grupowanie zwn. istnienie węzłów <xsl:for-each-group select="//node()" group-starting-with="h2"> <div class="rozdzial"> <xsl:copy-of select="current-group()"/> </div> </xsl:for-each-group> Patryk Czarnik 08 XSLT XML 2008/09 33 / 1

Tekst i serializacja Analiza tekstu Analiza tekstu (tylko 2.0) Instrukcja analyze-string atrybut select źródło tekstu (rzutowane na string), atrybut regex wyrażenie do którego dopasowujemy tekst. Funkcja regex-group. Przykład z rekomendacji <xsl:analyze-string select="body" regex="\[(.*)\]"> <xsl:matching-substring> <cite><xsl:value-of select="regex-group(1)"/></cite> </xsl:matching-substring> <xsl:non-matching-substring> <xsl:value-of select="."/> </xsl:non-matching-substring> </xsl:analyze-string> Patryk Czarnik 08 XSLT XML 2008/09 35 / 1

Tekst i serializacja Analiza tekstu Czytanie dokumentów tekstowych (tylko 2.0) Funkcja unparsed-text Przykład nieprzetestowany <xsl:analyze-string regex="([^,]*),(, $)" select="unparsed-text( dane.csv, windows-1250 )"> <xsl:matching-substring> <td><xsl:value-of select="regex-group(1)"/></td> </xsl:matching-substring> </xsl:analyze-string> Patryk Czarnik 08 XSLT XML 2008/09 36 / 1

Tekst i serializacja Metody serializacji Serializacja wyniku Wynikiem przekształcenia drzewo XPath. Serializacja zapisanie wyniku jako sekwencji bajtów. Metody serializacji: XML, HTML, XHTML (tylko XSLT 2.0), text. Specyfikacja w arkuszu <xsl:output method="html" encoding="iso-8859-2"/> Patryk Czarnik 08 XSLT XML 2008/09 37 / 1

Tekst i serializacja Metody serializacji Dodatkowe parametry serializacji encoding kodowanie znaków, version wersja XML lub HTML, doctype-public, doctype-system deklaracja DOCTYPE. Specyfikacja w arkuszu <xsl:output method="xhtml" version="1.0" encoding="utf-8" doctype-public="-//w3c//dtd XHTML 1.1//EN" doctype-system="http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd"/> Efekt <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd"> <html>...</html> Patryk Czarnik 08 XSLT XML 2008/09 38 / 1

Tekst i serializacja Metody serializacji Dodatkowe parametry serializacji encoding kodowanie znaków, version wersja XML lub HTML, doctype-public, doctype-system deklaracja DOCTYPE. Specyfikacja w arkuszu <xsl:output method="xhtml" version="1.0" encoding="utf-8" doctype-public="-//w3c//dtd XHTML 1.1//EN" doctype-system="http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd"/> Efekt <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd"> <html>...</html> Patryk Czarnik 08 XSLT XML 2008/09 38 / 1

Tekst i serializacja Metody serializacji Zapisywanie dodatkowych plików Instrukcja result-document. Tworzy i zapisuje do pliku dodatkowe drzewo wynikowe. Przykład z rekomendacji <xsl:output name="section-format" method="xhtml" indent="no"/> <xsl:for-each-group select="/*/xhtml:body/*" group-starting-with="xhtml:h1"> <xsl:result-document href="section{position()}.html" format="section-format" validation="strip"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><title><xsl:value-of select="."/></title></head> <body> <xsl:copy-of select="current-group()"/> </body> </html> </xsl:result-document> </xsl:for-each-group> Patryk Czarnik 08 XSLT XML 2008/09 39 / 1

Tekst i serializacja XSLT 1.0 a XSLT 2.0 Czego nie ma w XSLT 1.0 XPath 2.0 z sekwencjami, typami, if-em itd. Definiowania funkcji. Grupowania. Zapisywania dodatkowych plików z wynikiem. analyze-string.... Patryk Czarnik 08 XSLT XML 2008/09 40 / 1

Tekst i serializacja XSLT 1.0 a XSLT 2.0 Tymczasowe fragmenty drzewa XSLT 1.0 osobne typy node-set i result-tree-fragment. nie wolno mieszać, r-t-f nie wolno przetwarzać. XSLT 2.0 brak takiego podziału. XSLT 2.0, ale nie XSLT 1.0 <xsl:variable name="tmp"> <xsl:apply-templates select="cośtam"/> </xsl:variable> <xsl:apply-templates select="$tmp" mode="blabla"/> Patryk Czarnik 08 XSLT XML 2008/09 41 / 1

Tekst i serializacja Dwa style przetwarzania Style przetwarzania Przetwarzanie sterowane struktura dokumentu źródłowego (push): przechodzimy po strukturze dokumentu źródłowego, generujemy fragmenty struktury dokumentu wyjściowego, typowe użycie instrukcji apply-templates i dopasowywania wzorca, typowe dla dokumentów tekstowych (modelu mieszanego). Przetwarzanie sterowane struktura dokumentu wyjściowego (pull): jedna duża reguła dla korzenia lub elementu głównego, sztywno określona struktura dokumentu docelowego, wyciagamy odpowiednie wartości z dokumentu źródłowego, typowe użycie instrukcji for-each i value-of, typowe dla dokumentów bazodanowych, raportów, podsumowań... W praktyce w większych arkuszach oba style często się mieszaja. Patryk Czarnik 08 XSLT XML 2008/09 42 / 1