XML - ćwiczenia 6 - style, idea XSLT, XPath

Patryk Czarnik

Utworzono: 2002.11.10

Zmodyfikowano: 2002.11.12

Referencje

Rekomendacje

CSS level 2
XSL
XSLT
XPath
XHTML
HTML

Narzędzia

XPath Visualizer
(zip, razem z przykładami) - wymaga Windows z biblioteką MsXML 3.0 (działa pod IE 6.0)

fajny tutorial

Przykład

XML bez wizualizacji (pokaż kod)
arkusz CSS (pokaż kod)
XML z CSS (pokaż kod)
arkusz XSLT -> XHTML (pokaż kod)
XML z XSLT -> XHTML (pokaż kod)

Wizualizacja XML, arkusze stylu

Dokumenty XML w ogólności nie zawierają informacji o tym, jak prezentować ich zawarość. Nie można też ustalić uniwersalnego sposobu interpretowania XML, gdyż np. w różnych dokumentach te same nazwy elementów znaczą co innego. Ogólne sposoby prezentowania XML są bardzo ubogie, np. w przeglądarkach internetowych wyświetla się kod XML (stary Netscape), zawartość tekstowa (Mozilla) lub struktura drzewiasta (Internet Explorer).

Wiele dokumentów XML zawiera jednak dane, które można prezentować w bardziej przyjemny sposób.
Pomysł arkuszy stylu polega na tym, aby umieścić informację o prezentacji poza dokumentem i to w taki sposób, żeby ta sama informacja (ten sam arkusz) była dobra dla całej klasy dokumentów. Na przykład możemy określić jeden styl dla prac magisterskich, inny dla artykułów, jeszcze inny dla... spisu pracowników firmy.
Ponadto dla określonej klasy dokumentów możemy zdefiniować wiele styli.

CSS

Cascading Style Sheets, rekomendacja W3C jest dość prostym sposobem zapisania informacji o prezentacji poszczególnych elementów dokumentu. Pozwala dużo powiedzieć o wyglądzie, szeroko stosowany przy HTML, jest (nie idealnie) zaimplementowany we wszystkich liczących się graficznych przeglądarkach internetowych.

CSS nie pozwala na zmianę kolejności elementów, ich duplikowanie. Po prostu kolejne elementy są wyświetlane w sposób określony w arkuszu.

XSL

Extensible Stylesheet Language, rekomendacja W3C określa inny sposób prezentacji dokumentów XML opraty o transformacje dokumentów.
Tym razem arkusz określa sposób zamiany dokumentu XML na inny dokument XML, dla którego określony jest już sposób prezentacji. Zgodnie z ideą standardu XSL wyjściowym powinien być dokument XSL Formatting Objects, ale w praktyce najczęściej dokonuje się tranformacji do XHTML.
XSL = XSLT (język transformacji) + FO (język prezentacji).

XSLT

XSL Transformations, rekomendacja W3C to język (zastosowanie XML) służący do pisania arkuszy dokonujących transformacji XML -> XML. Procesor XSLT to aplikacja, która potrafi interpretować XSLT i mając dane wejściowy dokument XML i arkusz XSLT potrafi wygenerować wyjściowy dokument XML.

Arkusz (stylesheet) składa się z szablonów (templates). Każdy szablon opisuje jak zamieniać pewnien fragment dokuentu wejściowego na fragment dokumentu wyjściowego. Wykonanie tranformacji polega na wywołaniu szablonu pasującego do elementu głównego.

XSLT językiem deklaratywnym

Treść szablonu jest wyrażeniem opisującym zawartość dokumentu wynikowego. Nie ma tutaj imperatywnych poleceń modyfikujących stan, wypisujących coś na wyjście itd., dlatego XSLT można uznać za język deklaratywny, w pewnych aspektach przypominający języki funkcyjne (konstrukcja let x=... in ..., co prawda trochę inny, ale "pattern-matching").

Serializacja

Wynikiem transformacji jest dokument XML. Standard określa trzy sposoby serializacji (zapisania jako tekstu) wynikowych dokumentów:

  1. XML - zapisywany jest dokument XML,
  2. HTML - jeśli wynikiem jest XHTML, zostaje on zapisany jako HTML (jest poprawnie interpretowany przez stare przeglądarki)
  3. ,
  4. TEXT - zapisywana jest zawartość tekstowa elementów, bez znaczników. Ten sposób umożliwia tworzenie z XML dowolnych dokumentów tekstowych (np. płaski tekst, Latex, Postscript :), różne nieprzenośne formaty, a nawet języki programowania).

Zastosowania XSLT są znacznie szersze niż prezentacja XML.
To tyle ogólników o XSLT... Aby pisać arkusze trzeba poznać jeszcze język XPath.

XPath

XML Path Language, rekomendacja W3C to język wyrażeń pozwalający na zaadresowanie fragmentu dokumentu XML, odczytanie jego wartości oraz wiele innych rzeczy (arytmetyka liczb całkowitych i logiki, wbudowane użyteczne funkcje).

XPath a DOM

XPath definiuje drzewiasty model dokumentu XML, podobny do DOM, ale z pewnymi subtelnymi różnicami, m.in. w XPath w przezroczysty sposób są wklejane sekcje CDATA i wartości encji, atrybuty są dziećmi elementów. XPath, w odróżnieniu od DOM, nie stanowi interfejsu programistycznego dla dokumentu, wyrażenia XPath pozwalają jedynie odczytywać fragmenty dokumentu.

Typy wyrażeń XPath

Ścieżki XPath

Najważniejszy rodzaj wyrażeń. Ich wynikiem jest wartość typu node set, służą do odczytywania (adresowania) fragmentów dokumentu. Podstawowa składnia:
krok/krok ...
krok:
::test-węzłów predykaty każdy predykat w nawiasach kwadratowych.
Można stosować różne skróty. Domyślną osią jest child, rozpoczęcie nazwy węzła od @ oznacza atrybut, * pasuje do każdej nazwy a // oznacza wszystkich potomków (nie tylko dzieci jak /).

Węzeł kontekstowy i bieżący

Względna ścieżka XPath jest obliczana względem węzła bieżącego, można się też do niego odwołać w wyrażeniu za pomocą funkcji current(), w każdym miejscu w ścieżce XPath current() ma tą samą wartość.
Węzeł kontekstowy na samym początku obliczania wyrażenia jest równy węzłowi bieżącemu, a dalej w miarę przechodzenia kolejnych kroków ścieżki XPath zmienia się. W każdym miejscu można się do niego odwołać za pomocą kropki .
Przykład:
//section[current()/@id = 'S3'] - wszystkie elementy section, jeśli bieżący węzeł ma parametr id równy S3;
//section[./@id = 'S3'] - wszystkie elementy section, które mają parametr id równy S3;

Zadania

Wykorzystać XPath Vizualizer.

  1. Przykład adresy. Napisz ścieżki określające:
  2. Przykład authors2. Napisz ścieżki określające:

źródło w XML