10 XSLTid 11208 ppt

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;

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.

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


Wyszukiwarka

Podobne podstrony:
10 dźwigniaid 10541 ppt
10 4id 10454 ppt
10 integracjaid 11290 ppt
10 mnoznikid 10954 ppt
10 Neuroradiologiaid 10583 ppt
10 ROZSTĘPYid 10627 ppt
10 23id 10410 ppt
10 mostid 10959 ppt
10 spekulacjeid 10632 ppt
10 Białkaid 11285 ppt
Prez 10 08 00 ppt
10 Histeroskopiaid 10552 ppt
10 energiaid 11288 ppt
PRO LAT31 10 03 09A ppt
10 Successio testamentaria ppt
10 6id 10464 ppt

więcej podobnych podstron