LABORATORIUM 5 WSTĘP DO SIECI TELEINFORMATYCZNYCH WPROWADZENIE DO XML I XSLT 1. Wstęp XML (Extensible Markup Language Rozszerzalny Język Znaczników) to język formalny przeznaczony do reprezentowania danych w sposób ustrukturalizowany. Język ten jest niezależny od platformy i systemu operacyjnego, co pozwala na swobodną wymianę dokumentów pomiędzy różnymi systemami. Natomiast, w odróżnieniu od HTML, nie służy on do określenia sposobu prezentacji informacji. XML jest również używany do opisu nowych języków programowania internetowego (XHTML, WAP, WML, RSS, itd.). 2. Struktura dokumentu XML Dokument XML zawsze rozpoczyna się od deklaracji, która określa używaną wersję standardu XML oraz stosowane kodowanie znaków, np.: Dokument XML zawiera dane, których strukturę można przedstawić przy pomocy drzewa, np.: Możemy wyróżnić dokładnie jeden element główny (root element):... Następne linie określają potomków elementu głównego: W związku z tym drzewo przykładowego dokumentu wygląda następująco: info do od naglowek tresc
A treść dokumentu ma postać: 3. Parametry (atrybuty) elementów Parametry w XML (podobnie jak w HTML) pozwalają na przekazanie dodatkowej informacji na temat elementu, np.: <info data="12/01/2008">... Parametry można stosować wymiennie z elementami podrzędnymi (nie ma reguły kiedy stosować parametry, a kiedy elementy), z uwzględnieniem następujących różnic: Parametry nie mogą zawierać kilku wartości. Parametry nie mogą zawierać struktur drzewiastych. Parametrów nie można łatwo rozszerzać w celu dokonywania późniejszych zmian. 4. Zasady formułowania dokumentu XML Każdy dokument XML zawiera tylko jeden element główny i dowolną liczbę elementów podrzędnych. Każdy element podrzędny może również posiadać elementy podrzędne. Każdy znacznik XML musi posiadać znacznik zamykający, np.: <do>...</do>. Znaczniki XML są case sensitive, tzn. wielkość liter ma znaczenie przy określaniu znacznika (elementy <do>...</do> i <Do>...</Do> są różne). Elementy XML muszą być poprawnie zagnieżdżone, tzn. kolejność zamykania znaczników XML odpowiada kolejności ich otwierania, np.: <b><i>to jest tekst pogrubiony i pochylony</b></i>. Wszystkie parametry znaczników XML muszą być umieszczone w cudzysłowiu, np.: <info data="12/01/2008"> W dokumencie XML kolejne spacje są zachowywane i nie są minimalizowane do jednej (w przeciwieństwie do HTML). 5. Document Type Definition (DTD) Document Type Definition (DTD) służy do określenia struktury i definicji stosowanych bloków (znaczników i parametrów) w dokumencie XML. Ogólna postać DTD jest następująca: <!DOCTYPE element-główwny [deklaracja elementów]> Przykład dokumentu XML zawierającego deklarację DTD:
<!DOCTYPE info [ <!ELEMENT info (do,od,naglowek,tresc)> <!ELEMENT od (#PCDATA)> <!ELEMENT naglowek (#PCDATA)> <!ELEMENT tresc (#PCDATA)> ]> Deklaracja DTD może być też umieszczona w osobnym pliku. Wtedy w dokumencie XML dołączamy instrukcję: <!DOCTYPE info SYSTEM info.dtd > A plik info.dtd ma postać: <!ELEMENT info (do,od,naglowek,tresc)> <!ELEMENT od (#PCDATA)> <!ELEMENT naglowek (#PCDATA)> <!ELEMENT tresc (#PCDATA)> DTD określa następujące rodzaje obiektów XML: elementy parametry (atrybuty) encje PCDATA (parsed character data) analizowany ciąg znaków, CDATA (character data) ciąg znaków. Definicja elementu składa się z jego nazwy i kategorii lub zawartości: <!ELEMENT nazwa kategoria> <!ELEMENT nazwa (zawartość)> Zawartość może być postaci PCDATA, CDATA lub elementów i parametrów: <!ELEMENT nazwa (element_podrzędny_1, element_podrzędny_2,...)> Przykład:
<!ELEMENT br EMPTY> <!ELEMENT info ANY> <!ELEMENT info (do,od,naglowek,tresc)> Parametry (atrybuty) elementu deklaruje się następującym poleceniem: <!ATTLIST nazwa-elementu nazwa-parametru typ-parametru wartość-domyślna> Przykład: <!ATTLIST info date CDATA 1/1/2008 > Encje służą do definiowania stałych wartośći lub wyrażeń używanych w dokumencie XML. Definicja encji wygląda następująco: <!ENTITY nazwa "wartość"> Przykład: <!ENTITY autor "Paweł Sroka"> 6. XML i CSS Dokumenty XML wyświetlane są domyślnie w przeglądarkach w postaci drzewiastej, z uwzględnieniem znaczników. Można jednak, podobnie jak w przypadku HTML, określić sposób prezentacji dokumentu XML przez dołączenie arkusza CSS, np.: <?xml-stylesheet type="text/css" href="styl.css"?> 7. Arkusz XSLT Zalecanym sposobem definiowania stylu wyświetlania dokumentu XML są arkusze XSLT (Extenstible Stylesheet Language Transformations). Dołącza się je w dokumentach XML poleceniem: <?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet type="text/xsl" href="info.xsl"?>
Arkusz XSLT rozpoczyna się od deklaracji, a następnie dołączany jest wzór sposobu wyświetlania dokumentu XML, np: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:template match="/"> <html> <body> <h2>katalog płyt</h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">tytuł</th> <th align="left">wykonawca</th> </tr> <xsl:for-each select="catalog/cd"> <tr> <td><xsl:value-of select="tytul"/></td> <td><xsl:value-of select="wykonawca"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> Odpowiadający plik XML ma postać: <?xml version="1.0" encoding="iso-8859-1"?> <?xml-stylesheet type="text/xsl" href="cdcatalog.xsl"?> <catalog> <cd> <tytul>empire Burlesque</tytul> <wykonawca>bob Dylan</wykonawca> <rok>1985</rok> </cd>... </catalog> Polecenie <xsl:template> służy do zdefiniowania wzorca wyświetlania dokumentu XML. Parametr match= / określa, że wzorzec odnosi się do elementu głównego dokumentu. Element <xsl:value-of> służy do wydobycia wartości elementu XML, np.: <xsl:value-of select="tytul"/>. Element <xsl:for-each> służy do wybrania każdego elementu podrzędnego dla określonego w polu select elementu, np.: <xsl:for-each select="catalog/cd">. W przypadku polecenia for-each możliwe jest filtrowanie otrzymanego wyniku, np.: <xsl:for-each select="catalog/cd[artist='bob Dylan']">. Dostępne są również następujące polecenia: sortowanie: <xsl:sort select="wykonawca"/> instrukcja warunkowa if: <xsl:if test="price > 10">...</xsl:if> instrukcja choose (pozwala wybrać jedną z opcji zależnie od warunku, podobna do switch w Matlabie): <xsl:choose>
<xsl:when test="rok > 1985"> <td bgcolor="#ff00ff"> <xsl:value-of select="wykonawca"/></td> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="wykonawca"/></td> </xsl:otherwise> </xsl:choose>