background image

1

Technologie Internetu

wykład 10: XSLT, XPointer, XLink

Piotr Habela

Polsko-Japońska Wyższa Szkoła

Technik Komputerowych

background image

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.

background image

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.

background image

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.

background image

5

Język XSL (eXtensible Stylesheet 

Language)

background image

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.

background image

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” ?>

background image

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.

background image

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.

background image

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>

background image

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>

background image

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.

background image

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>

background image

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>

background image

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

data-type = { "text" | "number" | Qname }

order = { "ascending" | "descending" }

case-order = { "upper-first" | "lower-first" }  lang = { kod języka } /> 

background image

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;

background image

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"/> 

background image

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>

background image

19

Język XPointer

background image

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

background image

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.

background image

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])))

background image

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.

background image

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

background image

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

background image

26

Język XLink

background image

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.

background image

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])” /> 

background image

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.

background image

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;

showactuate – 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;

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

background image

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.

background image

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.

background image

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.

background image

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.


Document Outline