Ta strona wygląda tak kiepsko, ponieważ korzystasz z przeglądarki nie obsługującej ogólnie przyjętych standardów internetowych. Aby zobaczyą ją w pełnej krasie, zaktualizuj ją do wersji zgodnej z tymi standardami. Trwa to krótko i nie kosztuje nic.

Rodzina XSL

Strona 1 2
Michał Paluchowski | opublikowany: 2004-10-10 | średnia ocena: 3.41/5

Skoro już nawet przeglądarka się tego domaga, czas stworzyć arkusz stylów XSL, zawierający instrukcje wyświetlania w przeglądarce poszczególnych elementów pliku XML. Szkielet arkusza będzie wyglądał następująco:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html" indent="yes" encoding="utf-8"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" />

<!-— instrukcje formatowania -->

</xsl:stylesheet>

Zawiera on ogólne informacje o typie dokumentu, jaki ma powstać po przetworzeniu oryginalnego pliku XML. Znacznik xml:stylesheet ogranicza treść arkusza, zawiera wykorzystaną wersję XSL oraz xml namespace (xmlns), dosłownie ‘przestrzeń nazw’ a więc wskazanie na dokument na serwerze W3C zawierający listę dozwolonych znaczników.

Kolejny znacznik jest szczególnie istotny. To właśnie xsl:output decyduje jaki dokument ostatecznie wygeneruje parser. Jak widać, będzie to dokument XHTML o kodowaniu znaków w standardzie UTF-8.

Nasz szkielet arkusza możemy zapisać jako example.xsl. Aby teraz połączyć przykładowy example.xml z obecnym szkieletem, musimy do pliku XML dodać jeszcze jeden znacznik. Zaraz pod znacznikiem <?xml... a przed <news> wstawiamy:

<?xml-stylesheet href="example.xsl" type="text/xsl"?>

Jest to instrukcja dla parsera XML, aby instrukcji dotyczących formatowania szukał w podanym pliku. Gdy tak uzupełniony plik XML otworzymy w przeglądarce, zależnie od programu wyświetli się albo zawartość example.xml w jednej linijce, bez znaczników (Internet Explorer), albo pusta strona (Mozilla). Przystępujemy więc do formatowania, w miejscu komentarza <!—instrukcje formatowania --> umieszczamy:

<xsl:template match="/news">
<html>
<head>
<title>News</title>
</head>
<body>
<h1>Wiadomości</h1>
<xsl:apply-templates select="wiadomosc"/>
</body>
</html>
</xsl:template>

Oto pojedyncza reguła formatowania, nazywana w terminologii XSL ‘template’, czyli po Polsku szablon. Zasadniczo dla każdego znacznika XML tworzy się więc osobny szablon. Zaczynamy od pierwszego w hierarchii znacznika <news>, do którego odwołuje się parametr match=”/news”. Wartość tego parametru /news jest wyrażeniem wcześniej wspomnianego standardu XPAth, będącym ścieżką do poszukiwanego elementu. Slash / na początku oznacza, że poszukiwany znacznik jest właśnie najwyższym w hierarchii.

Parser, po otrzymaniu takiej instrukcji zamieni znacznik <news> wraz z zawartością na podany kod XHTML. Z kolei znacznik <xsl:apply-templates select="wiadomosc"/> wskazuje miejsce, w którym zastosowane mają zostać reguły z szablonów dotyczących znaczników wiadomosc. Dodajmy więc te reguły:

<xsl:template match="wiadomosc/tytul">
<h2><xsl:apply-templates/></h2>
</xsl:template>

<xsl:template match="wiadomosc/autor">
autor: <strong><xsl:apply-templates/></strong>
</xsl:template>

<xsl:template match="wiadomosc/data">
data: <em><xsl:apply-templates/></em>
</xsl:template>

<xsl:template match="wiadomosc/tresc">
<p><xsl:apply-templates/></p>
</xsl:template>

Ich działanie po krótkim przyjrzeniu się powinno być oczywiste. Definiujemy zamienniki w XHTML dla kolejnych znaczników XML, parser natomiast wstawia zawartość pierwotnych znaczników w miejsca gdzie podane jest <xsl:apply-templates/>. Otwierając nasz example.xml w przeglądarce po uzupełnieniu arkusza XSL zobaczymy taki widok:

Kolumny tabeli 'goscie'

W ramach eksperymentu proponuję wprowadzić jakiś błąd do kodu HTML w arkuszu XSL, na przykład zamieniając znacznik </p> na <p> i zobaczyć wynik w przeglądarce.

Po stronie serwera

Wszystkie transformacje dokumentu XML, które oglądaliśmy dotychczas miały miejsce po stronie klienta, wykonywane przez przeglądarkę stron WWW. Zobaczmy teraz na przykładzie PHP, jak parsowanie może wyglądać po stronie serwera. Na początek trzeba jednak sprawdzić, czy w naszej instalacji PHP uruchomione jest rozszerzenie XSLT. Kiedy tak już się stanie, kod jest zaskakująco krótki:

<?php
// Wywołujemy procesor XSLT
$procesor = xslt_create();

// Dokonujemy transformacji
$kod_html = xslt_process($procesor, 'example.xml', 'example.xsl');

// Jeśli pojawiły się jakieś błędy
// wyświetlamy je
if (!$kod_html)
{
die('Błąd przetwarzania XSLT: '.xslt_error($procesor));
}

// Zwalniamy pamięć zajętą przez procesor
xslt_free($procesor);

// Wyświetlamy rezultat
echo $kod_html;
?>

Rezultat wywołania strony o tym kodzie powinien być identyczny z uzyskanym przez lokalne otwarcie pliku example.xml.

Teraz pozostaje już tylko stosować połączenie XML z XSL w praktyce. Mnie pozostaje jedynie życzyć samych profitów związanych z wykorzystaniem tych technologii.

oceń artykuł: Kiepski 1 2 3 4 5 Doskonały
Strona 1 2  
projekt i multimedia
programowanie
marketing
strategie prowadzenia
infrastruktura
praca