Bazy danych XML
Wydział Informatyki EWSIE
Wykład: Bazy danych II – XSL
XSL - eXtensible Stylesheet
Language
• XSL – aplikacja XML, została podzielona na dwie części:
– XSL Transformations, w skrócie XSLT oraz
– XSL Formatting Objects, w skrócie XSL-FO.
• XLST jest funkcjonalnym językiem programowania
(realizowanym przez procesor XSLT), używanym do
określenia sposobu, w jaki wejściowy dokument XML jest
konwertowany na dokument tekstowy (niekoniecznie
będący innym dokumentem XML) w oparciu o arkusz
styli będący dokumentem XML.
• Można przyjąć, że XSL-FO jest odpowiednikiem XSLT, z tą
jednak różnicą, że konwertowany dokument wejściowy,
daje na wyjściu dokument klasy DOM (Dokument Object
Model).
• Pomocniczymi rozwiązaniami dla XSL, są: XPath, XLinks
oraz XPointer. Ten ostatni, nie jest aplikacją XML.
XSL Transformations
• XSLT jest aplikacją XML określającą reguły, w
oparciu o które realizowana jest transformacja
dokumentu XML w inny dokument.
• XSLT posługuje się w procesie transformacji
dokumentu XML – szablonem lub szablonami
transformacji napisanymi w języku XSL.
• Procesor XSLT porównuje elementy zawarte w
wejściowym dokumencie XML z szablonami w
arkuszach stylów, a kiedy znajdzie odpowiedni
szablon do czytanego elementu wejściowego,
tworzy na podstawie dokumentu wejściowego,
korzystając z dobranego szablonu – odpowiedni
tekst wynikowy, który nie musi być dokumentem
XML.
Arkusz styli XSLT
• Arkusz styli XSLT jest dokumentem XML. Może posiadać
deklarację typu dokumentu, ale większość arkuszy styli
deklaracji typu dokumentu nie posiada.
• Elementem bazowym arkusza styli jest stylesheet albo
transform. Są to synonimy i dla procesora XSLT niema
pomiędzy nimi żadnej różnicy.
• Elementy stylesheet i transform, podobnie jak wszystkie
elementy XSLT, znajdują się w przestrzeni nazw
http://www.w3.org/XSL/Transform
.
• Minimalny arkusz styli ma postać:
<?xml version=”1.0”?>
<xsl:stylesheet version=”1.0” xmlns:xsl=
http://www.w3.org/1999/XSL/Transform
>
<xsl:template match=”person”>A
Person</xsl:template>
</xsl:stylesheet>
Przykład dokumentów XML
<?xml version=”1.0”?>
<people>
<person born=”1912” died=”1954”>
<name>
<first_name>Alan</first_name>
<last_name>Turing</last_name>
</name>
<profession> informatyk</profession>
<profession>matematyk </profession>
<profession> kryptograf</profession>
</person>
<person born=”1918” died=”1988”>
<name>
<first_name>Richard</first_name>
<middle_initial>M</middle_initial>
<last_name>Feyname</last_name>
</name>
<profession>fizyk</profession>
<hobby>gra na bongo</hobby>
</person>
</people>
Przykład wyniku
<?xml version=”1.0” encoding=”utf-8”?>
A Person
A Person
Polecenie przetwarzania
• Dokumenty XML, które będą przekazywane
przeglądarkom WWW bezpośrednio, mogą
posiadać w swoim prologu polecenie
przetwarzania xml-stylesheet, informujące
przeglądarkę, gdzie ma szukać arkusza styli
skojarzonego z dokumentem.
• Jeżeli arkusz styli jest arkuszem XSLT, wtedy
pseudo-atrybut type powinien mieć wartość
text/xml.
• Przykład:
<?xml version=”1.0” ?>
<?xml-stylsheet type=”text/xml” href=
www.oreilly.com/stylesheet/people.xsl
”?>
XSL - eXtensible Style Sheet
Language
• XSL jest rozszerzalnym językiem stylów, aplikacją
języka XML, przeznaczonym do transformacji
dokumentów XML do innej postaci.
• Język XML wykorzystuje procesor XSLT do wykonywania
transformacji i formatowania. Wynikiem transformacji,
może być zwykły tekst, XHTML, lub wyrażenia w innym
języku formalnym.
• Specyfikacja dla XSLT to język do tworzenia arkuszy
stylów, mających postać dokumentów XML. Bogactwo
możliwości arkuszy stylów pisanych w XSL – znacznie
przekracza możliwości oferowane przez CSS2.
• Język XSL operuje wieloma typami obiektów
formatujących, tzw. szablonów, które znaleźć można w
obszarze nazwy „fo”.
Szablony
• Aby móc kontrolować sposób, w jaki z dokumentu
wejściowego tworzony jest dokument wyjściowy,
umieszczamy w arkuszu stylów XSLT szablony.
• Każdy szablon reprezentuje element xsl:template.
• Element ten posiada atrybut match, który zawiera
wzorzec XPath identyfikujący dokument wejściowy,
któremu odpowiada. Najprostrzym wzorcem jest
nazwa elementu.
• Poniższy szablon poleca, aby procesor w oparciu o
arkusz styli emitował tekst „A Person”, za każdym
razem kiedy napotka element person w dokumencie
wejściowym:
<xsl:template match=”person”>A
Person</xsl:template>
• Tekst „A Person” jest nazywany znakami danych
literowych, czyli zwykłym tekstem
xsl:value-of
• Opcja wylicza wartość elementu wejściowego i
umieszcza wynik w dokumencie wyjściowym.
• Przykład arkusza styli wykorzystującego
xml:value-of:
<?xml version=”1.0”?>
<xsl:stylesheet version=”1.0”
xmlns:xsl=”html://www.w3.org/1999/XSL/Transform”>
<xsl:temlate match=”person”>
<xsl:value-of select=”name”/>
</xsl:temlate>
</xsl:stylesheet>
• Zastosowanie powyższego arkusza styli do
przykładu XML da w wyniku:
Alan
Turing
Richard
M
Feynman
xsl:apply-templates
• xsl:apply-temlates może zmieniać kolejność czytania
dokumentu wejściowego przez procesor XSLT, czyli
aktywować szablon elementów potomnych przed
szablonem elementu rodzicielskiego.
• Przypuśćmy, że chcemy zmienić kolejność
wyprowadzania danych (np. nazwisk i imion) w
stosunku do kolejności występowania tych danych w
dokumencie wejściowym.
• Przykład szablonu (fragment arkusza styli)
zmieniający kolejność:
<xsl:template mach=”name”>
<xsl:value-of select=”last_name”/>
<xsl:value-of select=”first_name”/>
</xsl-template>
<xsl-template match=”person”>
<xsl:apply-templates select=”name”/>
</xsl-template>
Wbudowane reguły szablonów
•
W dokumencie XML występuje siedem rodzajów
węzłów:
– Węzeł bazowy,
– Węzły elementów,
– Węzły atrybutów,
– Węzły tekstu,
– Węzły komentarzy,
– Węzły poleceń przetwarzania,
– Węzły przestrzeni nazw.
•
Dla każdego z tych siedmiu typów węzłów XSLT
oferuje wbudowane reguły szablonów informujące,
co należy zrobić z danym węzłem w przypadku, gdy
autor arkusza styli nie napisał instrukcji
postępowania dla danego przypadku.
Domyślna reguła szablonów
dla węzłów tekstu i atrybutów
• Podstawowa wbudowana reguła szablonów
kopiuje do dokumentu wyjściowego wartości
węzłów tekstu i atrybutów.
<xsl:template match=”text() | @*”>
<xsl:value-of select=” . ”/>
</xsl:template>
• Funkcja text() jest wyrażeniem XPath,
dopasowującym do wszystkich węzłów tekstu.
• Natomiast @* jest wyrażeniem XPath,
dopasowującym do wszystkich węzłów atrybutu.
Domyślna reguła szablonów
dla węzłów elementów i elementu
bazowego
• Najważniejsza reguła szablonów gwarantuje
przetwarzania elementów potomnych. Jest ona
następująca:
<xsl:temlate match=”*|/”>
<xsl:apply-templates/>
</xsl:template>
• Gwiazdka jest wieloznacznym wyrażeniem XPath,
które dopasowuje wszystkie węzły elementów,
niezależnie od tego, jaką mają nazwę i w jakiej
przestrzeni nazw się znajdują.
• Ukośnik prawy / jest wyrażeniem XPath, które
dopasowuje węzeł bazowy. Węzeł bazowy jest
pierwszym węzłem jaki jest wybierany do
przetwarzania przez procesor; dlatego procesor
wykonuje ten szablon jako pierwszy.
Domyślny szablon
dla węzłów komentarzy i poleceń
przetwarzania
• Domyślna reguła szablonu dla komentarzy i
poleceń przetwarzania wygląda następująco:
<xsl:template match=”processing-instruction() |
comment()”>
• Ta reguła dopasowuje wszystkie komentarze i
polecenia przetwarzania. Jednak nie wyprowadza
ona niczego do drzewa wynikowego.
• Jeśli nie wprowadzimy specjalnych reguł
dopasowujących komentarze lub polecenia
przetwarzania, żadna część tych pozycji nie
zostanie skopiowana z dokumentu wejściowego
do dokumentu wyjściowego.
Domyślny szablon
dla węzłów przestrzeni nazw
•
Podobnie do opisanej wcześniej reguła szablonu
dopasowuje węzły przestrzeni nazw i poleca
procesorowi, aby nie kopiował do dokumentu
wyjściowego żadnej części węzła przestrzeni nazw.
•
Ta reguła, jest wbudowana i musi być
imlementowana w kodzie źródłowym procesora
XSLT; nie może być nawet zapisana w arkuszu styli
XSLT, ponieważ nie ma czegoś takiego, jak
wyrażenie XPath dopasowujące węzeł przestrzeni
nazw.
•
Oznacza to, że w XPath nie istnieje funkcja
namespace().
•
XSLT automatycznie wstawia niezbędne deklaracje
przestrzeni nazw w dokumencie wyjściowym, nie
korzystając z pomocy szablonów przestrzeni nazw.
Tryby
•
Czasami koniecznym jest, aby ta sama zawartość wejściowa
występowała w dokumencie wyjściowym wielokrotnie i za
każdym razem żeby była formatowana zgodnie z innym
szablonem. Na przykład tytuły rozdziałów książki mogą być
formatowane w spisie treści w jeden sposób, a w rozdziałach
w inny.
•
Zarówno element xsl:apply-templates, jak i xsl:template
mogą mieć opcjonalnie atrybut mode, który łączy różne
szablony w poszczególnych zastosowaniach.
•
Atrybut mode elementu xsl:temlate identyfikuje tryb w jakim
szablon powinien być aktywizowany.
•
W przypadku każdego trybu wykorzystywanego w danym
arkuszu styli – procesor XSLT dodaje do każdego własnego
zbioru wbudowanych reguł jedną domyślną regułę szablonów.
Ta reguła dotyczy wszystkich węzłów elementów oraz węzła
bazowego położonego w określonym węźle i stosuje szablony
wobec swych potomków, w takim samym trybie.
Szablony wartości atrybutów
• Znane wartości atrybutów można łatwo dołączyć do
dokumentu wejściowego jako literową zawartość
literowego elementu wynikowego. Przykładowo,
poniższa reguła szablonu umieszcza każdy wejściowy
element person w elemencie HTML span, który ma
atrybut class o wartości person:
<xsl:template match=”person”>
<span class=”person”><xsl:apply-
templates/></span>
</xsl:template>
• Proces ten jest jednak bardziej skomplikowany, gdyż
wartości atrybutów nie są znane i wobec tego muszą
być odczytane z dokumentu wejściowego. Rozwiązanie
tego problemu polega na użyciu tzw. szablonu wartości
atrybutów
Szablony wartości atrybutów
• Przypuśćmy np., że chcemy napisać szablon nazw
zmieniający wejściowe elementy name na puste
elementy z atrybutami first_name, middele_initial i
last_name, jak poniżej:
<name first=”Richard” initial=”M” last=”Feyneman”/>
• Szablon ten realizuje następujące zadanie:
<xsl:template match=”name”>
<name first=”(first_name)” initial=”(middle_initial)”
last=”(last_name)” />
</xsl:template>
• Wartość atrybutu first jest zastępowana w arkuszu styli
wartością elementu first_name z dokumentu
wejściowego, itd.
XSLT i przestrzenie nazw
• Wyrażenia XPath, które dopasowują i wybierają
elementy, identyfikują je w oparciu o ich nazwę
lokalną oraz identyfikator URI przestrzeni nazw. Nie
zwracają uwagi na przedrostek przestrzeni nazw.
• Najczęściej przedrostek tej samej przestrzeni nazw
jest odwzorowany na taki sam URI.
• Z wyjątkiem szablonów wbudowanych, żaden z
omawianych dotychczas szablonów nie będzie
działał.
• Rozważmy przykład, gdzie wszystkie definicje
elementów są umieszczone w domyślnej przestrzeni
nazw:
http://namespaces.oreilly.com/people
Arkusz styli XSLT dla
dokumentów korzystających z
przestrzeni nazw
<?xml version=”1.0”?>
<xsl:stylesheet version=”1.0”
xmlns:xsl=”http//www.w3.org/1999/XSL/Transform”
xmlns:pe=”
http://namespaces.oreilly.com/people
”>
<xsl:template match=”pe:people”>
<html>
<head><title>Znani naukowcy</title></head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match=”pe:name”>
<p><xsl:value-of select=”pe:last_name”/>
<xsl:value-of select=”pe:first_name”/></p>
</xsl:template>
<xsl:template match=”pe:person”>
<xsl:apply-templates select=”pe:name”/>
</xsl:template>
</xsl:stylesheet>
Inne elementy XSLT
• XSLT ma znacznie większe możliwości niż te, które
zostały dotychczas przedstawione. A mianowicie:
–
Szablony z nazwami,
–
Numerowanie i porządkowanie elementów wyjściowych,
–
Przetwarzanie warunkowe,
–
Iteracja,
–
Elementy i funkcje rozszerzające,
–
Importowanie innych arkuszy styli.
• XSLT jest kompletny pod względem obliczeniowym
oraz może wywoływać rozszerzenia napisane w
innych językach, np. Java
• Przedstawione dotychczas własności XSLT stanowią
fundament dla bardziej zaawansowanych metod.
Leksykon XSLT
• Wszystkie standardowe elementy XSLT znajdują się w
przestrzeni nazw
http://www.w3.org/xsl/Transform
.
• Założymy dalej, że ten identyfikator URI jest
odwzorowany na przedrostek xsl (za pomocą
deklaracji xmlns:xsl).
• Elementy XSLT:
– Dwa elementy bazowe: xsl:stylesheet, xsl:transform
– Trzynaście elementów najwyższego poziomu, które mogą się
tylko pojawić jako bezpośrednie elementy potomne
elementu bazowego: xsl:apply-imports, xsl:attribute-set,
xsl:decimal-format, xsl:import, xsl:include, xsl:key,
xsl:namespace-alias, xsl:output, xsl:param, xsl:preserve-
space, xsl:temlate, xsl:variable.
– Dwadzieścia elementów instrukcji. Te elementy pojawiają się
w treści elementów, które zawierają szablony.
Elementy instrukcji XSLT
• xsl:apply-imports,
• xsl:apply-templates,
• xsl:attribute,
• xsl:call-template,
• xsl:choose,
• xsl:comment,
• xsl:copy,
• xsl:copy-of,
• xsl:element,
• xsl:fallback,
• xsl:for-each,
• xsl:if,
• xsl:message,
• xsl:number,
• xsl:otherwise,
• xsl:processing-
instruction
• xsl:text,
• xsl:value-of,
• xsl:variable,
• xsl:when.
Elementy XSLT w sekcji
• Elementy są uporządkowane alfabetycznie od
xsl:apply-imports do xsl:param. Każdy element
zaczyna się od streszczenia o następującej
postaci:
<xsl:nazwa_Elementu
attribut1=”dopuszczalne wartości atrybutu”
attribut2=”dopuszczalna wartość atrybutu”
>
<!– model zawartości -- >
</xsl:nazwa_Elementu>
• Większość wartości atrybutów należy do jednego
z dalej omawianych typów.
Podstawowe typy atrybutów
• expression – wyrażenie typu XPath. W przypadku gdy
oczekujemy zwrócenia wyrażenia wartości określonego
typu, takiego jak zbiór węzłów lub liczba, jest on
poprzedzony typem lub łącznikiem, np. not-set-
expression
• qualifiedName – nazwa XML, taka jak set lub mathml:set
• pattern – wyrażenie typu „ścieżka położeń XPath”
• langcode – kod języka wg RFC 1766, np. en lub fr-CA
• string – dowolny ciąg tekstowy
• char – pojedyńczy znak standardu Uniccode
• typ – wartość pochodząca z listy wartości, czyli typ
wyliczeniowy
• URI – względny lub bezwzględny identyfikator URI.
Względne identyfikatory URI są względne wobec
lokalizacji arkusza styli.
xsl:apply-imports
• Składnia: <xsl:apply-imports />
• Opis: instrukcja przetwarza bieżący węzeł,
używając tych szablonów, które zostały
zaimportowane do arkusza styli za pomocą
xsl:import. Reguła szablonu, która przesłania
w regułę szablonu w importowanym arkuszu
styli, może wywołać przesłanianą regułę za
pomocą instrukcji xsl:apply-imports.
• Atrybuty: brak
• Zawartość: brak
xsl:apply-templates
• Składnia:
<xsl:apply-templates
select = ”wyrażenie_typu_zbiór_węzłów”
mode = ”nazwaKwalifikowana”>
<! --(xsl:sort | xsl:with-param) * -- >
</xsl:apply-templates>
• Opis: nakazuje procesorowi wyszukanie i
zastosowanie szablonu o najwyższym priorytecie w
arkuszu styli (szablon, który pasuje do każdego
węzła wskazanego przez atrybut select).
• Atrybuty: select (opcionalny), mode (opcionalny)
• Zawartość: może zawierać elementy potomne
xsl:sort, xsl:withparam
xsl:attribute
• Składnia:
<xsl:attribute
name = ”nazwaKwalifikowana”
namespace = ”URI”>
<!– szablon dla wartośći atrybutu -- >
</xsl:attribute>
• Opis: dodaje atrybut do elementu znajdującego się
w drzewie wynikowym. Ten element może być
potomkiem elementu xsl:attribute-set, instrukcji
xsl:element, lub literałowego elementu wynikowego.
• Atrybuty: name (wymagany), namespace
(opcionalny)
• Zawartość: szablon.
xsl:attribute-set
• Składnia:
<xsl:attribute-set
name = ”nazwaKwalifikowana”
namespace = ”URI”>
<! - - xsl:attribute* -- >
</xsl:attribute-set>
• Opis: definiuje grupę atrybutów, które mogą być
zastosowane względem elementów znajdujących się w
arkuszu styli.
• Atrybuty: name (wymagany), use-attribute-set
(opcionalny).
• Zawartość: zawiera zero lub więcej elementów
xsl:attribute. Każdy z tych elementów dodaje do zbioru
jeden atrybut.
xsl:call-template
• Składnia:
<xsl:call-template
name = ”nazwaKwalifikowana”
namespace = ”URI”>
<!- - xsl:with-param* -- >
</xsl:call-template>
• Opis: wywołuje szablon, wykorzystując jego nazwę. Lista
węzła bieżącego i węzła kontekstu jest taka sama zaróno
dla szablonu wywołanego, jak i wywołującego. Szablony
muszą być wywoływane rekurencyjnie, element
xsl:template może zawierać w sobie kolejny element
xsl:template.
• Atrybuty: name (wymagany) – nazwa wywoływanego
elementu.
• Zawartość: zawiera zero lub więcej elementów xsl:with-
param, które zwracają parametry do szablonu o
określonej nazwie.
xsl:choose
• Składnia:
<xsl:choose>
<!- - (xsl:when*, xsl:otherwith?) -- >
</xsl:choose>
• Opis: wybiera zero lub jedną sekwencje alternatywy.
• Atrybuty: brak
• Zawartość: zawiera jeden element xsl:when oraz
opcjonalnie xsl:otherwise; obydwa te elementy
posiadają kryterium testowe. W danych wyjściowych
podawana jest zawartość pierwszego potomka
xsl:when, którego kryterium testowe przyjmuje
wartość true. Zawartość xsl:otherwise pojawia się w
danych wyjściowych tylko wtedy, gdy żadne
kryterium testowe xsl:when nie jest true.
xsl:comment
• Składnia:
<xsl:comment>
<!- - szablon -- >
</xsl:comment>
• Opis: wstawia do drzewa wynikowego komentarz.
• Atrybuty: brak
• Zawartość: zawartością elementu jest szablon,
który zostaje skonkretyzowany w celu utworzenia
tekstu komentarza. Wynikiem konkretyzacji tego
szablonu muszą być wyłącznie węzły tekstowe,
nie zawierające podwójnego znaku --, który
sygnalizuje koniec komentarza.
xsl:copy
• Składnia:
<xsl:copy
use-attribute-set = ”nazwaKwalifikowana1
nazwaKwalifikowana2 …” >
<!- - szablon -- >
</xsl:copy>
• Opis: kopiuje bieżący węzeł z dokumentu źródłowego
do dokumentu wynikowego, oraz wszystkie węzły
przestrzeni nazw, do których ten węzeł się odwołuje.
Nie kopiuje jednak potomków węzła ani jego
atrybutów.
• Atrybuty: use-attribute-set (opcjonalny)
• Zawartość: jeśli jest to węzeł elementu, to atrybuty
mogą być dodane poprzez elementy potomne
xsl:attribute.
xsl:copy-of
• Składnia:
<xsl:copy-of
select = ”wyrażenie” />
• Opis: wstawia do dokumentu wyjściowego
fragment drzewa wynikowego identyfikowany
przez atrybut select. Kopiuje identyfikowane przez
wyrażenie konkretne węzły - wraz ze wszystkimi
elementami pochodnymi tych węzłów, ich
atrybuty, przestrzenie nazw oraz potomków. Ta
cecha odróżnia tą instrukcję od xsl:copy.
• Atrybuty: select (wymagany)
• Zawartość: brak
xsl:decimal-format
• Składnia:
<xsl:decimal-format name = ”nazwaKwalifikowana”
decimal-separator = ”znak” groupin-separator = ”znak”
infinity = ”ciąg znaków” minus-sign = ”znak” NaN =
”ciąg znaków” percent = ”znak” per-mille = ”znak” zero-
digit = ”znak” digit = ”znak”
patern-separator = ”znak”/>
• Opis: element najwyższego poziomu xsl:decimal-format
definiuje wzór, według którego funkcja format-number( )
konwertuje liczby zmiennoprzecinkowe na ciągi
tekstowe.
• Atrybuty: name (opcional), decimal-separator (opcional),
groupin-separator (opcinal), infinity (opcional), minus-
sign (opcional), NaN (opcional), percent (opcional),
permille (opcional), zero-digit (opcional) – domyśnie 0,
digit (opcional) – domyślnie #, pattern-separator
(opcional) – domyślnie ;.
• Zawartość: brak
xsl:element
• Składnia:
<xsl:element
name = ”nazwaKwalifikowana”
namespace = ”URI”
use-attribute-set = ”nazwaKwalifikowana1
nazwaKwalifikowana2 … „>
<!- - szablon -- >
</xsl:element>
• Opis: wstawia element do drzewa wynikowego.
Nazwa jest podana przez atrybut name. Atrybuty
mogą być dodawane przez elementy potomne
xsl:attribute lub przez odwołanie z atrybutu use-
attribute-sets do instrukcji xsl:attribute-set,
zadeklarowanej w arkuszu styli.
• Atrybuty: name (wymagany), name-space
(opcjonalny) use-attribute-set (opcjonalny)
• Zawartość: zawartością jest szablon.
xsl:fallback
•
Składnia:
<xsl:fallback>
<!- - szablon -- >
</xsl:fallback>
•
Opis: występuje jako element potomny elementu
rozszerzenia. Jeśli procesor nie rozpoznaje elementu
rozszerzenia, wtedy konkretyzuje zawartość
wszystkich potomków elementu xsl:fallback, według
ich kolejności. Jeżeli natomiast rozpozna element – w
którym pojawia się xsl:fallback, wtedy zawartość
xsl:fallback nie pojawi się w danych wyjściowych.
•
Atrybuty: brak
•
Zawartość: zawartością jest szablon, który jest
konkretyzowany i wyprowadzany wtedy i tylko wtedy,
gdy procesor XSLT nie rozpozna elementu rodzica
elementu xsl:fallback.
xsl:for-each
• Składnia:
<xsl:for-each
select = ”wyrażenie_typu_zbioru_węzłów”>
<!- - (xsl:sort*, szablon) - ->
</xsl:for-each>
• Opis: „przechodzi” kolejno przez węzły identyfikowane
przez atrybut select i stosuje wobec każdego z nich
szablon.
• Atrybuty: select (wymagany)
• Zawartość: kolejność w jakiej są przetwarzane wybrane
węzły zwykle jest zgodna z kolejnością z jaką występują
w dokumencie. Jednak węzły mogą być porządkowane
za pomocą elementów potomnych xsl:sort. Pierwszym
takim elementem jest klucz sortowania, drugim wtórny
klucz sortowania, itd. xsl:for-each musi zawierać
szablon, który zostaje skonkretyzowany.
xsl:if
• Składnia:
<xsl:if
test = ”wyrażenie_logiczne”>
<!- - szablon - ->
</xsl:if>
• Opis: zawiera szablon, który jest
konkretyzowany wtedy i tylko wtedy, gdy
zawarte w atrybucie test wyrażenie XPath ma
wartość true.
• Atrybuty: test (wymagany)
• Zawartość: szablon jest konkretyzowany tylko
wtedy, gdy atrybut test zwraca wartość true.
xsl:import
• Składnia:
<xsl:import
href = ”URI” />
• Opis: element najwyższego poziomu xsl:import
importuje arkusz styli XSLT, znajdujący się w miejscu
wskazanym przez identyfikator URI, podany w
atrybucie href. Dokumenty źródłowe są przetwarzane
za pomocą kombinacji szablonów pochodzących z
arkuszy styli importującego i importowanego. Jeśli w
tych dwóch arkuszach wystąpi konflikt między
szablonami, wtedy pierszeń-stwo mają szablony z
arkusza importującego. Wszystkie elementy xsl:import
muszą być bezpośrednimi potomkami elementu
bazowego xsl:stylesheet. Ponadto, muszą występować
przed wszystkimi pozostałymi elementami
najwyższego poziomu.
• Atrybuty: href (wymagalny)
• Zawartość: brak
xsl:include
• Składnia:
<xsl:include
href = ”URI” />
• Opis: Element najwyższego poziomu xsl:include
kopiuje zawartość elementu xsl:stylesheet lub
xsl:transform, znajdujących się w miejscu
wskazanym przez identyfikator URI. W
przeciwieństwie do xsl:import, niezależnie od tego
czy szablon lub inna reguła pochodzi z dołączonego
lub z dołączającego arkusza styli, niema żadnego
wpływu na pierwszeństwo reguł.
• Atrybuty: href (wymagany)
• Zawartość: brak
xsl:key
• Składnia:
<xsl:key name = ”nazwaKwalifikowana”
match = ”wzorzec” use = ”wyrażenie”/>
• Opis: definiuje jeden lub więcej kluczy,
najwyższego poziomu, które mogą być
wywołane z dowolnego miejsca arkusza styli, za
pomocą funkcji key(). Każdy klucz ma nazwę,
wartość ciągu znaków oraz węzeł.
• Atrybuty: name (wymagany), match
(wymagany) use (wymagany)
• Zawartość: brak
xsl:message
•
Składnia:
<xsl:message
terminate = ”yes” | ”no”>
<!- - szablon - ->
</xsl:message>
•
Opis: wysyła komunikat do procesora XSLT. Od
procesora zależy jak rozumie komunikat i co robi z
wiadomościami które rozumie. Typowym
zastosowaniem jest drukowanie informacji
diagnostycz-nych na stderr (standardowym wyjściu
błędów) lub stdout (standardowym wyjściu).
•
Atrybuty: terminate (opcjonalny)
•
Zawartość: szablon konkretyzowany w celu utworzenia
fragmentu dokumentu XML. Rezultat jest następnie
przekazywany do procesora XSLT jako komunikat.
xsl:namespace-alias
• Składnia:
<xsl:namespace-alias stylesheet-prefix = ”przedrostek”
result-prefix = ”przedrostek” />
• Opis: element najwyższego poziomu deklarujący, że
pewien identyfikator URI przestrzeni nazw w arkuszu
styli powinien być zastąpiony przez inny identyfikator
URI przestrzeni nazw w drzewie wynikowym. Nadawanie
nazwy zastępczej (alias), jest szczególnie przydatne
przy transformowaniu za pomocą XSLT jednego
dokumentu XML na inny, w rezultacie transformacji nie
jest oczywiste, które nazwy należą do dokumentu
wejściowego, które do wyjściowego, a które do arkusza
styli.
• Atrybuty: stylesheet-prefix (wymagany), result-prefix
(wymagany)
• Zawartość: brak
xsl:number
• Składnia:
<xsl:number value = ”wyrażenie_liczbowe” count =
”wzorzec” from = ”wzorzec” level = ”single” | ”multiple”
| ”any”
format = ”litera lub cyfra” lang = ”kod_języka” letter-
value = ”alphabetic” | ”traditional” grouping-separator
= ”znak”
grouping-size = ”liczba” />
• Opis: wstawia sformatowaną liczbę całkowitą do drzewa
wynikowego
• Atrybuty: value (obcja), count (opcja), from (opcja),
format – szablon wartośći atrybutu (opcja), level (opcja),
lang (opcja) – kod języka RFC 1766, letter-value (opcja),
grouping-separator (opcja), grouping-size (opcja)
• Zawartość: brak.
xsl:otherwise
• Składnia:
<xsl:otherwise>
<!- - szablon -- >
</xsl:otherwise>
• Opis: występuje tylko jako ostatni element
potomny elementu xsl:choose. W przypadku gdy
nie skonkretyzowano elementu potomnego
xsl:when, działa jako element domyślny.
• Atrybuty: brak
• Zawartość: zawartością jest szablon, który jest
konkretyzowany tylko w przypadku, gdy żaden z
elementów potomnych xsl:when elementu
xsl:choose nie jest true.
xsl:output
• Składnia:
<xsl:output method = ”xml” | ”html” | ”text” version =
”NMTOCKEN”
encoding = ”nazwa_kodowania” omit-xml-declaration = ”yes” | ”no”
standalone = ”yes” | ”no” doctype-public = ”PUBLIC_ID” doctype-
system = ”SYSTEM_ID” cdata-section-element =
”nazwa_elementu_1 nazwa_elementu_2 …” ident = ”yes” | ”no”
media-type = ”ciąg_znaków” />
• Opis: element najwyższego poziomu pomaga w określeniu
dokładnego formatowania dokumentu XML, generowanego
w przypadkach, kiedy drzewo wynikowe jest zapisane w
pliku, zapisywane do strumienia lub inaczej szeregowane
w sekwencji bajtów. Nie wpływa na generowanie samego
drzewa wynikowego.
• Atrybuty: method, version, encoding, omit-xml-
declaration, standalone, doctype-public, doctype-system,
cdata-section-element, ident media-type (wszystkie
opcjonalne).
xsl:param
• Składnia:
<xsl:param
name = ”nazwaKwalifikowana”
select = ”wyrażenie” >
<!- - szablon - ->
</xsl:param>
• Opis: wiąże nazwę z wartością. Element
najwyższego poziomu zapewnia domyślną
wartość, która zostaje użyta, gdy podczas
wywołania szablonu nie zostanie podany parametr
o danej nazwie.
• Atrybuty: name (wymagany), select (opcjonalny)
• Zawartość: zawartością elementu jest szablon,
który jest konkretyzowany celem generowania
fragmentu drzewa wynikowego. Ten fragment
drzewa staje się następnie wartością parametru.
xsl:preserve-space
•
Składnia:
< xsl:preserve-space elements =
”nazwaKwalifikowana_1 nazwaKwalifikowana_2
…” />
•
Opis: element najwyższego poziomu, określa w
dokumencie źródłowym te elementy, które przed
transformacją nie zostaną pozbawione białych
znaków. Proces polega na usunięciu wszystkich
węzłów tekstowych, które zawierają białe znaki. Białe
znaki są domyślnie zachowywane w elemencie, pod
warunkiem, że jego nazwa nie została wymieniona w
atrybucie liście elementu xsl:strip-space. Jeśli jednak
nazwy elementu wystąpią na obu listach, to białe
znaki zostają zachowane.
•
Atrybuty: elements (wymagany)
•
Zawartość: brak
xsl:processing-instruction
• Składnia:
<xsl:processing-instruction
name = ”obiekt_docelowy” >
<!- - szablon - ->
</xsl:processing-instruction>
• Opis: wstawia polecenie przetwarzania do drzewa
wynikowego.
• Atrybuty: name (wymagany)
• Zawartość: zawartością jest szablon, który jest
konkretyzowany w celu wygenerowania danych
poleceń przetwarzania. Szablon może zawierać
instrukcje XSLT, pod warunkiem, że wynikiem
skonkretyzowania tego szablonu będą dane
polecenia przetwarzania o właściwej konstrukcji.
xsl:sort
• Składnia:
<xsl:sort select = ”wyrażenie_typu_ciąg_znaków”
data-type = ”text” | ”number” lang = ”kod_języka”
order = ”ascending” | ”descending” case-order =
”upper-first” | ”lower-first” />
• Opis: występuje jako element potomny xsl:apply-
tempaltes albo xsl:for-each. Zmienia ona sposób
uprządkowania listy węzłów kontekstu, z porządku
narzuconego przez dokument na inny porządek np.
alfanumeryczny. Można ustawić wiele kluczy
sortowania, wykorzystując do tego kolejne
elementy xsl:sort. Sortowanie nastąpi według
kolejności kluczy.
• Atrybuty: select (wymagany), data-type (opcja),
lang (opcja), order (opcja), case-order (opcja).
xsl:strip-space
• Składnia:
< xsl:strip-space elements = ”nazwaKwalifikowana_1
nazwaKwalifikowana_2 …” />
• Opis: element najwyższego poziomu wskazuje w
dokumencie źródłowym elementy, z których przed
transformacją zostaną usunięte białe znaki. Proces
polega na usunięciu wszystkich węzłów tekstowych,
które zawierają tylko białe znaki. Domyślnie białe
znaki nie są usuwane z elementu, jeśli jego nazwa nie
figuruje na liście atrybutu elements xsl:strip-space.
Ten element nie powoduje usunięcia poprzedzających
lub kończących białych znaków, ani nie normalizuje w
inny sposób białych znaków w elementach, które
zawierają przynajmniej jeden znak widoczny.
• Atrybuty: elements (wymagany)
xsl:stylesheet
• Składnia:
<xsl:stylesheet
xmlns:xsl = ”http://www.w3.org/1999/XSL/Transform id =
”ID”
extension-element-prefix = ”przedrostek1 przedrostek2 …”
exclude-result-prefix = ”przedrostek1 przedrostek2 …”
version = ”1.0” name = ”obiekt_docelowy” >
<!- - (xsl:import*, elementy-najwyższego-poziomu) - ->
</xsl:stylesheet>
• Opis: jest podstawowym elementem arkusza styli XSLT.
• Atrybuty: xmlns:xsl, version, (obydwa wyamagane) id,
extension-element-prefix, exclude-result-prefix (trzy
opcjonalne)
• Zawartość: dowolne elementy xsl:import, za którymi
następują dowolne elementy najwyższego poziomu w
dowolnej kolejności.
xsl:template
• Składnia:
< xsl:template
match = ”wzorzec” priority = ”liczba”
name = ”nazwaKwalifikowana” mode =
”nazwaKwalifikowana” >
< /xsl:template>
• Opis: jest kluczowym elementem najwyższego poziomu
dla całego XSLT. Atrybut mach zawiera wzorzec, z
którym porównywane są węzły, w kolejności
przetwarzania. Jeżeli węzeł pasuje do wzorca, wtedy
szablon jest konkretyzowany i wstawiany do drzewa
wyjściowego.
• Atrybuty: match, mode, name, priority (wszystkie
opcjonalne)
• Zawartość: szablon, który powinien być
konkretyzowany, kiedy wystąpi dopasowanie lub gdy
element zostanie wywołany przez nazwę.
xsl:text
• Składnia:
<xsl:text
disable-output-escaping = ”yes” | ”no” >
<!- - #PCDATA - ->
</xsl:text>
• Opis: instrukcja używana jest wewnątrz
szablonów, w celu wskazania, że ich zawartość
powinna być przesłana do danych wyjściowych
jako tekst.
• Atrybuty: disable-output-escaping (opcjonalny)
• Zawartość: zawartością nie są elementy, ale
zwykły tekst.
xsl:transform
• Składnia:
<xsl:transform
xmlns:xsl = ”http://www.w3.org/1999/XSL/Transform id = ”ID”
extension-element-prefix = ”przedrostek1 przedrostek2 …”
exclude-result-prefix = ”przedrostek1 przedrostek2 …”
version = ”1.0” name = ”obiekt_docelowy”
<!- - (xsl:import*, elementy-najwyższego-poziomu) - ->
</xsl:transform>
• Opis: jest rzadko używanym elementem równoważnym
xsl:stylesheet - podstawowym elementem arkusza styli
XSLT.
• Atrybuty: xmlns:xsl, version, (obydwa wyamagane) id,
extension-element-prefix, exclude-result-prefix (trzy
opcjonalne)
• Zawartość: dowolne elementy xsl:import, za którymi
następują dowolne elementy najwyższego poziomu w
dowolnej kolejności.
xsl:value-of
•
Składnia:
<xsl:value-of
select = ”wyrażenie”
disable-output-escaping = ”yes” | ”no” />
•
Opis: liczy wartości ciągu znaków wyrażenia XPath i
wstawia je do drzewa wynikowego. Wartościami
siedmiu różnych typów węzłów są: element
(zawartość tekstowa bez znaczników), text (tekst
węzła), atrybut (wartość znormalizowana), element
podstawowy (wartość elementu), polecenie
przetwarzania (dane polecenia), komentarz (tekst),
przestrzeń nazw (identyfikator URI).
•
Atrybuty: select (wymagany), disable-output-
escaping (opcja)
xsl:variable
• Składnia:
<xsl:variable
name = ”nazwaKwalifikowana”
select = ”wyrażenie”>
<!- - szablon - ->
</xsl:variable>
• Opis: Łączy nazwę z wartością dowolnego typu
ciągu znaków, liczba zbiór węzłów itp. Do zmienne
można odwołać się z dowolnego miejsca,
używając w szablonie wartość atrybutu $name.
• Atrybuty: name (wymagany), select (opcja)
• Zawartość: szablon stosowany celem utworzenia
wartości zmiennej jako fragmentu drzewa
wynikowego.
xsl:when
• Składnia:
<xsl:when
test = ”wyrażenie_logiczne”>
<!- - szablon - ->
</xsl:when>
• Opis: element xsl:when pojawia się jedynie jako
element potomny xsl:choose.
• Atrybuty: test (wymagany)
• Zawartość: szablon, który ma być
skonkretyzowany i wstawiony do drzewa
wynikowego, jeśli atrybut test ma wartość true.
xsl:with-param
• Składnia:
<xsl:with-param
name = ”nazwaKwalifikowana”
select = ”wyrażenie”>
<!- - szablon - ->
</xsl:with-param>
• Opis:przekazuje parametr o podanej nazwie do
szablonu, który go oczekuje. Może być potomkiem
xsl:apply-templates, jak i xsl:call-template.
• Atrybuty: name (wymagany), select (opcja)
• Zawartość: szablon jest konkretyzowany i
przekazywany jako wartość parametru. Jeśli
xsl:with-param nie jest elementem pustym, nie
może posiadać atrybutu select.
Funkcje XSLT
• current( ) – zwraca zbiór węzłów, zawierający węzeł bieżący
• document( ) – ładuje dokument XML spod URI
• element-available( ) – zwraca wartość true jeśli
zidentyfikuje
• format-number( ) – konwertuje liczbę x na ciąg znaków
• function-available( ) – zwraca true jeśli znajdzie funkcję
biblioteczną procesora XSLT
• generate-id( ) – zwraca ciąg znaków, który jest atrybutem
typu IT
• key( ) – zwraca pełny zbiór węzłów, dokumentu źródłowego
• system-property( ) – zwraca wartość wskazanej
właściwości
• vendor-url – identyfikuje producenta procesora XSLT
• unparsed-entity-uri( ) – zwraca identyfikator URI nie
analizowanej encji o określonej nazwie, zadeklarowanej w
DTD dokumentu źródłowego, lub pusty ciąg znaków, jeśli nie
istnieje encja o danej nazwie