1 / 34

Technologie Internetu wykład 10: XSLT, XPointer, XLink Piotr Habela

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;

Download Presentation

Technologie Internetu wykład 10: XSLT, XPointer, XLink Piotr Habela

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Technologie Internetu wykład 10:XSLT, XPointer, XLink Piotr Habela Polsko-Japońska Wyższa Szkoła Technik Komputerowych 1

  2. 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

  3. 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

  4. 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

  5. Język XSL (eXtensible Stylesheet Language) 5

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. Język XPointer 19

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. Język XLink 26

  27. 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

  28. 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

  29. 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

  30. 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

  31. 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

  32. 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

  33. 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

  34. 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

More Related