XSLT Dariusz Dudek
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
Cechy XML a Rozszerzalny język znaczników Stworzony do przechowywania danych Opisuje strukturę i semantykę danych Nie definiuje sposobu prezentacji danych - oddziela logikę od prezentacji Prezentacja wymaga dodatkowych mechanizmów
Arkusze stylów Określają sposób prezentowanie dokumentów XML owych Najpopularniejsze arkusze stylów Kaskadowe arkusz stylów CSS Arkusze XSL
Arkusze CSS Stworzone z myślą o HTML u Pozwalają na formatowanie HTML Umożliwiają transformacje XML a w HTML Stosunkowo proste w tworzeniu
Arkusze XSL Opracowane dla XML a Umożliwiają transformację w HTML TXT i XML Pozwalają na zmianę struktury dokumentu, filtrowanie elementów, sortowanie Skomplikowane w tworzeniu
Przykład XML <ksiazki> <ksiazka> <autor> <imie> Adam </imie> <nazwisko> Mickiewicz </nazwisko> </autor> <tytul> Pan Tadeusz </tytul> <rok-wydania> 1980 </rok-wydania> </ksiazka> <ksiazki>
Przykład CSS autor{display:block; font-size:14pt; color:red} tytul{display:block; font-size:14pt; color:green} rok-wydania{display:block; font-size:12pt; color:blue}
Przykład CSS
Proste XSLT <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/tra nsform" version="1.0"> </xsl:stylesheet>
Proste XSLT
XSLT Język określający sposób transformacji dokumentów XML Jest językiem deklaratywnym opisuje co a nie jak ma być zrobione Dokument XML ma strukturę drzewa transformacja tworzy nowe drzewo XSLT stosuje szablony do elementów drzewa pasujących do zadanych wzorców
XSLT To także dokument XML Musi być well-formed Najczęstsze błędy wynikają właśnie ze złego formatowania
XSL XSLT jest częścią szerszej specyfikacji XSL, stanowiącej zbiór zaleceń związanych z prezentacją i formatowaniem dokumentów XML. Na XSL składa się: XLST język transformacji XML Path język umożliwiający nawigację w drzewie XML XML FO język określający formatowanie dokumentu
Schemat działania procesorów XSL Procesor odczytuje plik XML i stosuje do niego transformatę XSLT generując nowy dokument
Procesory XSL Xalan Saxon MSXML wykorzystywany w IE TransforMiix wykorzystywany w Mozilla/Firefox Netscape Comunicator Uruchamiane zazwyczaj z linii poleceń
XML Path Umożliwia poruszanie się po drzewie XML Pozwala na wybranie elementów, które mają zostać przetworzone a także warunków jakie muszą spełniać Wyszukiwanie następuje poprzez dopasowanie wzorca
XML Path Ścieżka wyrażenie pozwalające odwołać się do poszczególnych węzłów drzewa Syntaktyka analogiczna do systemu plików Unix/Linux /ksiazki/ksiazka/autor/
XML Path Wyrażenia ciąg znaków przetwarzany przez procesor XSLT w celu uzyskania wyniku Wynikiem może być node-set boolean number string
Rodzaje węzłów Węzeł główny / - reprezentuje cały dokument Węzły elementów /książki elementy ograniczone znacznikami Węzły atrybutów Węzły przetwarzania poleceń Węzły komentarza Węzły tekstowe Węzły przestrzeni nazw
Adresowanie Bezwzględne zaczyna się od / Względne w odniesieniu do przetwarzanego elementu self -. - bieżący węzeł parent.. węzeł nadrzędny child węzęł podrzędny descendant-or-self - // wszystkie węzły podrzędne
Adresowanie Adresować można: elementy atrybuty zawartość znaczników komentarze
Dostępne funkcje Procesor XSLT zawiera implementację standardowych funkcji (core functions) string name(node-set?) boolean contains(string, string) number count(node-set) number string-length(string string?) i wiele innych
XSLT Podstawowe konstrukcje języka xsl:stylesheet xsl:template xsl:aply-templates xsl:for-each xsl:if xsl:chose xsl:sort xsl:element xsl:output xsl:number xsl:element
xsl:stylesheet Deklaruje wersję i przestrzeń nazw <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform " version="1.0"> </xsl:stylesheet> <xsl:transform xmlns:xsl="http://www.w3.org/1999/xsl/transform " version="1.0"> </xsl:transform>
xsl:template Definiuje reguły które będą zastosowane w momencie znalezienia węzła <xsl:template match="/ksiazki"> <html> <head> <title></title> </head> <p><xsl:value-of select="ksiazka/autor/imie"/></p> </html> </xsl:template>
xsl:template
xsl:aply-templates Powoduje rekursywne przetwarzanie potomków danego węzła <xsl:template match="/ksiazki"> <html> <head> <title></title> </head> <p><xsl:apply-templates select="ksiazka/autor/imie"/></p> </html> </xsl:template>
xsl:aply-templates
xsl:for-each <xsl:for-each select = wyrażenie którego wynik to zbiór węzłów /> Stosuje szablon do każdego węzła ze zbioru
xsl:for-each <xsl:template match="/ksiazki"> <html> <head><title></title></head> <table> <xsl:for-each select="ksiazka/autor"> <tr ><td bgcolor="yellow"><xsl:value-of select="imie"/></td> <td><xsl:value-of select="nazwisko"/></td></tr> </xsl:for-each> </table> </html> </xsl:template>
xsl:for-each
xsl:if <xsl:if test = wyrażenie /> Realizuje instrukcje warunkową szablon jest aplikowany tylko gdy spełniony zostanie warunek Nie istnieje else
xsl:if <xsl:template match="ksiazka"> <xsl:if test="rok-wydania > 1989"> <xsl:apply-templates select="rok- wydania"/> <br></br> </xsl:if> </xsl:template>
xsl:if
xsl:choose <xsl:choose> <xsl:when test = wyrażenie logiczne > </xsl:when>... <xsl:otherwise /> </xsl:choose> Funkcjonalność switcha Nakładany jest szablon dla którego spełniony jest warunek Jeśli żaden warunek nie jest spełniony to implikowany jest szablon z otherwise
xsl:choose <xsl:template match="ksiazka"> <table> <xsl:choose> <xsl:when test="rok-wydania > 1989"> <tr bgcolor="yellow"><xsl:apply-templates select="rok- wydania"/></tr> </xsl:when> <xsl:otherwise> <tr bgcolor="brown"><xsl:apply-templates select="rok- wydania"/></tr> </xsl:otherwise> </xsl:choose> </table> </xsl:template>
xsl:choose
xsl:sort <xsl:sort select = string-expression lang = { nmtoken } data-type = { "text" "number" } order = { "ascending" "descending" } case-order = { "upper-first" "lower-first" } /> Umożliwia sortowanie listy według zadancych kryteriów
xsl:sort <xsl:template match="ksiazki"> <table> <xsl:apply-templates select="ksiazka"> <xsl:sort select="autor/nazwisko"/> <xsl:sort select="autor/imie"/> </xsl:apply-templates> </table> </xsl:template> <xsl:template match="ksiazka"> <tr><td><xsl:value-of select="autor/nazwisko"/></td> <td><xsl:value-of select="autor/imie"/></td></tr> </xsl:template>
xsl:sort
xml:output <xsl:output method = "xml" "html" "text" version = nmtoken encoding = string omit-xml-declaration = "yes" "no" standalone = "yes" "no" doctype-public = string doctype-system = string cdata-section-elements = qnames indent = "yes" "no" media-type = string /> Określa docelowy format dokumentu XML
xsl:number <xsl:number level = "single" "multiple" "any" count = pattern from = pattern value = number-expression format = { string } lang = { nmtoken } letter-value = { "alphabetic" "traditional" } grouping-separator = { char } grouping-size = { number } />
xsl:number format implikuje numerowanie 1 1, 2, 3 01 01, 02, 03 A A, B, C a a, b, c i i, ii, iii, iv I I, II, III
xsl:number <xsl:template match="ksiazka"> <table> <tr> <td><xsl:number level="any"/> <xsl:apply-templates select="autor/nazwisko"/></td> <td><xsl:apply-templates select="autor/imie"/></td> </tr> </table> </xsl:template>
xsl:number
xsl:import xsl:include Umożliwiają włączenie innych arkuszy <xsl:include href = uri-reference /> Może wystąpić tylko w głównym elemencie <xsl:import href = uri-reference /> Może wystąpić w dowolnym miejscu po ostatnim xsl:include
xsl:element <xsl:element name = { qname } namespace = { uri-reference } use-attribute-sets = qnames> </xsl:element> Pozwala na dodanie nowego elementu
xsl:element <xsl:template match="ksiazka"> <table> <tr><xsl:apply-templates select="autor/imie"/></tr> <tr><xsl:apply-templates select="autor/nazwisko"/></tr> <tr><xsl:element name="rok- urodzenia">1900</xsl:element></tr> </table> </xsl:template>
xsl:element
Narzędzia Altova XMLSPY Oxygen Funkcjonują jako samobieżki oraz pluginy do Eclipse a
Podsumowanie XSLT pozwala na transformacje w HTML XML i TEXT XML Path określa które elementy będą transformowane, szablon definiuje sposób transformacji Transformacja XML->XML to wygodne rozwiązanie dla biznesu Możliwe reorganizację dokumentu Filtrowanie zawartości Łączenie kilku dokumentów
Podsumowanie Wada - w przypadku gdy chcemy odfiltrować tylko kilka znaczników musimy się napisać
Literatura www.w3.org/style/xsl www.w3.org/tr/xslt www.w3.org/tr/xpath Poznaj XSLT Michael Floyd www.google.pl