Wprowadzenie do XML i XSLT

Transkrypt

Wprowadzenie do XML i XSLT
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.:
<?xml version="1.0" encoding="utf-8"?>
Dokument XML zawiera dane, których strukturę można przedstawić przy pomocy drzewa, np.:
<info>
<do>Piotr</do>
<od>Ania</od>
<naglowek>Pytanie</naglowek>
<tresc>Spotkamy się dzisiaj?</tresc>
</info>
Możemy wyróżnić dokładnie jeden element główny (root element):
<info>...</info>
Następne linie określają potomków elementu głównego:
<do>Piotr</do>
<od>Ania</od>
<naglowek>Pytanie</naglowek>
<tresc>Spotkamy się dzisiaj?</tresc>
W związku z tym drzewo przykładowego dokumentu wygląda następująco:
info
do
od
naglowek
tresc
A treść dokumentu ma postać:
<?xml version="1.0" encoding="utf-8"?>
<info>
<do>Piotr</do>
<od>Ania</od>
<naglowek>Pytanie</naglowek>
<tresc>Spotkamy się dzisiaj?</tresc>
</info>
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">...</info>
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">
<do>Piotr</do>
<od>Ania</od>
</info>
−
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:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE info [
<!ELEMENT info (do,od,naglowek,tresc)>
<!ELEMENT do
(#PCDATA)>
<!ELEMENT od
(#PCDATA)>
<!ELEMENT naglowek (#PCDATA)>
<!ELEMENT tresc
(#PCDATA)>
]>
<info>
<do>Piotr</do>
<od>Ania</od>
<naglowek>Pytanie</naglowek>
<tresc>Spotkamy się dzisiaj?</tresc>
</info>
Deklaracja DTD może być też umieszczona w osobnym pliku. Wtedy w dokumencie XML
dołączamy instrukcję:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE info SYSTEM ”info.dtd”>
<info>
<do>Piotr</do>
<od>Ania</od>
<naglowek>Pytanie</naglowek>
<tresc>Spotkamy się dzisiaj?</tresc>
</info>
A plik info.dtd ma postać:
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
info (do,od,naglowek,tresc)>
do
(#PCDATA)>
od
(#PCDATA)>
naglowek (#PCDATA)>
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
<!ELEMENT
<!ELEMENT
<!ELEMENT
<!ELEMENT
br EMPTY>
info ANY>
do (#PCDATA)>
do (#PCDATA)>
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 version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="styl.css"?>
<info>
<do>Piotr</do>
<od>Ania</od>
<naglowek>Pytanie</naglowek>
<tresc>Spotkamy się dzisiaj?</tresc>
</info>
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"?>
<info>
<do>Piotr</do>
<od>Ania</od>
<naglowek>Pytanie</naglowek>
<tresc>Spotkamy się dzisiaj?</tresc>
</info>
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
polu select elementu, np.: <xsl:for-each select="catalog/cd">.
W przypadku polecenia for-each możliwe jest filtrowanie otrzymanego
<xsl:for-each select="catalog/cd[artist='Bob Dylan']">.
określonego w
wyniku, np.:
Dostępne są również następujące polecenia:
− sortowanie: <xsl:sort select="wykonawca"/>
− instrukcja warunkowa if: <xsl:if test="price &gt; 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 &gt; 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>