Sekcja: Tworzenie dokumentu XML.
1. Dokument XML zawierający bazę płyt CD.
Poniżej przestawiam zawartość pliku XML zawierającego bazę płyt CD. dokument zawiera prolog opisujący wersję i kodowanie dokumentu. Element główny dokumentu o nazwie catalog zawiera element wewnętrzny cd. Z kolei element cd zawiera elementy title, artist, country, company price i year.
Źródło przykładu: www.w3schools.com
Tego typu zapis danych jest bardzo użyteczny do przechowywania danych jako prostej bazy XML natomiast próba wizualizacji danych za pomocą przeglądarek internetowych nie prowadzi do czytelnych rezultatów.
<?xml version="1.0" encoding="ISO-8859-1"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
<cd>
<title>Greatest Hits</title>
<artist>Dolly Parton</artist>
<country>USA</country>
<company>RCA</company>
<price>9.90</price>
<year>1982</year>
</cd>
<cd>
<title>Still got the blues</title>
<artist>Gary Moore</artist>
<country>UK</country>
<company>Virgin records</company>
<price>10.20</price>
<year>1990</year>
</cd>
<cd>
<title>Eros</title>
<artist>Eros Ramazzotti</artist>
<country>EU</country>
<company>BMG</company>
<price>9.90</price>
<year>1997</year>
</cd>
<cd>
<title>One night only</title>
<artist>Bee Gees</artist>
<country>UK</country>
<company>Polydor</company>
<price>10.90</price>
<year>1998</year>
</cd>
<cd>
<title>Sylvias Mother</title>
<artist>Dr.Hook</artist>
<country>UK</country>
<company>CBS</company>
<price>8.10</price>
<year>1973</year>
</cd>
<cd>
<title>Maggie May</title>
<artist>Rod Stewart</artist>
<country>UK</country>
<company>Pickwick</company>
<price>8.50</price>
<year>1990</year>
</cd>
<cd>
<title>Romanza</title>
<artist>Andrea Bocelli</artist>
<country>EU</country>
<company>Polydor</company>
<price>10.80</price>
<year>1996</year>
</cd>
<cd>
<title>When a man loves a woman</title>
<artist>Percy Sledge</artist>
<country>USA</country>
<company>Atlantic</company>
<price>8.70</price>
<year>1987</year>
</cd>
<cd>
<title>Black angel</title>
<artist>Savage Rose</artist>
<country>EU</country>
<company>Mega</company>
<price>10.90</price>
<year>1995</year>
</cd>
<cd>
<title>1999 Grammy Nominees</title>
<artist>Many</artist>
<country>USA</country>
<company>Grammy</company>
<price>10.20</price>
<year>1999</year>
</cd>
<cd>
<title>For the good times</title>
<artist>Kenny Rogers</artist>
<country>UK</country>
<company>Mucik Master</company>
<price>8.70</price>
<year>1995</year>
</cd>
<cd>
<title>Big Willie style</title>
<artist>Will Smith</artist>
<country>USA</country>
<company>Columbia</company>
<price>9.90</price>
<year>1997</year>
</cd>
<cd>
<title>Tupelo Honey</title>
<artist>Van Morrison</artist>
<country>UK</country>
<company>Polydor</company>
<price>8.20</price>
<year>1971</year>
</cd>
<cd>
<title>Soulsville</title>
<artist>Jorn Hoel</artist>
<country>Norway</country>
<company>WEA</company>
<price>7.90</price>
<year>1996</year>
</cd>
<cd>
<title>The very best of</title>
<artist>Cat Stevens</artist>
<country>UK</country>
<company>Island</company>
<price>8.90</price>
<year>1990</year>
</cd>
<cd>
<title>Stop</title>
<artist>Sam Brown</artist>
<country>UK</country>
<company>A and M</company>
<price>8.90</price>
<year>1988</year>
</cd>
<cd>
<title>Bridge of Spies</title>
<artist>T`Pau</artist>
<country>UK</country>
<company>Siren</company>
<price>7.90</price>
<year>1987</year>
</cd>
<cd>
<title>Private Dancer</title>
<artist>Tina Turner</artist>
<country>UK</country>
<company>Capitol</company>
<price>8.90</price>
<year>1983</year>
</cd>
<cd>
<title>Midt om natten</title>
<artist>Kim Larsen</artist>
<country>EU</country>
<company>Medley</company>
<price>7.80</price>
<year>1983</year>
</cd>
<cd>
<title>Pavarotti Gala Concert</title>
<artist>Luciano Pavarotti</artist>
<country>UK</country>
<company>DECCA</company>
<price>9.90</price>
<year>1991</year>
</cd>
<cd>
<title>The dock of the bay</title>
<artist>Otis Redding</artist>
<country>USA</country>
<company>Atlantic</company>
<price>7.90</price>
<year>1987</year>
</cd>
<cd>
<title>Picture book</title>
<artist>Simply Red</artist>
<country>EU</country>
<company>Elektra</company>
<price>7.20</price>
<year>1985</year>
</cd>
<cd>
<title>Red</title>
<artist>The Communards</artist>
<country>UK</country>
<company>London</company>
<price>7.80</price>
<year>1987</year>
</cd>
<cd>
<title>Unchain my heart</title>
<artist>Joe Cocker</artist>
<country>USA</country>
<company>EMI</company>
<price>8.20</price>
<year>1987</year>
</cd>
</catalog>
Przykład 1: Prezentacja plików XML za pomocą arkusza XSL.
Sekcja: Prosta transformacja dokumentu XML za pomocą arkusza stylów XSL.
2. Prezentacja plików XML za pomocą arkusza XSL.
Istnieje wiele sposobów wizualizacji czy jak kto woli prezentacji treści dokumentów XML na przeglądarkach internetowych w sposób czytelny dla człowieka. Jednym z nich jest użycie arkusza XSL.
XSL (ang. Extensible Stylesheet Language, w wolnym tłumaczeniu Rozszerzalny Język Arkuszy Stylów) – funkcyjny język programowania opisujący sposób prezentacji i przekształceń dokumentów zapisanych w formacie XML. W języku tym operuje się na znacznikach i ich ewaluacji, na podobnej zasadzie, co we wszystkich językach operujących na makrach. Pliki XSL są poprawnymi dokumentami XML, a cecha ta jest wykorzystywana do tworzenia rekurencyjnych konstrukcji. Można też powiedzieć, że XSL jest rozszerzalnym makroprocesorem. Aktualnie (2008) status rekomendacji W3C mają wersje: XSLT 2.0, XPath 2.0, XSL 1.1. Jeśli chodzi o stan implementacji XSLT, to tylko XSLT 1.0 jest szeroko implementowany. XSLT 2.0 nadal czeka (2008) na upowszechnienie.
Źródło definicji: WIKIPEDIA - XSL
Poniższy przykład pokazuje strukturę arkusza stylów XSL. Ponieważ arkusz jest dokumentem XML więc zaczyna się od prologu. Następnie występuje element bazowy stylesheet definiujący wersję arkusza oraz przestrzeń nazw wraz z jej identyfikatorem URI.
Aby móc kontrolować w jaki sposób z dokumentu wejściowego tworzony jest dokument wyjściowy dodajemy do arkusza stylów tzw. szablony. Każdy szablon jest reprezentowany przez element xsl: template. Element ten posiada atrybut match który zawiera wzorzec XPatch identyfikujący dokument wejściowy któremu odpowiada. Atrybut match="/" definiuje cały dokument.
W poniższym przykładzie definiujemy dokument HTML zawierający nagłówek My CD
Collection. Poniżej definiujemy tabelę HTML posiadającą dwa wiersze i dwie kolumny, z nazwami kolumn Title i Artist oraz dwiema komórkami do których wpisujemy treść coś 1 i coś 2.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--Przykład -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td>cos 1</td>
<td>cos 2</td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Przykład 2: Prezentacja plików XML za pomocą arkusza XSL.
3. Polecenie przetwarzania xm-stylesheet.
Dokumenty XML, które będą przekazywane przeglądarkom www bezpośrednio powinny posiadać w swym prologu polecenie przetwarzania xml-stylesheet informujące przeglądarkę gdzie ma szukać arkusza stylów skojarzonego z dokumentem. Jeśli ten arkusz jest arkuszem XSLT to atrybut type powinien mieć wartość "text/xml". W poniższym przykładzie informujemy przeglądarkę, że arkusz stylów jest typu XSLT. Atrybut href definiuje nazwę pliku (cdcatalog.xsl) i jego lokalizację (bieżący katalog).
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<price>9.90</price>
<year>1988</year>
</cd>
...
</catalog>
Przykład 3: Polecenie przetwarzania xml-stylesheet.
4. Wyliczanie wartości elementu za pomocą znacznika xsl:value-of Jeśli chcemy wyliczyć (wybrać) wartość ciągu znaków określonego elementu wejściowego i wstawić ją do strumienia wyjściowego to należy użyć części składowej arkusza o nazwie xsl:value-of. Wartością takiego elementu jest zawartość tekstowa tego elementu po usunięciu wszystkich znaczników. Atrybut select, zawierający wyrażenie XPath, identyfikuje element, którego wartość ma być pobrana.
W poniższym przykładzie wybieramy elementy title i artist. Trafiają one do odpowiednich komórek tabeli HTML.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<tr>
<td><xsl:value-of select="catalog/cd/title"/></td>
<td><xsl:value-of select="catalog/cd/artist"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Przykład 4: Wyliczanie wartości elementu za pomocą znacznika xsl:value-of.
5. Znacznik xsl:for-each do wyboru wszystkich elementów określonego elementu.
W sekcji 9 wybraliśmy po jednym elemencie title i artist z dokumentu XML. Aby wybrać wszystkie tytuły CD i artystów należ zastosować znacznik xsl:for-each. Znacznik początkowy xsl:for-each wraz ze znacznikiem końcowym tworzy swojego rodzaju pętlę wybierającą wszystkie elementy spełniające odpowiedni wybór. Parametr select określa struktórę (ścieżkę) wybieranego elementu.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Przykład 5: Znacznik xsl:for-each do wyboru wszystkich elementów określonego elementu.
6. Znacznik xsl:sort do alfabetycznego porządkowania wybranych elementów.
W poniższym przykładzie sortujemy wybrane poprzednio elementy. Porządkowanie alfabetyczne jest realizowane za pomocą elementu xml:sort. Atrybut select definiuje element po którym kolekcja ma byc sortowana.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
<th>Price</th>
</tr>
<xsl:for-each select="catalog/cd">
<xsl:sort select="artist"/>
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
<td><xsl:value-of select="price"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Przykład 6: Znacznik xsl:sort do alfabetycznego porządkowania wybranych elementów.
Sekcja: Zaawansowana transformacja dokumentu XML za pomocą arkusza
stylów XSL.
7. Znacznik xsl:choose xsl:otherwise do warunkowego wybierania/formatowania elementów.
Znacznik xsl:chose i xsl:otherwise stanowią rozszerzenie znacznika xsl:if i są analogią do znane z programowania instrukcji case. W poniższym przykładzie tworzymy dwa rodzaje formatowania. Elementy dla których price>10 formatujemy na inny kolor. Pozostałe elementy są formatowane standardowo.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose> <xsl:when test="price > 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artist"/>
</td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Przykład 7: Znacznik xsl:choose xsl:otherwise do warunkowego wybierania/formatowania elementów..
8. Znacznik xsl:choose xsl:otherwise ciąg dalszy.
W znacznikach xsl:choose xsl:otherwise element xsl:choose może pojawiać się dowolną ilość razy podobnie jak w instrukcji programowania case. W poniższym przykładzie tworzymy trzy rodzaje formatowania. Elementy dla których price < 9 formatujemy na jeden kolor. Elementy dla których price > 10 na inny. Pozostałe elementy są formatowane standardowo.
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price > 10">
<td bgcolor="#ff00ff"><xsl:value-of select="artist"/></td>
<td><xsl:value-of select="price"/></td>
</xsl:when>
<xsl:when test="price < 9">
<td bgcolor="#cccccc"><xsl:value-of select="artist"/></td>
<td><xsl:value-of select="price"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artist"/></td>
<td><xsl:value-of select="price"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Przykład 8: Znacznik xsl:choose xsl:otherwise do warunkowego wybierania/formatowania elementów..