xsl:template
Transkrypt
xsl:template
Hipertekst i hipermedia Język XSLT dr inż.Wioleta Szwoch Wioleta Szwoch, KISI ETI PG 1 XPath (XML Path Language) • Standard do identyfikacji części dokumentu XML-owego • Wykorzystanie wyrażeń do nawigacji w dokumencie XML – Składnia podobna do ścieżek systemu plików w Unix – Możliwość wydobycia potrzebnych nam węzłów • Zawiera bibliotekę funkcji standardowych • Znajduje zastosowanie w innych standardach Wioleta Szwoch, KISI ETI PG 2 ancestor 1 3 2 5 sibling 4 Węzeł odniesienia 6 8 7 sibling preceding following 9 11 10 12 descendant Wioleta Szwoch, KISI ETI PG 3 XPath • składnia – wybór węzła nazwa węzła / korzeń . bieżący węzeł (self::node()) .. rodzic (parent::node()) @nazwa atrybutu – predykaty • pozwalają na sprawdzenie własności, których nie da się wyrazić w samych testach węzłów • dowolne wyrażenie XPath Wioleta Szwoch, KISI ETI PG 5 XPath • składnia – wybór nieznanych węzłów * dowolny węzeł @* dowolny atrybut node() dowolny węzeł – wybór wielu ścieżek | Wioleta Szwoch, KISI ETI PG 6 XPath • funkcje – możliwość operacji na: • liczbach, – round(), sum(), ... • łańcuchach tekstów, – concat(), substring(), string(),... • wartościach logicznych – true(), false(), not(),... • pozostałe – count(), position(), last()... Wioleta Szwoch, KISI ETI PG 7 XPath • Operatory – porównania i logiczne != , <= , = , > , >= and, or, not – liczbowe +, -, *, div, mod – (towar[1]/wartość + towar[2]/wartość ) div 100 Wioleta Szwoch, KISI ETI PG 8 XSL (eXtensible Stylesheet Language) • SGML(1986) ( XML) • DSSSL (XSL) – Document Style and Semantics Specification Language – język arkuszy stylów – język do przetwarzania i przekształcania dokumentów SGML do postaci, która można wyświetlić lub wydrukować – zbyt skomplikowana struktura definiowania formatów dokumentów – A HUGE MONSTER OF A LANGUAGE Wioleta Szwoch, KISI ETI PG 9 XSL (eXtensible Stylesheet Language) XSLT (XSL Transformation) XSL FO (XSL Formating Objects) • Język pozwalający przekształcać i wyświetlać dane z dokumentów XML • Co by było, gdyby nie było XSL? Wioleta Szwoch, KISI ETI PG 10 XSLT • Extensible StyleSheet Language Transformations – Rozszerzalny Język Arkuszy Stylów – Przekształcenia • CSS – Kaskadowe Arkusze Stylów – arkusz stylów określa styl, czyli wygląd pewnych znaczników (HTML lub XML) – możemy zdefiniować rodzaj czcionki, rozmiar i kolor tekstu, rodzaj obramowania, kolor tła, … • Arkusz stylów XSLT – dokument generujący dane wynikowe na podstawie dokumentu XML, przy czym dokument wynikowy może zawierać lub nie informacje formatujące – kompletny wysokopoziomowy język do manipulowania dokumentami XML – nie zastępuje on istniejących języków programowania, ale je uzupełnia Wioleta Szwoch, KISI ETI PG 11 XSLT • Extensible StyleSheet Language Transformations • Język przekształceń drzew XML • Istotą XSLT jest dopasowywanie pewnych wzorców do elementów dokumentu XML • Język deklaratywny – arkusz stylu określa budowę dokumentu wynikowego, a nie sposób w jaki ma on powstać • Język sterowany danymi – kod wykonywany w odpowiedzi na napotkanie pewnych danych; kod wykonywany niedeterministycznie 12 Wioleta Szwoch, KISI ETI PG XSLT - transformacje dokumentów • znaczenie XSLT – umożliwia pracę z dokumentami XML • nie musimy pisać programów do przetworzenia XML – otrzymujemy z XML różne typy dokumentów (strony HTML, …) – ta sama transformacja stosowana do wielu dokumentów XML – różne XSLT do tego samego XML różna postać tej samej informacji Wioleta Szwoch, KISI ETI PG 13 XSLT - transformacje dokumentów dokument XML XML HTML RTF PDF procesor XSLT Dokument XSLT inne Dokument wynikowy Wioleta Szwoch, KISI ETI PG 14 XSLT - transformacje dokumentów • Procesory XSLT – XT (James Clark) • Jeden z pierwszych • stworzony w Javie – Xalan (Apache) • Łatwe wykorzystanie w środowisku Java i C++ – Msxml (Microsoft) • Rozpowszechniany z IE – SAXON • Procesor XSLT z pełną obsługą XSLT 1.0 i XPath 1.0 – LotusXSL, Koala XSL Engine, iXSLT, XT, … Wioleta Szwoch, KISI ETI PG 15 XSLT • Jak pokazać, że plik XML ma być przetworzony wg pliku XSLT? • Powiązanie w linii komend (np. Xalan) – java org.apache.xalan.xslt.Process -IN plik.xml -XSL plik.xsl -OUT plik.html • Powiązanie transformacji z plikiem XML – <?xml-stylesheet type= ” text/xsl” href= ” arkusz.xsl”?> Wioleta Szwoch, KISI ETI PG 16 Przebieg transformacji • w samodzielnym programie – procesorze XSLT • po stronie klienta – transformacje wykonuje program klienta odczytując arkusz stylów • po stronie serwera – program serwera wykorzystuje arkusz stylów do automatycznej transformacji dokumentu i wysyła go do klienta Wioleta Szwoch, KISI ETI PG 17 Struktura dokumentu XSLT • Deklaracja XML • Znacznik xsl:stylesheet – atrybut xmlns:xsl daje URI dla przestrzeni nazw XSLT • xmlns:xsl="http://www.w3.org/1999/XSL/Transform" – atrybut version podaje numer wersji <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl=“http://www.w3.org/1999/XSL/Transform” version="1.0"> ........ </xsl:stylesheet> Wioleta Szwoch, KISI ETI PG 18 Struktura dokumentu XSLT • Deklaracja XML • Znacznik xsl:stylesheet – atrybut xmlns:xsl daje URI dla przestrzeni nazw XSLT • xmlns:xsl="http://www.w3.org/1999/XSL/Transform" – atrybut version podaje numer wersji • Elementy pierwszego poziomu (top-level) • Szablony – podstawowa zawartość arkusza transformacji XSLT Wioleta Szwoch, KISI ETI PG 19 Struktura dokumentu XSLT • • • • • • • • • • • • xsl:attribute-set xsl:decimal-format xsl:import xsl:include xsl:key xsl:namespace-alias xsl:output xsl:param xsl:preserve-space xsl:strip-space xsl:template xsl:variable • • • • • • • • • • • • określa zbiór atrybutów definiuje sposób wyświetlania liczb importuje arkusze stylów włącza arkusze stylów określa klucz wskazuje na przestrzeń nazw w dokumencie wynikowym określa rodzaj dokumentu wynikowego pozwala utworzyć parametry zachowuje białe znaki w określonym elemencie usuwa białe znaki z określonego elementu określa szablon definiuje zmienne Wioleta Szwoch, KISI ETI PG 20 Struktura dokumentu XSLT • • • • • • • • • • • • xsl:apply-imports xsl: apply-templates xsl: attribute xsl:call-template xsl:choose xsl:comment xsl:copy xsl:copy-of xsl:element xsl:fallback xsl:for-each xsl:if • • • • • • • • • • xsl:message xsl: number xsl: otherwise xsl:processing-instruction xsl:sort xsl:text xsl:transform xsl:value-of xsl:when xsl:with-param Wioleta Szwoch, KISI ETI PG 21 Struktura dokumentu XSLT hello.xsl hello.xml <?xml version="1.0"?> <?xml version="1.0"?> <xsl:stylesheet <hi>Hello XSLT!</hi> xmlns:xsl=“http://www.w3.o rg/1999/XSL/Transform” <?xml-stylesheet type= ”text/xsl” href= ”hello.xsl”?> version="1.0"> <xsl:output method="html" /> <xsl:template match="/"> <b><xsl:value-of Hello XSLT! select="hi"/></b> </xsl:template> </xsl:stylesheet> Wioleta Szwoch, KISI ETI PG 22 Format dokumentu wyjściowego • xsl:output • różnorodne atrybuty – method określa format dokumentu wyjściowego • html, xml, text – encoding, version, ... • metoda domyślna: xml Wioleta Szwoch, KISI ETI PG 23 XSLT –wydobycie informacji • xsl:value-of – select • określa węzeł z którego należy pobrać informacje • wartością select wyrażenie XPath lub jakaś z funkcji XSLT • xsl:value-of wyświetla jedynie pierwszą informację, określoną w atrybucie select Wioleta Szwoch, KISI ETI PG 24 XSLT - szablony • xsl:template • Umożliwiają określenie tego, jak transformacja ma działać • Zawierają zbiór instrukcji wykonywanych po jego wywołaniu • Regułę (wzorzec) można wywołać przez dopasowanie węzła drzewa dokumentu XML do atrybutu match • Węzły dopasowuje się a nie wybiera, są one przetwarzane tak jak napotyka je procesor XML Wioleta Szwoch, KISI ETI PG 25 XSLT - szablony • xsl:template – match • oznacza zakres stosowania wzorca – mode • tryb – name • nazwa <?xml version="1.0 <R> <A>1</A> <B>2</B> <A>3</A> </R> <xsl:template match="R"> … </xsl:template> <xsl:template match="A"> … </xsl:template> <xsl:template match="B"> … </xsl:template> ogólny format szablonu Wioleta Szwoch, KISI ETI PG 26 Testy węzłów <?xml version="1.0"?> <R> <A>1</A> <B>2</B> <A>3</A> </R> / : korzeń * : element @* : atrybut . : aktualny węzeł “text()”, “comment()”, “processing-instruction” “node()” : dowolny węzeł Wioleta Szwoch, KISI ETI PG 27 XSLT - szablony • xsl:template – match – mode – name • wywołania szablonów – xsl:apply-templates – xsl:call-templates • szablonów nie można w sobie zagnieżdżać Wioleta Szwoch, KISI ETI PG 28 XSLT - szablony • element template musi mieć jeden z atrybutów: – match • definiuje transformację dla elementu opisanego przez ten atrybut <xsl:template match="...">...</xsl:template> – name • wynik na wyjście za każdym razem gdy szablon jest wykonywany <xsl:template name="...">...</xsl:template> Wioleta Szwoch, KISI ETI PG 29 XSLT - szablony • Wykonanie szablonu ze wzorcem – Definicja szablonu: <xsl:template match="elem">...</xsl:template> – Wywołanie szablonu: • do wszystkich dzieci bieżącego węzła: <xsl:apply-templates/> • wybranie węzłów do których szablon jest stosowany <xsl:apply-templates select="..." /> Wioleta Szwoch, KISI ETI PG 30 XSLT - szablony • Wykonanie szablonu z nazwą – Definicja szablonu: <xsl:template name="nazwa">...</xsl:template> – Wywołanie szablonu: <xsl:call-template name="nazwa"/> • Przypomina bardziej klasyczne programowanie • Umożliwiają przejęcie pełnej kontroli nad sterowaniem Wioleta Szwoch, KISI ETI PG 31 XSLT - transformacje dokumentów • dopasowywanie wzorców ... <nowela> <tytuł> Władca hiperdokumentów </tytuł> <autor>Xawery M. Lingwista</autor> <rozdział> <tytuł>Księga pierwsza</tytuł> <treść>Nowela ta w ...</treść> </rozdział> ... ... <xsl:template match="nowela/rozdział/tytuł"> <h1><xsl:value--of select=”. ”/></h1> <h1><xsl:value </xsl:template> ... Wioleta Szwoch, KISI ETI PG 32 XSLT - szablony ... <xsl:template match="ssaki"> <h1><xsl:apply-templates/></h1> </xsl:template> ... <xsl:template match="ptaki"> <h1><xsl:apply-templates/></h1> </xsl:template> … ... <xsl:template match="ssaki|ptaki"> <h1><xsl:apply-templates/></h1> </xsl:template> ... Wioleta Szwoch, KISI ETI PG 33 XSLT - szablony • szablony z trybem – możliwość przetwarzania tego samego zbioru węzłów wiele razy <xsl:template match="root"> <xsl:apply-templates mode="tryb1"/> <xsl:apply-templates mode="tryb2"/> </xsl:template> <xsl:template match="elem" mode="tryb1"> <xsl:text>tryb1:</xsl:text> <xsl:value-of select="."/> </xsl:template> <xsl:template match="elem" mode="tryb2"> <xsl:text>tryb2:</xsl:text> <xsl:value-of select="."/> </xsl:template> Wioleta Szwoch, KISI ETI PG 34 XSLT • Język XSLT umożliwia – przetwarzanie warunkowe, – tworzenie pętli – parametryzację • dane spoza pliku xml i xslt mogą wpływać na wynik Wioleta Szwoch, KISI ETI PG 35 XSLT - Instrukcja warunkowa • xsl:if – test • nie umożliwia tworzenia rozgałęzień <xsl:if test="plec='Kobieta'"> <font class="napis">Zona</font> </xsl:if> <xsl:if test="plec='Mezczyzna'"> <font class="napis">Maz</font> </xsl:if> Wioleta Szwoch, KISI ETI PG 36 XSLT - wielokrotny wybór • xsl:choose – xsl:when : określa warunki • test – xsl:otherwise : ostateczne instrukcje – sprawdzanie wyrażeń do pierwszego spełnionego warunku Wioleta Szwoch, KISI ETI PG 37 XSLT - wielokrotny wybór <xsl:choose> <xsl:when test="@plec='kobieta'"> <img src="bk-female.png" alt="Kobieta"/> </xsl:when> <xsl:when test="@plec='mezczyzna'"> <img src="bk-male.png" alt="Mezczyzna"/> </xsl:when> </xsl:choose> Wioleta Szwoch, KISI ETI PG 38 XSLT - pętle • xsl:for-each – select • procesor XSLT przetwarza wszystkie węzły odpowiadające wzorcowi podanemu w atrybucie select • możliwość sortowania - xsl:sort Wioleta Szwoch, KISI ETI PG 39 <xsl:for-each select="osoba"> <xsl:sort select="@plec"/> <xsl:sort select="nazwisko"/> <xsl:sort select="imie"/> <center> <xsl:choose> <xsl:when test="@plec='kobieta'"> <table class="kobieta" align="center"> <xsl:call-template name="tabelka"/> </table> </xsl:when> <xsl:when test="@plec='mezczyzna'"> <table class="mezczyzna" align="center"> <xsl:call-template name="tabelka"/> </table> </xsl:when> </xsl:choose> </center> </xsl:for-each> Wioleta Szwoch, KISI ETI PG 40 XSLT - wykorzystanie CSS dokument XML wydobywa dane procesor XSLT Dokument HTML Dokument XSLT Style CSS określa szczegóły prezentacji dokument XML procesor XSLT Dokument CSS HTML Dokument XSLT CSS Wioleta Szwoch, KISI ETI PG 41 Sortowanie • xsl:sort • atrybuty – select • sortowanie odbywa się wg elementu lub atrybutu tu opisanego – order • kierunek sortowania ascending rosnące, descending-malejące – case-order • określa priorytet wielkości liter, (upper-first , lower-first ) – lang – data-type • sortowanie liter lub liczb (text, number) • możliwość wielu kryteriów sortowania Wioleta Szwoch, KISI ETI PG 42 Sortowanie • xsl:sort używamy w połączeniu z – xsl:for-each – xsl:apply-templates • xsl:sort w for-each muszą pojawić się przed wszystkimi innymi elementami • sortowanie w xsl:apply-templates może być ryzykowne <xsl:apply xsl:apply--templates > <xsl:sort select="wezel select="wezel"/> "/> </xsl:apply </ xsl:apply--templates templates> > Wioleta Szwoch, KISI ETI PG 43 Numerowanie • xsl:number • może znajdować się w dowolnym miejscu w szablone lub elemencie xsl:for-each • definiowanie postaci numeru - atrybut format – – – – – – 1 01 a B i .... 1,2,3... 01,02,03,... a,b,c,...z,aa... A,B,C... i,ii,iii,iv,... Wioleta Szwoch, KISI ETI PG 44 Numerowanie • atrybut level – = ”any” • ciągła numeracja elementów niezależnie od ich elementu rodzica – = ”multiple” • numerowanie wielopoziomowe (np. 1.2; 3.2.4, …) • możliwość grupowania numerowania Wioleta Szwoch, KISI ETI PG 45 Zmienne • xsl:variable • definicja zmiennej –<xsl:variable name="NazwaZmiennej">Wartość Zmiennej</xsl:variable> –<xsl:variable name="NazwaZmiennej" select ="’Wartość Zmiennej’"/> • odwołanie do zmiennej –<xsl:value-of select=”$NazwaZmiennej”/> Wioleta Szwoch, KISI ETI PG 46 Zmienne • lokalne <xsl:template name="..."> <xsl:variable name="...">...</xsl:variable> </xsl:template> • globalne <xsl:stylesheet ...> <xsl:variable name="...">...</xsl:variable> ... </xsl: stylesheet > Wioleta Szwoch, KISI ETI PG 47 Zmienne • stałe • ich wartości nie można modyfikować (read only) • zalety zmiennych – ułatwiają czytanie kodu • złożone wyrażenie zapisane jako zmienna • możliwość rozbijania złożonych wyrażeń na części – wielokrotne wykorzystanie • zwiększenie wydajności szczególnie w przypadku skomplikowanych wyrażeń dających w wyniku fragment drzewa – zapisanie wartości węzłów w danej chwili niedostępnych48 Wioleta Szwoch, KISI ETI PG Zmienne • proste – zawierają pojedyncze wartości – używane zwykle do wstawiania tych samych wartości w wielu miejscach dokumentu • złożone – zawierają zbiory węzłów i fragmenty drzewa Wioleta Szwoch, KISI ETI PG 49 Formatowanie liczb • Konwersja wartości liczbowych na łańcuchy format-number(number, format_pattern, dec_format) wartość do sformatowania {prefix}number{.fraction}{suffix} <xsl:decimal-format name="formatname" decimal-separator="" grouping-separator="" infinity="" minus-sign="" NaN="" percent="" per-mille="" zero-digit="" digit="" pattern-separator=""/> Wioleta Szwoch, KISI ETI PG nazwa formatu zdefiniowanego przez użytkownika 50 Zmiana struktury dokumentu wyjściowego • Tworzenie nowych elementów, atrybutów – <xsl:element> – <xsl:attribute> • Kopiowanie elementów z dokumentu źródłowego – <xsl:copy> • kopia bieżącego węzła bez atrybutów i węzłów dzieci – <xsl:copy-of> • kopia bieżącego węzła z węzłami dzieci i atrybutami Wioleta Szwoch, KISI ETI PG 51 <document> ...to a physical condition of a document some portions of the <xsl:template match="paragraph"> text may also be blurred with stains, punch holes, torn out <p> edges, corners and other noise-like effects. ------<paragraph/> In order to tackle these problems </p> in ... may exhibit different degrees of fatigue. </xsl:template> <paragraph/> A set of selected documents may be satisfactory for some of these aspects, and at the same time ... defined quality metrics to measure the indicated document aspects. <paragraph/> <xsl:template A methodology for measuring quality of documents across match="paragraph"> name="p"> DDLC phases is...was used with relative wide<xsl:element band pass. <paragraph/> ------Other issues...can be worked out with the QED tool. </xsl:element> <paragraph/> </xsl:template> Quality improvement that can be really obtained there requires adding to the DDLC... </document> Wioleta Szwoch, KISI ETI PG 52 Tworzenie nowych elementów • tworzenie elementów, znanych dopiero podczas wykonywania arkusza <xsl:template match="……….."> <xsl:element name="{wezel_drzewa_dokumentu}"> ------</xsl:element> </xsl:template> Wioleta Szwoch, KISI ETI PG 53 Wypisywanie tekstu • piszemy tekst • <xsl:text> <xsl:value-of select="nazwisko"> <xsl:text> </xsl:text> <xsl:value-of select="imie"> <xsl:text> </xsl:text> Wioleta Szwoch, KISI ETI PG 54 Podsumowanie XSLT • Język deklaratywny sterowany danymi • Możliwość przetwarzania warunkowego, pętli, parametryzacji, sortowania, numerowania, … • Szablony pokazują jak ma działać transformacja • Struktura – Poprawny plik XML – Elementy pierwszego poziomu i pozostałe • Różnorodne typy dokumentów wyjściowych Wioleta Szwoch, KISI ETI PG 55