KIiMK 2010
Plan XSLT-transformacje dokumentów 1 XSLT-transformacjedokumentów Informacje o XSLT Przykład transformacji 2 3
Informacje o XSLT Przykład transformacji
Informacje o XSLT Przykład transformacji Najprostszym sposobem wyświetlania dokumentu jest użycie CSS
Informacje o XSLT Przykład transformacji Najprostszym sposobem wyświetlania dokumentu jest użycie CSS Nie ma więc tu mowy o wybieraniu poszczególnych danych, czy choćby o wyświetlaniu wartości atrybutów
Informacje o XSLT Przykład transformacji Najprostszym sposobem wyświetlania dokumentu jest użycie CSS Nie ma więc tu mowy o wybieraniu poszczególnych danych, czy choćby o wyświetlaniu wartości atrybutów Dokument XML z założenia nie zawiera informacji dotyczących sposobu prezentacji danych ale można go uzupełnić o takie informacje za pomocą standardu XSL.
Informacje o XSLT Przykład transformacji Najprostszym sposobem wyświetlania dokumentu jest użycie CSS Nie ma więc tu mowy o wybieraniu poszczególnych danych, czy choćby o wyświetlaniu wartości atrybutów Dokument XML z założenia nie zawiera informacji dotyczących sposobu prezentacji danych ale można go uzupełnić o takie informacje za pomocą standardu XSL. XSL = extensible Stylesheet Language(specyfikacja W3C r.1999, rekomendacja r.2001)
Informacje o XSLT Przykład transformacji Najprostszym sposobem wyświetlania dokumentu jest użycie CSS Nie ma więc tu mowy o wybieraniu poszczególnych danych, czy choćby o wyświetlaniu wartości atrybutów Dokument XML z założenia nie zawiera informacji dotyczących sposobu prezentacji danych ale można go uzupełnić o takie informacje za pomocą standardu XSL. XSL = extensible Stylesheet Language(specyfikacja W3C r.1999, rekomendacja r.2001) XSL FO(Formating Objects)
Informacje o XSLT Przykład transformacji Najprostszym sposobem wyświetlania dokumentu jest użycie CSS Nie ma więc tu mowy o wybieraniu poszczególnych danych, czy choćby o wyświetlaniu wartości atrybutów Dokument XML z założenia nie zawiera informacji dotyczących sposobu prezentacji danych ale można go uzupełnić o takie informacje za pomocą standardu XSL. XSL = extensible Stylesheet Language(specyfikacja W3C r.1999, rekomendacja r.2001) XSL FO(Formating Objects) XSLT(XSL Transformations)
Informacje o XSLT Przykład transformacji Działanie procesora XSLT powoduje powstanie dokumentu wynikowego, którym może być: Zmieniony wejściowy dokument XML(zmienione drzewo dokumentu)
Informacje o XSLT Przykład transformacji Działanie procesora XSLT powoduje powstanie dokumentu wynikowego, którym może być: Zmieniony wejściowy dokument XML(zmienione drzewo dokumentu) Nowy arkusz XSLT, który może być stosowany do przetwarzania kolejnych dokumentów
Informacje o XSLT Przykład transformacji Działanie procesora XSLT powoduje powstanie dokumentu wynikowego, którym może być: Zmieniony wejściowy dokument XML(zmienione drzewo dokumentu) Nowy arkusz XSLT, który może być stosowany do przetwarzania kolejnych dokumentów Dokument zawierający otrzymane z dokumentu XML dane oraz sposób ich prezentacji
Transformacje XSLT-cechy Informacje o XSLT Przykład transformacji
Transformacje XSLT-cechy Informacje o XSLT Przykład transformacji XSLT jest językiem deklaratywnym zapisany w nim arkusz określa budowę dokumentu wynikowego a nie sposób w jaki ma powstać
Transformacje XSLT-cechy Informacje o XSLT Przykład transformacji XSLT jest językiem deklaratywnym zapisany w nim arkusz określa budowę dokumentu wynikowego a nie sposób w jaki ma powstać Przekształcanie odbywa się poprzez dopasowywanie zdefiniowanych wzorców(templates) do elementów w dokumencie XML
Transformacje XSLT-cechy Informacje o XSLT Przykład transformacji XSLT jest językiem deklaratywnym zapisany w nim arkusz określa budowę dokumentu wynikowego a nie sposób w jaki ma powstać Przekształcanie odbywa się poprzez dopasowywanie zdefiniowanych wzorców(templates) do elementów w dokumencie XML W wyniku dopasowania wzorców tworzony jest nowy dokument XML
Co potrafi XSL? XSLT-transformacje dokumentów Informacje o XSLT Przykład transformacji
Co potrafi XSL? XSLT-transformacje dokumentów Informacje o XSLT Przykład transformacji dodanie prefixów i suffixów do przetwaranego tekstu
Co potrafi XSL? XSLT-transformacje dokumentów Informacje o XSLT Przykład transformacji dodanie prefixów i suffixów do przetwaranego tekstu usuwanie, tworzenie, sortowanie elementów
Co potrafi XSL? XSLT-transformacje dokumentów Informacje o XSLT Przykład transformacji dodanie prefixów i suffixów do przetwaranego tekstu usuwanie, tworzenie, sortowanie elementów kopiowanie elementów w inne miejsce
Co potrafi XSL? XSLT-transformacje dokumentów Informacje o XSLT Przykład transformacji dodanie prefixów i suffixów do przetwaranego tekstu usuwanie, tworzenie, sortowanie elementów kopiowanie elementów w inne miejsce numerownaie, sumowanie
Co potrafi XSL? XSLT-transformacje dokumentów Informacje o XSLT Przykład transformacji dodanie prefixów i suffixów do przetwaranego tekstu usuwanie, tworzenie, sortowanie elementów kopiowanie elementów w inne miejsce numerownaie, sumowanie przetwarzanie łańcuchów znaków
Co potrafi XSL? XSLT-transformacje dokumentów Informacje o XSLT Przykład transformacji dodanie prefixów i suffixów do przetwaranego tekstu usuwanie, tworzenie, sortowanie elementów kopiowanie elementów w inne miejsce numerownaie, sumowanie przetwarzanie łańcuchów znaków wyszukiwanie struktur i węzłów
przykład: linie tramwajowe Informacje o XSLT Przykład transformacji <rozklad> <linia> <nr>3</nr> <poczatek>dworzec Towarowy</poczatek> <koniec>prokocim</koniec> </linia> <linia> <nr>9</nr> <poczatek>nowa Huta</poczatek> <koniec>prokocim</koniec> </linia> </rozklad>
Element <xsl:template> Informacje o XSLT Przykład transformacji
Element <xsl:template> Informacje o XSLT Przykład transformacji Działanie transformacji polega na dopasowywaniu szablonów do węzłów i wykonaniu zawartych w nich instrukcji.
Element <xsl:template> Informacje o XSLT Przykład transformacji Działanie transformacji polega na dopasowywaniu szablonów do węzłów i wykonaniu zawartych w nich instrukcji. Proces ten jest powtarzany tak długo jak to możliwe, czyli aż wszystkie wzorce zawarte w dokumencie XSLT zostaną dopasowane
Element <xsl:template> Informacje o XSLT Przykład transformacji Działanie transformacji polega na dopasowywaniu szablonów do węzłów i wykonaniu zawartych w nich instrukcji. Proces ten jest powtarzany tak długo jak to możliwe, czyli aż wszystkie wzorce zawarte w dokumencie XSLT zostaną dopasowane Element <xsl:template> pozwala zdefiniować szablon, do którego będzie dopasowywana zawartość wejściowego dokumentu XML.
Element <xsl:template> Informacje o XSLT Przykład transformacji Działanie transformacji polega na dopasowywaniu szablonów do węzłów i wykonaniu zawartych w nich instrukcji. Proces ten jest powtarzany tak długo jak to możliwe, czyli aż wszystkie wzorce zawarte w dokumencie XSLT zostaną dopasowane Element <xsl:template> pozwala zdefiniować szablon, do którego będzie dopasowywana zawartość wejściowego dokumentu XML. Atrybut match pozwala sprecyzować do jakiego elementu XML dany szablon ma być dopasowywany.
Element <xsl:template> Informacje o XSLT Przykład transformacji Działanie transformacji polega na dopasowywaniu szablonów do węzłów i wykonaniu zawartych w nich instrukcji. Proces ten jest powtarzany tak długo jak to możliwe, czyli aż wszystkie wzorce zawarte w dokumencie XSLT zostaną dopasowane Element <xsl:template> pozwala zdefiniować szablon, do którego będzie dopasowywana zawartość wejściowego dokumentu XML. Atrybut match pozwala sprecyzować do jakiego elementu XML dany szablon ma być dopasowywany. <xsl:templatematch="...">... </xsl:template>
Element <xsl:apply-templates> Informacje o XSLT Przykład transformacji
Element <xsl:apply-templates> Informacje o XSLT Przykład transformacji Element <xsl:apply-templates> pozwala zastosować określony szablon do elementu obecnie przetwarzanego lub do jego elementów podrzednych.
Element <xsl:apply-templates> Informacje o XSLT Przykład transformacji Element <xsl:apply-templates> pozwala zastosować określony szablon do elementu obecnie przetwarzanego lub do jego elementów podrzednych. Dodając atrybut select możemy ograniczyć elementy dopasowywane tylko do tych, które pasują do wartości tego atrybutu.
Element <xsl:apply-templates> Informacje o XSLT Przykład transformacji Element <xsl:apply-templates> pozwala zastosować określony szablon do elementu obecnie przetwarzanego lub do jego elementów podrzednych. Dodając atrybut select możemy ograniczyć elementy dopasowywane tylko do tych, które pasują do wartości tego atrybutu. Ponadto wartość tego atrybutu może określać porządek w jakim będa przetwarzane węzły podrzędne.
Element <xsl:apply-templates> Informacje o XSLT Przykład transformacji Element <xsl:apply-templates> pozwala zastosować określony szablon do elementu obecnie przetwarzanego lub do jego elementów podrzednych. Dodając atrybut select możemy ograniczyć elementy dopasowywane tylko do tych, które pasują do wartości tego atrybutu. Ponadto wartość tego atrybutu może określać porządek w jakim będa przetwarzane węzły podrzędne. <xsl:template match="rozklad"> <html><head><title>rozkład jazdy</title></head><body> <ul> <xsl:apply-templates/> </ul> </body> </html> </xsl:template> </xsl:template>
Element <xsl:value-of> Informacje o XSLT Przykład transformacji
Element <xsl:value-of> Informacje o XSLT Przykład transformacji Element <xsl:value-of> umożliwia pobranie danych z elementu XML znajdującego się w pliku wejściowym i przekazanie go do strumienia wyjściowego.
Element <xsl:value-of> Informacje o XSLT Przykład transformacji Element <xsl:value-of> umożliwia pobranie danych z elementu XML znajdującego się w pliku wejściowym i przekazanie go do strumienia wyjściowego. Atrybut select jest wyrażeniem XPath, które określa jakie dane mają zostać pobrane.
Element <xsl:value-of> Informacje o XSLT Przykład transformacji Element <xsl:value-of> umożliwia pobranie danych z elementu XML znajdującego się w pliku wejściowym i przekazanie go do strumienia wyjściowego. Atrybut select jest wyrażeniem XPath, które określa jakie dane mają zostać pobrane. <xsl:template match="linia"> <li> linia nr. <xsl:value-of select="numer"/>: <xsl:value-of select="poczatek"/>-> <xsl:value-of sel </li> </xsl:template>
przykład- lista książek <biblioteka> <book> <info> <tytul>solaris</tytul> <dzial> fantastyka</dzial> <sygnatura> L-001 </sygnatura> <autor>stanisław Lem</autor> </info> <spis> <r>rozdział 1</r> <r>rozdział 2</r> <r>rozdział 3</r> </spis> </book>... </biblioteka>
wybór elementu autor
wybór elementu autor element <autor> jest w hierarchi węzłów w punkcie <biblioteka> <book> <info> <dzial> fantastyka</dzial> <sygnatura> L-001 </sygnatura> <autor>stanisław Lem</autor>
wybór elementu autor element <autor> jest w hierarchi węzłów w punkcie <biblioteka> <book> <info> <dzial> fantastyka</dzial> <sygnatura> L-001 </sygnatura> <autor>stanisław Lem</autor> Trzeba dojść do elementu <info> zeby wyświetlić elementy podrzędne( dzieci )
wybór elementu autor
wybór elementu autor przekształcamy rekurencyjnie korzeń dokumentu <xsl:template match="biblioteka"> <html><body> <xsl:apply-templates/> </body></html> </xsl:template>
wybór elementu autor przekształcamy rekurencyjnie korzeń dokumentu <xsl:template match="biblioteka"> <html><body> <xsl:apply-templates/> </body></html> </xsl:template> definiujemy regułę dla elementu <autor>: <xsl:template match="info"> <h1><xsl:value-of select="autor"/></h1> </xsl:template>
wybór elementu autor przekształcamy rekurencyjnie korzeń dokumentu <xsl:template match="biblioteka"> <html><body> <xsl:apply-templates/> </body></html> </xsl:template> definiujemy regułę dla elementu <autor>: <xsl:template match="info"> <h1><xsl:value-of select="autor"/></h1> </xsl:template> niestety... rekurencja przetwarza wszystkie węzły, a dla elementu o niezdefiniowanej regule wyświetlana jest jego wartość
wybór elementu autor przekształcamy rekurencyjnie korzeń dokumentu <xsl:template match="biblioteka"> <html><body> <xsl:apply-templates/> </body></html> </xsl:template> definiujemy regułę dla elementu <autor>: <xsl:template match="info"> <h1><xsl:value-of select="autor"/></h1> </xsl:template> niestety... rekurencja przetwarza wszystkie węzły, a dla elementu o niezdefiniowanej regule wyświetlana jest jego wartość przykład raczej kiepski: przykład 1
wybór elementu autor
wybór elementu autor rozwiązanie: należy zablokować przetwarzanie innych elementów ( w tym przypadku wystarczy blokada <spis> <xsl:template match="spis"/> <!--wylaczenie przetwarzania elementu-->
wybór elementu autor rozwiązanie: należy zablokować przetwarzanie innych elementów ( w tym przypadku wystarczy blokada <spis> <xsl:template match="spis"/> <!--wylaczenie przetwarzania elementu--> przykład lepszy: przykład 2
wybór elementu autor rozwiązanie: należy zablokować przetwarzanie innych elementów ( w tym przypadku wystarczy blokada <spis> <xsl:template match="spis"/> <!--wylaczenie przetwarzania elementu--> przykład lepszy: przykład 2 czasem to jednak bardzo niewygodny sposób, może się zdażyć, że trzeba blokować dużo elementów.
wybór elementu autor
wybór elementu autor można wykorzystać fakt, że element <xsl:apply-templates/> może mieć atrybut select:
wybór elementu autor można wykorzystać fakt, że element <xsl:apply-templates/> może mieć atrybut select: <xsl:apply-templates select="nazwa_elementu"/>
wybór elementu autor można wykorzystać fakt, że element <xsl:apply-templates/> może mieć atrybut select: <xsl:apply-templates select="nazwa_elementu"/> wystarczy podczas przetwarzania <xsl:template match="biblioteka"> <html> <body> <xsl:apply-templates select="book/info/autor"/> </body> </html> </xsl:template>
wybór elementu autor można wykorzystać fakt, że element <xsl:apply-templates/> może mieć atrybut select: <xsl:apply-templates select="nazwa_elementu"/> wystarczy podczas przetwarzania <xsl:template match="biblioteka"> <html> <body> <xsl:apply-templates select="book/info/autor"/> </body> </html> </xsl:template> przykład jeszcze lepszy bo krótszy: przykład 3
wybór elementu autor
wybór elementu autor jeśli chcemy, żeby każdy element był traktowany oddzielnie: <xsl:template match="biblioteka"> <html> <body> <xsl:apply-templates select="book/info/autor"/> </body> </html> </xsl:template> <xsl:template match="autor"> <h1> <xsl:value-of select="."/></h1> </xsl:template>
wybór elementu autor jeśli chcemy, żeby każdy element był traktowany oddzielnie: <xsl:template match="biblioteka"> <html> <body> <xsl:apply-templates select="book/info/autor"/> </body> </html> </xsl:template> <xsl:template match="autor"> <h1> <xsl:value-of select="."/></h1> </xsl:template> przykład z wyborem elementow: przykład 4
wybór elementu nadrzędnego( rodzica )
wybór elementu nadrzędnego( rodzica ) z taką sytuacją mamy do czynienia, gdy chcemy zrobić np zestawienie tytułów rozdziałów i obok każdego dopisać tytuł książki <xsl:template match="biblioteka"> <html> <body> <xsl:apply-templates select="book/spis/r"/> </body> </html> </xsl:template> <xsl:template match="r"> <h1> <xsl:value-of select="."/> <xsl:text> </xsl:text> <xsl:value-ofselect="../../info/tytul"/> </h1> </xsl:template>
wybór elementu nadrzędnego( rodzica ) przykład z wyborem elementow: przykład 5 z taką sytuacją mamy do czynienia, gdy chcemy zrobić np zestawienie tytułów rozdziałów i obok każdego dopisać tytuł książki <xsl:template match="biblioteka"> <html> <body> <xsl:apply-templates select="book/spis/r"/> </body> </html> </xsl:template> <xsl:template match="r"> <h1> <xsl:value-of select="."/> <xsl:text> </xsl:text> <xsl:value-ofselect="../../info/tytul"/> </h1> </xsl:template>
wybór elementu autor
wybór elementu autor istnieje możliwość iteracyjnego przetwarzania elementów w poniższym przykładzie rezygnujemy w całości z rekurencji
wybór elementu autor istnieje możliwość iteracyjnego przetwarzania elementów w poniższym przykładzie rezygnujemy w całości z rekurencji <xsl:template match="biblioteka"> <html><body> <xsl:for-each select="book/info"> <h1> <xsl:value-of select="autor"/></h1> </xsl:for-each> </body></html> </xsl:template>
wybór elementu autor istnieje możliwość iteracyjnego przetwarzania elementów w poniższym przykładzie rezygnujemy w całości z rekurencji <xsl:template match="biblioteka"> <html><body> <xsl:for-each select="book/info"> <h1> <xsl:value-of select="autor"/></h1> </xsl:for-each> </body></html> </xsl:template> przykład z iteracyjnym wyborem elementow: przykład 6
sortowanie wg elementu
sortowanie wg elementu istnieje możliwość sortowania podczas iteracji:
sortowanie wg elementu istnieje możliwość sortowania podczas iteracji: <xsl:sort select="nazwa_elementu"/> w poniższym przykładzie sortowanie wg tytyłów:
sortowanie wg elementu istnieje możliwość sortowania podczas iteracji: <xsl:sort select="nazwa_elementu"/> w poniższym przykładzie sortowanie wg tytyłów: <xsl:for-each select="book/info"> <xsl:sort select="autor"/> <h1> <xsl:value-of select="autor"/></h1> <h2> <xsl:value-of select="tytul"/></h2> </xsl:for-each>
sortowanie wg elementu istnieje możliwość sortowania podczas iteracji: <xsl:sort select="nazwa_elementu"/> w poniższym przykładzie sortowanie wg tytyłów: <xsl:for-each select="book/info"> <xsl:sort select="autor"/> <h1> <xsl:value-of select="autor"/></h1> <h2> <xsl:value-of select="tytul"/></h2> </xsl:for-each> można wykorzystać konstrukcję: <xsl:sort order="descending" data-type="number" select="p
sortowanie wg elementu istnieje możliwość sortowania podczas iteracji: <xsl:sort select="nazwa_elementu"/> w poniższym przykładzie sortowanie wg tytyłów: <xsl:for-each select="book/info"> <xsl:sort select="autor"/> <h1> <xsl:value-of select="autor"/></h1> <h2> <xsl:value-of select="tytul"/></h2> </xsl:for-each> można wykorzystać konstrukcję: <xsl:sort order="descending" data-type="number" select="p przykład z wykorzystaniem sortowania: przykład 7
wybieranie wg wartości elementu
wybieranie wg wartości elementu istnieje możliwość wyboru podczas iteracji:
wybieranie wg wartości elementu istnieje możliwość wyboru podczas iteracji: <xsl:if test="warunek_logiczny"/> w poniższym przykładzie wybranie autora Stanisław Lem :
wybieranie wg wartości elementu istnieje możliwość wyboru podczas iteracji: <xsl:if test="warunek_logiczny"/> w poniższym przykładzie wybranie autora Stanisław Lem : <xsl:for-each select="book/info"> <xsl:if test="autor= Stanisław Lem "> <h1> <xsl:value-of select="autor"/></h1> <h2> <xsl:value-of select="tytul"/></h2> </xsl:if> </xsl:for-each>
wybieranie wg wartości elementu istnieje możliwość wyboru podczas iteracji: <xsl:if test="warunek_logiczny"/> w poniższym przykładzie wybranie autora Stanisław Lem : <xsl:for-each select="book/info"> <xsl:if test="autor= Stanisław Lem "> <h1> <xsl:value-of select="autor"/></h1> <h2> <xsl:value-of select="tytul"/></h2> </xsl:if> </xsl:for-each> pytania dotyczące liczb zadajemy wykorzystując relacje w postaci encji: > >lub<< np <xsl:if test="cena> 10">
wybieranie wg wartości elementu istnieje możliwość wyboru podczas iteracji: <xsl:if test="warunek_logiczny"/> w poniższym przykładzie wybranie autora Stanisław Lem : <xsl:for-each select="book/info"> <xsl:if test="autor= Stanisław Lem "> <h1> <xsl:value-of select="autor"/></h1> <h2> <xsl:value-of select="tytul"/></h2> </xsl:if> </xsl:for-each> pytania dotyczące liczb zadajemy wykorzystując relacje w postaci encji: > >lub<< np <xsl:if test="cena> 10"> przykład z wykorzystaniem wyboru: przykład 8
konstrukcja typu if... then...else
konstrukcja typu if... then...else <xsl:for-each select="book/info"> <xsl:choose> <xsl:when test="autor= Stanisław Lem "> <h1 style="color:red;"> <xsl:value-of select="autor"/> </h1> </xsl:when> <xsl:otherwise> <h1 style="color:green;"> <xsl:value-of select="autor"/> </h1> </xsl:otherwise> </xsl:choose> </xsl:for-each>
konstrukcja typu if... then...else <xsl:for-each select="book/info"> <xsl:choose> <xsl:when test="autor= Stanisław Lem "> <h1 style="color:red;"> <xsl:value-of select="autor"/> </h1> </xsl:when> <xsl:otherwise> <h1 style="color:green;"> <xsl:value-of select="autor"/> </h1> </xsl:otherwise> </xsl:choose> </xsl:for-each> przykład: przykład 9