340 likes | 469 Vues
Technologie Internetu wykład 10: XSLT, XPointer, XLink Piotr Habela Polsko-Japońska Wyższa Szkoła Technik Komputerowych. W poprzednim odcinku…. XML Schema istotnie rozszerza możliwości DTD: Wszelkie ograniczenia z DTD wyrażalne w XML Schema; Znacznie bogatszy i rozszerzalny system typów;
E N D
Technologie Internetu wykład 10:XSLT, XPointer, XLink Piotr Habela Polsko-Japońska Wyższa Szkoła Technik Komputerowych 1
W poprzednim odcinku… • XML Schema istotnie rozszerza możliwości DTD: • Wszelkie ograniczenia z DTD wyrażalne w XML Schema; • Znacznie bogatszy i rozszerzalny system typów; • W połączeniu z ograniczeniami unikalności pozwala to na bardziej precyzyjną kontrolę strukturalnej poprawności dokumentu; • XML Schema jest odrębną specyfikacją; brak zgodności „w dół”; • XPath: • Język deklaratywny służący wskazywaniu elementów, atrybutów, lub całych fragmentów dokumentu XML; • Nie tylko adresowanie konkretnego miejsca: wyrażenia kierunków – osie (axes) oraz predykaty pozwalają selekcjonować pojedynczą ścieżką wiele miejsc, co nawiązuje niejako do funkcjonalności języka zapytań; • Potraktowanie dokumentu jako hierarchii węzłów wnosi pewne ograniczenia. 2
Plan wykładu • XPath – przypomnienie. • XSL (eXtensible Stylesheet Language) - wprowadzenie: • Koncepcja transformacji XSL; • Budowa wzorców XSLT; • Środki programistyczne dostępne w XSLT. • XPointer – rozszerzenie możliwości XPath. • XLink – budowa odnośników pomiędzy zasobami. 3
XPath - przypomnienie • Ścieżka sformułowana w języku XPath: • Opiera się na tzw. osiach (axes): np. child, parent, descentand-or-self itd., pozwalających z dowolnego miejsca dokumentu nawigować do dowolnego innego miejsca; • Każdy krok ścieżki zawęża obszar poszukiwań; • Może być globalna lub względna wobec aktualnego kontekstu; • Dla najważniejszych wyrażeń określono zapis skrócony. • Istnieje możliwość selekcjonowania elementów, atrybutów, instrukcji przetwarzania czy zawartości tekstowej. 4
XSL - charakterystyka • Zakładane przez XML oczyszczenie informacji z zawartości związanej z prezentacją pozostawia otwartym problem wizualizacji takich dokumentów. • W celu realizacji niezbędnych przekształceń powstał język XSL (eXtensible Stylesheet Language). Swego rodzaju protoplastą tego mechanizmu były kaskadowe arkusze stylów (CSS), jednak realizacja języka XSL jest odmienna. • W ramach tego standardu powstały specyfikacje: • XSLT (XSL Transformations); • XSL FO (XSL Formating Objects); • XSLT określany jako język o charakterze deklaratywnym, oparty na regułach przekształceń (rule-based). Język przekształceń drzew XML. 6
Koncepcja języka XSLT • Scenariusze przetwarzania: • zmiana struktury dokumentu XML; • utworzenie arkusza XSLT do przetwarzania innych dokumentów; • obudowanie danych z pliku XML informacjami o sposobie prezentacji. • Przetwarzania dokumentów w oparciu o wzorce służą programy określane jako procesory XSLT. • XSLT – koncepcja realizacji przekształceń: Dokument XML + Dokument XSLT => Dokument wynikowy • Użyteczność tego scenariusza dla wizualizacji dokumentu XML wymaga, aby zawierał on odwołanie do dokumentu XSLT: <?xml version=”1.0” ?><?xml-stylesheet type=”text/xsl” href=”naszArkusz.xsl” ?> 7
Dokument wzorca XSLT • Określa zakresy przeszukiwania; wskazania zawartości do przetworzenia za pomocą XPath. • Definiuje sposób przekształcenia poszczególnych rodzajów wyszukanej zawartości. • Budowa dokumentu: • elementem-korzeniem jest xsl:stylesheet; • przestrzeń nazwowa specyfikacji:xmlns:xsl = ”http://www.w3.org/1999/XSL/Transform”; • budowa znacznika otwierającego: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> • Z kolei element nie prefiksowany przestrzenią xsl jest przekazywany bez interpretacji do dokumentu wyjściowego. Tym sposobem można np. aplikować znaczniki HTML. 8
Element szablonu (xsl:template) • Przekształcenia są aplikowane w oparciu o element xsl:template: • atrybut match tego elementu zawiera wzorzec (pattern) zawartości, która ma być przetwarzana, przedstawiony w języku XPath. • alternatywnie może zostać użyty atrybut name, zawierający dowolną nazwę, służącą do uruchomienia danego szablonu (template) poleceniem xsl:call-template; • wnetrze elementu xsl:template określa sposób przetwarzania: <xsl:template match=”//szukaneElementy”> .. sposób przetwarzania .. </xsl:template> • Często pierwszy element xsl:template odwołuje się do całego dokumentu (tj. używa match=”/”) i zawiera wywołania innych, zdefiniowanych dalej szablonów. 9
Konstruowanie dokumentu wynikowego (1) • Reguły transformacji umożliwiają wstawianie do dokumentu wynikowego wartości z dokumentu źródłowego, wyselekcjonowanej wyrażeniem XPath. • Służy temu element xsl:value-of, z atrybutem select, zawierającym wyrażenie XPath. • Można również wstawiać wyniki obliczeń, tj. rezultaty funkcji wywołanych w kontekście wyrażenia XPath. Np. stosując funkcję count(node-set), zwracamy tu syntetyczne dane w postaci liczby książek ocenionych na 3,5 oraz na 4. <?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match="/"> <p>Review of 3.5 = <xsl:value-of select="count(books/book[review=3.5])"/></p> <p>Review of 4 = <xsl:value-of select="count(books/book[review=4])"/></p> </xsl:template></xsl:stylesheet> 10
Konstruowanie dokumentu wynikowego (2) • Przewidziano możliwość numerowania wyprowadzanych danych: <xsl:number value="position()"/> • Kolejnym kluczowym elementem występującym zwykle wewnątrz głównego wzorca jest zastosowanie wzorców do wyselekcjonowanej zawartości: <xsl:apply-templates /> • Atrybut select określa lokalizacje, do których mają zostać zastosowane zdefiniowane w arkuszu szablony. Brak tego atrybutu spowoduje zastosowanie szablonów do elementów zawartych bezpośrednio w elemencie stanowiącym bieżący kontekst. • Umieszczenie tego polecenia w powyższej postaci (bez atrybutu) we wszystkich wprowadzonych wzorcach pozwala na „bezkontekstowe” przetworzenie zawartości w zależności od rodzaju elementu. • Np. <xsl:template match="tytul"> <p><font face="verdana" color="steelblue" size="3"> <xsl:apply-templates /> </font></p> </xsl:template> 11
Przekazywanie zawartości bez przetwarzania • Chcąc uniknąć przetwarzania zawartości elementów danego rodzaju, możemy zamiast <xsl:apply-templates /> zastosować: <xsl:value-of select=”.” /> celem wyprowadzenia samej (nieprzetworzonej) zawartości (bez znaczników) albo: <xsl:value-of select=”./text()” /> dla zwrócenia tylko bezpośrednio zawartego tekstu. • Efektywnie, obok instrukcji value-of, apply-templates oraz bezpośredniego wpisywania zawartości do wzorca, do budowania zawartości elementu docelowego można użyć jeszcze: • <xsl:copy>- umieszczenie wskazanego elementu w całości w strukturze wynikowej; • <xsl:copy-of>- umieszczenie wskazanego elementu w całości w strukturze wynikowej wraz z jego przodkami i atrybutami. 12
Instrukcja pętli oraz instrukcja warunkowa • Kolejne przetworzenie wszystkich wyselekcjonowanych elementów możemy uzyskać stosując instrukcję <xsl:for-each select=”sciezka” />. Np. <xsl:for-each select="lista/osoba"> … </xsl:for-each> • Umożliwia to przetwarzanie o charakterze proceduralnym, niezbędne w sytuacjach, gdy np. trzeba zreorganizować układ elementów w dokumencie docelowym. • Instrukcja warunkowa xsl:if: jej zawartość jest przetwarzana, jeśli wyrażenie w atrybucie test zwróci: • niepusty zbiór węzłów; • niepusty łańcuch tekstowy; • lub liczbę różną od zera. • Składnia: <xsl:if test=”wyrażenie logiczne”>.. Zawartość warunkowa ..</xsl:if> 13
Instrukcja wielokrotnego wyboru • Uzupełnia funkcjonalność instrukcji if (która nie posiada segmentu else). • Oparta na elemencie xsl:choose. • Układ instrukcji znany z Javy (instrukcja switch): <xsl:choose> <xsl:when test=”warunek”> zawartość jeśli spełniony </xsl:when>… <xsl:otherwise>zawartość gdy żaden z powyższych nie spełniony </xsl:otherwise></xsl:choose> 14
Wstawianie atrybutów oraz sortowanie • Wstawianie atrybutu do elementu wyjściowego: <naszEl> <xsl:attribute name=„nazwaAtr"> <xsl:value-of select="@istniejacyAtr" /> </xsl:attribute> </naszEl> Jeżeli atrybut nie jest wstawiany w oparciu o instrukcję wyboru, można użyć formy skróconej (tzw. attribute template). Np. <img src="{@lokalizacjaPliku}" /> Ponadto można konstruować elementy <xsl:element>, komentarze <xsl:comment> oraz instrukcje przetwarzania <xsl:processing-instruction> • Sortowanie zawartości: • realizowane przy zastosowaniu elementu xsl:sort; • element ten może się pojawić wyłącznie w ciele elementu apply-templates albo wewnątrz instrukcji xsl:for-each. • Posiada następującą deklarację, przy czym domyślnym typem danych dla sortowania jest text: <xsl:sort select = wyrażenie-stringdata-type = { "text" | "number" | Qname }order = { "ascending" | "descending" }case-order = { "upper-first" | "lower-first" }lang = { kod języka }/> 15
Zmienne w XSLT • Zmienne deklaruje się przy użyciu elementu xsl:variable: <xsl:variable name = ”nazwa” select =”wyrażenie” </xsl:variable> • Użyteczne dla wprowadzania powtarzających się danych oraz dla zapamiętania określonego kontekstu. • Mogą przechowywać zbiór węzłów albo łańcuch tekstowy. • Odwołania do tak zadeklarowanych zmiennych w innych wyrażeniach select: poprzez poprzedzenie nazwy zmiennej symbolem dolara „$”. • Zmenna może być globalna (zadeklarowana ponad deklaracjami szablonów) albo lokalna (zadeklarowana wewnątrz danego szablonu). • Podobne właściwości posiadają parametry: <xsl:param>: • Ograniczenia na miejsce występowania; • instrukcje xsl:apply-templates oraz xsl:call-template mogą przekazywać wartości do wzorców; 16
Wołanie funkcji ze skryptów • Rozszerzenie dostarczane przez Microsoft umożliwia wołanie funkcji napisanych w VBScript lub JavaScript; • Deklaracja funkcji wymaga zadeklarowania odpowiedniej przestrzeni nazwowej: <?xml version="1.0" ?><xsl:stylesheet xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:naszeFunkcje="http://firma.com/przestrzenNazw" version= "1.0"> • Deklaracja funkcji: <msxsl:script language="VBScript" implements-prefix=„naszeFunkcje"><![CDATA[tutaj kod funkcji ]]> </msxsl:script> • Wołanie funkcji: <xsl:value-of select=„naszeFunkcje:xyz"/> 17
Wołanie nazwanych szablonów • Szablony nazwane wraz z obsługą parametrów dostarczają udogodnień programowania proceduralnego: • Można zdefiniować nazwany szablon wraz z oczekiwanymi przezeń parametrami: <xsl:template name="formatowanieZawartosci"> <xsl:param name="naszParametr"/>Budowa struktury wynikowej w oparciu o $naszParametr… </xsl:template> • Następnie wywołujemy wzorzec w odpowiednim kontekście, przekazując parametry: <xsl:for-each select="/naszDok/naszElement"> <xsl:call-template name="formatowanieZawartosci"> <xsl:with-param name="naszParametr" select="./*"/> </xsl:call-template></xsl:for-each> 18
Język XPointer • Stanowi rozszerzenie języka XPath. • Uzupełnia system adresów URI używanych w XLink (zob. dalej). • Pozwala oznaczać i wskazywać fragmenty dokumentów XML. • Może traktować dokument zarówno jako drzewo węzłów (jak XPath), lub jako ciąg znaków (w treści elementów), pozwalając wskazywać jego podciągi. • Wprowadza dwa specjalne typy wskaźników: • punkt (point) w dokumencie XML; • zakres (range) pomiędzy punktami końcowymi (mogącymi się znajdować w różnych elementach); • Rozróżnia się także (używając środków XPath) węzły (node) i elementy (element). 20
Wskazania elementów dokumentu XML • Odwołanie za pomocą identyfikatora: jeśli określony element posiada atrybut typu ID, to można się doń odwołać poprzez wartość tego identyfikatora: xpointer(id(”a1234”)) albo z zewnątrz, następująco konstruując URI: http://firma.com/dokument.xml#a1234 • Obok tradycyjnego wskazywania poprzez nazwę, stosuje się skróty XPath – tzw. sekwencję dzieci (child sequence). • Każdy krok ścieżki oznacza tu zejście o jeden poziom w hierarchii węzłów i wybranie na danym poziomie n-tego kolejnego podelementu. • Np. xpointer(/*[1]/*[3]/*[2]) oznacza wybranie z elementu-korzenia trzeciego z jego elementów potomnych, z tego zaś drugiego z kolei jego elementu potomnego. 21
Pojęcie punktu i zakresu w XPointer • XPointer wprowadza pojęcie punktu (point): • Punkt początkowy (danego elementu) umiejscowiony jest tuż po znaczniku początkowym: xpointer(start-point(//sprawozdanie)) • Z kolei jeśli chcemy wskazać początek całego dokumentu: xpointer(start-point(/)) • Analogicznie, funkcja end-point(ścieżka) wskazuje na punkt końcowy, tj. miejsce tuż przed znacznikiem końcowym danego elementu; • Zakres w oparciu o wytyczające go elementy: xpointer(range(//uczelnia/wydzial[1])) -> obejmuje fragment (lub fragmenty) dokumentu włącznie ze znacznikami wyznaczającymi podane elementy. • Punkty można wyznaczać też w oparciu o zakres: xpointer(start-point(range(//uczelnia/wydzial[1]))) 22
Zakresy w oparciu o zadany ciąg znaków • Funkcja o sygnaturze:string-range(location-set, string, number?, number?) • Drugi z argumentów stanowi wzorzec wyszukiwania. • Np. xpointer(string-range(//sprawozdanie/zakup,”oprogr”)) • Opcjonalne parametry liczbowe określają pierwszy znak zakresu (względem miejsca odnalezienia wzorca) oraz długość zakresu (domyślnie jest to długość wzorca). • Interesującą właściwością jest to, że dla spójnego zbioru miejsc przeszukiwana zawartość tekstowa traktowana jest jako ciągła, tj. z pominięciem znaczników. 23
Zakres poprzez podanie miejsc początku i końca • Wykonana w odpowiednim kontekście funkcja range-to(location-set) zwróci zakres rozciągający się od kontekstu jej wywołania do podanej jako parametr lokalizacji. • Np. xpointer(id( ”sprawozd03”)/range-to(id(”sprawozd08”))) • Wariantem tej funkcji jest range-inside(location-set).Różni się ona wykluczeniem z wynikowego zakresu wyznaczających jego granice miejsc. • Wszystkie wspomniane tu funkcje zwracają rezultat typu „zbiór miejsc” (location-set). 24
Wskazania względne • Funkcja here() pozwala na budowanie wskazań względnych. Zwraca ona element, w którym umieszczono dane wyrażenie XPointer. • Np. xpointer(here()/../following::zamowienie[1]) umieszczone w podelemencie elementu „zamowienie”, wskaże na następny element „zamowienie”. 25
Język XLink 26
XLink - charakterystyka • XLink (XML Linking Language) rozszerza koncepcję odsyłaczy HTML. Zastosowanie języka: łączenie dowolnych zasobów sieci Internet. • Samodzielna specyfikacja (tj. nie objęta XML v. 1.0). Wymaga zatem zadeklarowania przestrzeni nazwowej: http://www.w3.org/1999/xlink, opatrywanej zwykle słowem kluczowym xlink. • Pokonuje następujące ograniczenia odsyłaczy HTML: • brak możliwości oznaczenia charakteru odnośnika; • mają charakter binarny (łączą jedynie pary dokumentów: źródłowy i docelowy); • są zawarte w dokumencie źródłowym (nie mogą być przechowywane zewnętrznie); • problemem jest aktualizacja; • mogą wskazywać dokumenty lub punkty w dokumentach, ale nie np. elementy dokumentu XML. 27
Odsyłacze proste XLink • Rozszerzenie odsyłaczy języka HTML; • Podobnie jak one, są osadzane w dokumencie źródłowym; • Punkt docelowy opisywany poprzez adres URI; • Wyróżniane atrybutem xlink:type=”simple”; np. <odsylacz xlink:href =”http://www.firma.com/dokument.htm” xlink:type=”simple”> • Możliwość wskazywania konkretnych elementów dokumentu XML (lokalnego lub zewnętrznego): • przy użyciu wartości jego identyfikatora: do URI dołączamy ”#wartoscIdentyfikatora”, tj. np. xlink:href=”#rozdzial_1”; • bez użycia identyfikatora: korzystając ze środków języka XPath, ew. XPointer; np. <odsylacz xmlns:xlink= ”http://www.w3c.org/2000/xlink” xlink:type=”simple” xlink:href=”http://firma.com/dokument.xml#xpointer(//sprawozdanie/zamowienia[4])” /> 28
Odsyłacze rozszerzone (extended) i ich składowe • Wielokierunkowość – poprzez możliwość przechowywania odesłań do wielu miejsc; • Możliwość określania ról poszczególnych powiązań odsyłacza; • Wyróżniane atrybutem xlink:type=”complex”; • Dostępne są następujące podelementy: • Wskaźnik (locator), określający lokację zewnętrznych (w stosunku do samego odsyłacza a niekoniecznie do dokumentu) zasobów; • Zasób (resource), określający lokalne zasoby. Musi zawierać w sobie inne elementy XML, stanowiące opisywany przezeń zasób. • Łuk (arc), określający połączenia nawigacyjne pomiędzy zasobami; • Tytuł (title), określający czytelną dla człowieka nazwę. • Powyższe podelementy mogą występować samodzielnie albo wewnątrz odsyłacza complex. 29
Atrybuty opisujące odsyłacze • type – określa typ odsyłacza; • href – identyfikuje zasób wskazywany przez odsyłacz. Może to być adres względny lub bezwzględny. • role – podaje URI zawierający opis roli zasobu wskazywanego przez dany odsyłacz; • arcrole – podaje URI zawierający opis roli samego łuku łączącego zasoby; • show, actuate – sposób prezentacji i przetwarzania połączonych zasobów; • label – deklaruje etykietę, która może zostać wykorzystana przy definiowaniu połączeń pomiędzy zasobami; • from, to – służą definiowaniu powiązań pomiędzy elementami w oparciu o ich etykiety; • title – czytelna dla człowieka nazwa odnośnika podana w postaci atrybutu. Jak wspomniano wyżej, title może być również podawany jako podelement. Ta nadmiarowość została wprowadzona z myślą o umożliwieniu umieszczania wielu tytułów (np. w różnych wersjach językowych) dla danego odnośnika. 30
Określanie przejść pomiędzy zasobami • Wskazywane przez odnośnik (resource lub locator) mogą być łączone łukami (arc), określającymi przewidziane przejścia nawigacyjne pomiędzy elementami; • W tym celu odnośniki opatruje się wartościami atrybutu etykiety (label). • W przeciwieństwie do identyfikatorów elementów, taka konstrukcja umożliwia zdefiniowanie przejść pomiędzy wieloma parami elementów za pomocą deklaracji jednego łuku (np. rozdział-> spis treści). • Pominięcie elementu to i / lub from powoduje dalsze rozszerzenie deklaracji łuku na odpowiednio połączenia do wszystkich i / lub od wszystkich zdefiniowanych odsyłaczami zasobów. • Przypomnijmy: rola samego łuku może być opisana poprzez lokalizację podaną atrybutem xlink:arcrole. Pozwala to niejako określić klasę danego łuku i wykorzystać tę informację do grupowania przy prezentacji zasobów. 31
Odsyłacze rozszerzone • Identyfikowane typem: xlink:type=”extended”; • Mogą zawierać wewnątrz odsyłacze zasobów (resource), odnośniki (locator), łuki (arc). • Tworzą bazę odsyłaczy, umieszczaną zwykle w odrębnym pliku. • W ramach odsyłaczy rozszerzonych łuki mogą łączyć jedynie lokalnie zdefiniowane zasoby. • Zewnętrzne bazy odsyłaczy • określane jako out-of-line links, w przeciwieństwie do tradycyjnych odsyłaczy zwanych inline links; • koncepcja redukuje problem aktualizacji odsyłaczy: zestawienia odnośników na dany temat mogą zostać „wyciągnięte przed nawias” i przechowywane w jednym miejscu. 32
Określanie sposobu zachowania się odsyłaczy • Atrybut show określa sposób wyświetlania wskazywanego zasobu: • new: w nowym oknie/ramce; • replace: zastąpienie aktualnie prezentowanej treści; • embed: wstawienie treści odsyłacza w dokument; • other: informacja o sposobie wyświetlania umieszczona gdzie indziej; • none: brak informacji o sposobie wyświetlania. • Atrybut actuate określa sposób aktywowania formularza: • onLoad – przy ładowaniu dokumentu źródłowego; • onRequest – w przypadku wybrania przez użytkownika; • other – sposób aktywacji określony w innym miejscu; • none – sposób aktywacji nie został określony. 33
Deklarowanie odsyłaczy wbudowanych w dokument • Jeśli definiujemy typ dokumentu, to umieszczane w nim odsyłacze (jako określonego rodzaju elementy z właściwymi im atrybutami) należy uwzględnić w stosownym DTD, jeśli jest stosowany. • Atrybuty odsyłaczy definiujemy w DTD jako wartości typu CDATA. • Przewidziane specyfikacją wartości atrybutów show oraz actuate można podać jako wyliczenie. • Można nałożyć dodatkowe ograniczenia, jeśli np. nie przewidujemy wykorzystywania jakiejś właściwości XLink w dokumencie. 34