1 XML
1.1 Úvod
V dnešnej dobe IT technológii sa čoraz viacej kladie dôraz na komunikáciu a to
nielen medzi ľudmi ale samozrejme aj medzi strojmi. Z toho vyplýva potreba
uchovávat informácie. Od počiatku IT technológii sa rieši problém optimálneho
uchovávania informácii tak, aby ich bolo možné jednoducho triediť, katalogizovať,
vyhladávať v nich informácie a rýchlo k nim pristupovat. Prvé počítačové
spracovanie údajov sa datuje do 50. rokov. Za tento čas vzniklo niekoľko
databázových modelov pre prístup k údajom v rôznych formách. Cez súborové
databázové modely, modely hierarchické, a sietové prišiel vývoj aj k databázam
relačným a databázam objektovým. No na to, aby sa počítače či iné stroje medzi
sebou dokázali dohovoriť, potrebujú, tak ako ľudia, poznať spoločný jazyk. A
presne preto v rokoch 1996 - 1981 vznikol jazyk XML.
Jazyk XML - eXtensible Markup Language (rozšíritelný značkovací jazyk),
bol definovaný pracovnou skupinou W3C2. Táto skupina popísala jazyk takto:
„XML je podmnožina jazyka SGML (Standard Generalized Markup Language). Jeho cieľom je umožnit použitie SGML na posielanie, prijímanie a spracovávanie dát na webe, práve tak ako to je u jazyka HTML. XML ja navrhnutý pre ľahkú implementáciu a spoluprácu s SGML a HTML."
Už z definície jazyka XML vyplýva, že je určený na štruktúrovanie dát. XML nie je jazyk programovací, ale značkovací. XML je vlastne sada pravidiel pre vytvorenie textového formátu, ktorý umožnuje uchovávanie dát v štruktúrovanej forme. Typickým príkladom štrukturovaných dát sú tabuľky. A preto bolo XML napríklad využité ako stavebný prvok webovej databázy Flying Squirrel. :-)
1.2 Použitie
Sila XML je najmä v jeho hierarchickej štruktúre a pomerne jednoduchom spôsobe kódovania. Umožňuje popisovať - označovať ľubovoľné dáta a prenášať ich medzi rôznymi aplikáciami a platformami. Hlavnou ideou XML je oddelenie obsahu a dizajnu dát. ( Spojovacím mostom je XSL, ktorý umožňuje vytvárať množstvo výstupných formátov. )
XML je formát súboru obsahujúci dáta. Zvláštnym ho robí to, že je široko prijímaný ako štandard so schopnosťou existencie na akejkoľvek platforme a používaný masívnym, stále rastúcim počtom aplikácií a programovacích jazykov.
Jazyk XML nám dovoľuje vytvárať štruktúrované dokumenty veľmi flexibilným spôsobom. Dá sa použiť k vytváraniu dokumentov, ktoré sa zdanlivo podobaju dokumentom HTML; jazyk XML sa však od HTML líši a používa sa k zásadne iným účelom. Táto podobnosť pochádza od rovnakých rodičov – obidva jazyky sú odvodené od štandardu definície jazyka SGML. Ten sám o sebe nie je žiadny jazyk, lae iba spôsob definovania jazykov vyvinutých podľa jeho obecných princípov. Existuje tu však dôležitý rozdiel v tom, akým spôsobom sú jazyky XML a HTML odvodené od SGML. XML je podmnožina SGML – ľahšia verzia, ktorá bola oproti SGML zjednodušená, aby umožňovala použitie na sieti WWW, ale aj ako formát výmeny dát. Toto zjednodušenie robí zápis dokumentov vychádzajúcich z XML jednoduchším. Oproti tomu jazyk HTML je aplikáciou SGML – je to teda konkrétny jazyk, ktorý dodržuje štandard SGML.
XML a HTML v skutočnosti slúžia veľmi odlišným účelom. Dokument HTML obsahuje značky indikujúce, ako má byť dokument naformátovaný, neobsahuje však žiadne informácie o vlastnom obsahu. Inými slovami HTML obsahuje iba informácie o zobrazení dát a neobsahuje žiadne údaje o tom, o aké dáta sa jedná. XML sa pokúša oddeliť obsah a jeho reprezentáciu. Dokumenty XML obsahujú informácie v štrukturovanej forme, ktorá sa zdanlivo veľmi podobá HTML. Dôležitým rozdielom je fakt, že môžeme definovať svoje vlastné značky, ktoré určujú štruktúru dát.
1.3 XML dokument
Každý dokument XML sa skladá z kombinácie dát značiek a znakov. Značky dávajú dokumentu XML štruktúru, zatiaľ čo znaky predstavujú iba vlastný obsah. Všetky dokumenty XML spĺňajúce špecifikáciu XML musia dodržiavať isté pravidlá – potom sú považované za správne štruktúrované.
- Každý element XML musí mať začiatočnú aj koncovú značku. „Prázdne“ elementy bez koncovej značky (ako napríklad <IMG> alebo <HR> v jazyku HTML) nie sú v XML povolené. Je tu však skrátený zápis, ktorý sa dá použiť v prípade, keď daný element neobsahuje žiadne dáta. Namiesto <empty></empty> môžeme použiť alternatívu <empty />. Tieto dve možnosti sa považujú za zhodné.
- Dokument XML musí obsahovať minimálne jeden element, nazýva sa aj koreňový element. To zaisťuje hierarchickú štruktúru dokumentu XML. Taktiež musí XML dokument obsahovať definíciu XML dokumentu.
- Počiatočné a koncové značky každého elementu musia byť riadne vnorené – vnorený element musí byť plno obsiahnutý vo svojom nadriadenom elemente. Inými slovami, počiatočné a koncové značky vložených elementov sa nesmú prekrývať.
Ak dokument XML spĺňa tieto pravidlá , potom je správne štruktúrovaný.
1.4 Výhody XML
- Textový formát.
- Podpora kódovania Unicode, umožnujúci zapísanie takmer každého jazyka.
- Dokáže reprezentovať najviac používané dátové štruktúry: záznamy, zoznamy and stromy.
- Dokument popisujúci sám-seba.
- Jednoduchosť písania dopytovacích a parsovacích jazykov vďaka jasnej štruktúre.
- Založený na medzinárodných štandartoch.
- Môže byť okamžite upravený.
- Podporuje validáciu, napr. XSD alebo Schematron.
1.5 Nevýhody XML
- XML dokumenty sú väčšinou objemnejšie ako binárne reprezentácie tých istých dát.
- Žiadna podpora dátových typov ako napr. integer, string alebo boolean.
- Hierarchický model XML je pri reprezentácii obmedzený na relačný model alebo na orientovaný graf.
- XML namespaces sú problematické pri písaní parserov
2 Zobrazenie XML pomocou CSS
2.1 Úvod
Pretože si v XML vymýšľame vlastné elementy, prehliadač nevie ako má tieto elementy zobraziť. XML dokumenty je možné zobrazovať napríklad pomocou dokumentov štýlov CSS. Vytvorením a pridaním dokumentu CSS poskytneme prehliadaču informácie o zobrazení XML dokumentu. Výhodne sme tak oddelili dáta od formátu (zobrazenia).
Internet Explorer nerozlišuje v CSS štýloch malé a veľké písmená, resp. ich ignoruje. Nakoľko ale je možné v XML dokumentoch rozlišovať pomocou veľkosti písmen jednotlivé elementy, nastáva problém pri zobrazovaní takéhoto XML dokumentu. ( <book> je v XML považovaný za iný element ako <Book> alebo <BOOK> )
Taktiež je možné použitie viacnásobného selektora v CSS ako pri klasickom HTML dokumente, alebo selektovanie pomocou kontextových (úrovňových) selektorov.
2.2 Použitie
Pre zobrazenie XML dokumentu pomocou CSS dokumentu je v XML nutné zadefinovať špeciálnu definíciu xml-stylesheet, ktorá priradí XML dokumentu konkrétnu šablónu CSS.
Príklad XML dokumentu:
<INVENTORY> <BOOK> <TITLE>The Adventures of Huckleberry Finn</TITLE> <AUTHOR>Mark Twain</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>298</PAGES> <PRICE>$5.49</PRICE> </BOOK> <BOOK> <TITLE>Leaves of Grass</TITLE> <AUTHOR>Walt Whitman</AUTHOR> <BINDING>hardcover</BINDING> <PAGES>462</PAGES> <PRICE>$7.75</PRICE> </BOOK> <BOOK> <TITLE>The Legend of Sleepy Hollow</TITLE> <AUTHOR>Washington Irving</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>98</PAGES> <PRICE>$2.95</PRICE> </BOOK> <BOOK> <TITLE>The Marble Faun</TITLE> <AUTHOR>Nathaniel Hawthorne</AUTHOR> <BINDING>trade paperback</BINDING> <PAGES>473</PAGES> <PRICE>$10.95</PRICE> </BOOK> <BOOK> <TITLE>Moby-Dick</TITLE> <AUTHOR>Herman Melville</AUTHOR> <BINDING>hardcover</BINDING> <PAGES>724</PAGES> <PRICE>$9.95</PRICE> </BOOK> <BOOK> <TITLE>The Portrait of a Lady</TITLE> <AUTHOR>Henry James</AUTHOR> <BINDING>mass market paperback</BINDING> <PAGES>256</PAGES> <PRICE>$4.95</PRICE> </BOOK> <BOOK> <TITLE>The Scarlet Letter</TITLE> <AUTHOR>Nathaniel Hawthorne</AUTHOR> <BINDING>trade paperback</BINDING> <PAGES>253</PAGES> <PRICE>$4.25</PRICE> </BOOK> <BOOK> <TITLE>The Turn of the Screw</TITLE> <AUTHOR>Henry James</AUTHOR> <BINDING>trade paperback</BINDING> <PAGES>384</PAGES> <PRICE>$3.35</PRICE> </BOOK> </INVENTORY>Parsovanie kompletne
3 XSL a XSLT
3.1 Úvod
Pre zobrazenie XML dokumentu je XSLT omnoho silnejšie a flexibilnejšie ako CSS, nakoľko CSS iba riadok po riadku prepisuje XML a zobrazuje ho, XSLT ale ponúka plnú kontrolu nad výstupom. Extensible Stylesheet Language Transformations (XSLT) je XML-orientovaný jazyk určený na prevádzanie XML dokumentov na ľudsky čítateľné dokumenty. Pôvodný dokument sa nezmení, pri transformácii sa vytvorí nový na základe pôvodného. Výstupom môže byť iný formát, napr. HTML, alebo čistý text. XSLT sa najčastejšie používa na konvertovanie XML dokumentov na HTML dokumenty alebo xHTML pre webové stránky (viď Krajči :) ), alebo zložitejšie XML dokumenty aj na generovanie PDF dokumentov.
Ako jazyk môžeme XSLT zaradiť medzi deklaratívne jazyky, syntakticky je blízky jazyku SNOBOL alebo AWK. XSLT je Turingovsky kompletný.
Diagram transformácie XML dokumentu |
XSLT processor môže byť realizovaný dvoma spôsobmi: server-side (vykonávajúci sa na serveri), client-side (vykonávajúci sa u klienta). XSLT procesory môžu byť dostupné samostatne, alebo ako súčasť iného softwaru, ako napríklad webové prehliadače, frameworky ako napr. Java a .NET, alebo ako súčasť operačných systémov ( Windows XP má knižnicu MSXML, ktorá zahŕňa XSLT procesor).
3.2 XSL
XSL je jazyk používaný na transformáciu XML dokumentov pomocou XSLT procesora. Dokument XML môže byť transformovaný do iného XML dokumentu, alebo iného štruktúrovaného formátu, napr. HTML alebo PDF. V rodine jazykov XSL existujú tri formy:
- XSL Transformations (XSLT): jazyk pre transformovanie XSL dokumentov
- XSL Formatting Objects (XSL-FO): XML jazyk pre špecifikáciu vizuálneho zobrazenia dokumentu XML
- the XML Path Language (XPath): Jazyk dopytujúci nad XML dokumentami, využívaný napr. XSLT.
Rodinka XML a vzťahy |
Tieto tri špecifikácie sú dostupné ako W3C Recommendations.
3.3 Použitie
Namiesto toho aby štýl XSLT obsahoval pravidla ako v CSS, obsahuje jednu alebo viacej šablón. Šablona hovorí prehliadaču, ako zobraziť dokument XML pomocou inštrukcií pre konkrétnu transformáciu elementu, atribútu a dalších komponentov dokumentu XML.
Príklad XML dokumentu:
<BOOK> <TITLE>Moby-Dick</TITLE> <AUTHOR> <FIRSTNAME>Herman</FIRSTNAME> <LASTNAME>Melville</LASTNAME> </AUTHOR> <BINDING>hardcover</BINDING> <PAGES>724</PAGES> <PRICE>$9.95</PRICE> </BOOK>Parsovanie kompletne
Ukážka dokumentu spracovaného pomocou XSLT šablóny.
Ukážkový XML dokument obsahuje iba jeden element BOOK. Keby ale dokument XML obsahoval viac elementov BOOK, touto technikou by sa zobrazil iba prvý z nich. Nasledujúci XML dokument už obsahuje elementov BOOK viacero. Upravíme XSLT preto tak, aby zobrazilo všetky elementy book.
- Príklad XML dokumentu: XsltDemo02.xml
- Príklad XSL dokumentu pre XSL: XsltDemo02.xsl
Ďalším spôsobom, ako zobraziť opakujúce sa elementy je vytvorenie samostatnej šablóny, ktorá zodpovedá danému elementu a aplikovať túto šablónu pomocou elementu xsl:apply-templates.
- Príklad XML dokumentu: XsltDemo03.xml
- Príklad XSL dokumentu pre XSL: XsltDemo03.xsl
Element xsl:apply-templates hovorí prehliadaču, že má aplikovať šablonu pre každý element, ktorý sa zhoduje so selektorom. Ďalej je možné použiť element select, kde pomocou jazyku XPath môžete definovať zložitejší dopyt, ako aj pristupovať k atribútom XML.
Normálne su elementu XML dokumenu spracovávané v takom poradí, v akom sú v XML dokumente zapísané. Čo ale ak chceme jednotlivé výstupy zotriediť. Pomocou XSLT je možné výstup triediť funkciou sort.
Príklad:
<xsl:for-each select="INVENTORY/BOOK">
<xsl:sort
select="AUTHOR/LASTNAME"
data-type="text"
order="ascending" />
<xsl:sort
select="AUTHOR/FIRSTNAME"
data-type="text"
order="ascending"/>
<xsl:sort
select="PAGES"
data-type="number"
order="descending"/>
- Príklad XML dokumentu: XsltDemo04.xml (zotriedené podľa abecedy)
- Príklad XSL dokumentu pre XSL: XsltDemo04.xsl
Výrazová sila XSLT je poháňaná dopytovacím jazykom XPath, a tak ponúka aj možnosť dopytovať atribúty. Technicky není atribut považovaný za potomka elementu, v ktorom sa nachádza, skôr nesie dodatkovú informáciu o danom elemente. Nasledujúci príklad ukazuje na XML dokument, kde do každého elementu BOOK bol pridaný atribút InStock a každý element AUTHOR má pridaný atribút Born.
- Príklad XML dokumentu: XsltDemo05.xml
- Príklad XSL dokumentu pre XSL: XsltDemo05.xsl
Taktiež je možné v XSLT definovať podmienky nasledujúcim spôsobom :
Príklad:
<xsl:if test="@InStock = 'no'">Out of Stock!</xsl:if> <xsl:choose>
<xsl:when test="PAGES <=300">*</xsl:when> <xsl:otherwise>***</xsl:otherwise> </xsl:choose>
4 Úlohy
Vytvorte menu z minulého cvičenia ale použitím nasledujúcich technológii:
- Vytvorením XML dokumentu a definovaním štýlu v dokumente CSS
- Definovaním štýlu v dokumente XSL pre priložený XML dokument
Pripravený pracovný XML dokument: menu.xml
Dokument HTML s tabuľkou: tabulka.html
Obrázok menu: menu.jpg
Použité farby: #003466, #669ACC