Otvorené formáty súborov kancelárskych softvérov: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
 
(9 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených)
Riadok 20: Riadok 20:
 
Začiatkom osemdesiatych rokov dvadsiateho storočia IBM, DEC a ďalšie veľké priemyselné firmy prišli k dohode o potrebe štandardu pre výmenu údajov medzi rôznymi počítačmi. Ich iniciatíva viedla k vzniku štandardu ISO (International Organization for Standardization) s číselným označením 8879 z roku 1986. Obsahuje definíciu SGML (Standard Generalized Markup Language). Je to jazyk, ktorého cieľom bolo umožniť zdieľanie informácií medzi podnikmi s rozdielnymi informačnými systémami. Umožňuje oddeliť dáta od ich spracovania. Na základe analýzy štruktúry dát sa vytvára slovník, označovaný ako DTD (Document Type Definition). Tento slovník naznačuje obsah jednotlivých objektov tzv. objektovým modelom s presne definovanou syntaxou. Pretože rôzne množiny údajov môžu mať rôzne dátové objekty, líšia sa aj ich slovníky DTD. Dokument SGML je vytváraný ako textový dokument. Jednotlivé prvky dokumentu sú oddelené značkami, ktoré sú definované v slovníku DTD. Ako text je dokument prenositeľný na rôzne systémy, ktoré majú implementovaný analyzátor SGML dokumentov. Analyzátor tento dokument načíta, s využitím slovníka DTD a značiek v dokumente je schopný určiť štruktúru dokumentu a spracovať jeho obsah. Nevýhodou štandardu SGML bolo, že nebol schopný reagovať na požiadavky webu. Vznikol v dobe pomalých a drahých počítačov. Aby bolo možné z týchto systémov získať maximum, štandard SGML bol vybavený minimalizačnými nástrojmi. Tie mali výsledné textové súbory dokumentov stlačiť na čo najmenšiu veľkosť. Dôsledkom boli zložité, drahé a pomalé analyzátory a veľká finančná náročnosť zavádzania SGML do praxe. Skutočnosť, že SGML je štandardom ISO, sa premietla do odmietnutia zmien, ktoré smerovali k jeho zjednodušeniu. Zjednodušenia boli požadované pre možnosť použitia štandardu pri výmenu údajov vo webe a pre možnosť zobrazenia dokumentov prehliadačmi. Namiesto priameho použitia štandardu SGML ako celku veľké rozšírenie získala iba jeho aplikácia HTML - HyperTextMarkup Language. Pôvodcom jazyka je Tim Berners-Lee. Veľký ohlas mala verzia 2.0, ktorú Berners-Lee a D. Connolly zverejnili v novembri 1995 ako RFC1866. Ďalším medzníkom je január 1997. Bolo zverejnené odporúčanie W3C (World Wide Web Consorcium) HTML 3.2. Ale ani vtedy sa vývoj HTML neskončil. Pokračovalo pridávanie nových značiek. Objavila sa možnosť tvorby skriptov. Doplnené boli kaskádové štýly, formuláre, rámce. Popri statických HTML dokumentoch, čím ďalej tým viac údajov na webových serveroch sa ukladá v databázach. Čím ďalej tým viac dokumentov sa vytvára dynamicky programami alebo skriptami s využitím údajov v databázach. Rozširuje sa eBusines, eLearning, eBanking. Narastajú požiadavky na výmenu údajov medzi strojmi. HTML bolo pôvodne určené pre prezentáciu textov. Človek, čitateľ, si z textu potrebnú informáciu vyberie. Aby to však mohli robiť aj stroje, je potrebné dôslednejšie formátovať údaje a treba mať jasné pravidlá, podľa ktorých je možné zistiť, či sú údaje úplné. HTML k tomu nestačí, SGML je zložité a z tohto dôvodu vzniklo XML. V roku 1996 bola pod záštitou W3C vytvorená pracovná skupina, ktorej cieľom malo byť zjednodušenie SGML pre potreby webu. Okrem širokej akceptovateľnosti výsledného štandardu pre potreby webu sa mala dosiahnuť aj možnosť jednoduchej tvorby programov pre spracovanie XML dokumentov. Prvá verzia odporúčania XML bola zverejnená vo februári 1998. V októbri roku 2000 bola zverejnená revízia tohto odporúčania pod názvom Extensible Markup Language (XML) 1.0 (Second Edition). Odporúčanie definuje, čo je to XML dokument, čo je prvok (element), jeho počiatočné a koncové ohraničenie, značka, atribúty aj obsah prvku. Určuje pravidlá pre voľbu názvov prvkov - značiek, atribútov. Stanovuje tiež, kedy je dokument dobre sformovaný (well-formed - niekedy prekladané tiež správne sformátovaný) a tiež kedy je dokument platný (valid). Následne vznikla špecifikácia XHTML 1.0. Špecifikácia XHTML 1.0 je v podstate prepracovaným HTML 4.01 tak, aby splňovalo obmedzenia kladené na jazyk XML. Takže XHTML je  aplikáciou XML. Množina elementov a atribútov je plne zdedená z HTML 4.01. Okrem obmedzení, ktoré vznikli z dôvodu dodržovania prísnejšej syntaxe jazyka XML, ďalej definuje špecifikáciu niekoľkých doporučených postupov, ktoré majú zaistiť spätnú kompatibilitu XHTML dokumentov s HTML prehliadačmi.
 
Začiatkom osemdesiatych rokov dvadsiateho storočia IBM, DEC a ďalšie veľké priemyselné firmy prišli k dohode o potrebe štandardu pre výmenu údajov medzi rôznymi počítačmi. Ich iniciatíva viedla k vzniku štandardu ISO (International Organization for Standardization) s číselným označením 8879 z roku 1986. Obsahuje definíciu SGML (Standard Generalized Markup Language). Je to jazyk, ktorého cieľom bolo umožniť zdieľanie informácií medzi podnikmi s rozdielnymi informačnými systémami. Umožňuje oddeliť dáta od ich spracovania. Na základe analýzy štruktúry dát sa vytvára slovník, označovaný ako DTD (Document Type Definition). Tento slovník naznačuje obsah jednotlivých objektov tzv. objektovým modelom s presne definovanou syntaxou. Pretože rôzne množiny údajov môžu mať rôzne dátové objekty, líšia sa aj ich slovníky DTD. Dokument SGML je vytváraný ako textový dokument. Jednotlivé prvky dokumentu sú oddelené značkami, ktoré sú definované v slovníku DTD. Ako text je dokument prenositeľný na rôzne systémy, ktoré majú implementovaný analyzátor SGML dokumentov. Analyzátor tento dokument načíta, s využitím slovníka DTD a značiek v dokumente je schopný určiť štruktúru dokumentu a spracovať jeho obsah. Nevýhodou štandardu SGML bolo, že nebol schopný reagovať na požiadavky webu. Vznikol v dobe pomalých a drahých počítačov. Aby bolo možné z týchto systémov získať maximum, štandard SGML bol vybavený minimalizačnými nástrojmi. Tie mali výsledné textové súbory dokumentov stlačiť na čo najmenšiu veľkosť. Dôsledkom boli zložité, drahé a pomalé analyzátory a veľká finančná náročnosť zavádzania SGML do praxe. Skutočnosť, že SGML je štandardom ISO, sa premietla do odmietnutia zmien, ktoré smerovali k jeho zjednodušeniu. Zjednodušenia boli požadované pre možnosť použitia štandardu pri výmenu údajov vo webe a pre možnosť zobrazenia dokumentov prehliadačmi. Namiesto priameho použitia štandardu SGML ako celku veľké rozšírenie získala iba jeho aplikácia HTML - HyperTextMarkup Language. Pôvodcom jazyka je Tim Berners-Lee. Veľký ohlas mala verzia 2.0, ktorú Berners-Lee a D. Connolly zverejnili v novembri 1995 ako RFC1866. Ďalším medzníkom je január 1997. Bolo zverejnené odporúčanie W3C (World Wide Web Consorcium) HTML 3.2. Ale ani vtedy sa vývoj HTML neskončil. Pokračovalo pridávanie nových značiek. Objavila sa možnosť tvorby skriptov. Doplnené boli kaskádové štýly, formuláre, rámce. Popri statických HTML dokumentoch, čím ďalej tým viac údajov na webových serveroch sa ukladá v databázach. Čím ďalej tým viac dokumentov sa vytvára dynamicky programami alebo skriptami s využitím údajov v databázach. Rozširuje sa eBusines, eLearning, eBanking. Narastajú požiadavky na výmenu údajov medzi strojmi. HTML bolo pôvodne určené pre prezentáciu textov. Človek, čitateľ, si z textu potrebnú informáciu vyberie. Aby to však mohli robiť aj stroje, je potrebné dôslednejšie formátovať údaje a treba mať jasné pravidlá, podľa ktorých je možné zistiť, či sú údaje úplné. HTML k tomu nestačí, SGML je zložité a z tohto dôvodu vzniklo XML. V roku 1996 bola pod záštitou W3C vytvorená pracovná skupina, ktorej cieľom malo byť zjednodušenie SGML pre potreby webu. Okrem širokej akceptovateľnosti výsledného štandardu pre potreby webu sa mala dosiahnuť aj možnosť jednoduchej tvorby programov pre spracovanie XML dokumentov. Prvá verzia odporúčania XML bola zverejnená vo februári 1998. V októbri roku 2000 bola zverejnená revízia tohto odporúčania pod názvom Extensible Markup Language (XML) 1.0 (Second Edition). Odporúčanie definuje, čo je to XML dokument, čo je prvok (element), jeho počiatočné a koncové ohraničenie, značka, atribúty aj obsah prvku. Určuje pravidlá pre voľbu názvov prvkov - značiek, atribútov. Stanovuje tiež, kedy je dokument dobre sformovaný (well-formed - niekedy prekladané tiež správne sformátovaný) a tiež kedy je dokument platný (valid). Následne vznikla špecifikácia XHTML 1.0. Špecifikácia XHTML 1.0 je v podstate prepracovaným HTML 4.01 tak, aby splňovalo obmedzenia kladené na jazyk XML. Takže XHTML je  aplikáciou XML. Množina elementov a atribútov je plne zdedená z HTML 4.01. Okrem obmedzení, ktoré vznikli z dôvodu dodržovania prísnejšej syntaxe jazyka XML, ďalej definuje špecifikáciu niekoľkých doporučených postupov, ktoré majú zaistiť spätnú kompatibilitu XHTML dokumentov s HTML prehliadačmi.
  
[[Súbor:Príklad.jpg]]
+
[[Súbor:Príklad.jpg|center|framed|Obrázok 1.1 Vzťah SGML, XML, HTML a XHTML]]
 
 
Obrázok 1.1 Vzťah SGML, XML, HTML a XHTML
 
  
 
== XML ==
 
== XML ==
Riadok 31: Riadok 29:
 
Na tomto jednoduchom príklade si ukážeme čo vlastne XML je a ako vyzerá:
 
Na tomto jednoduchom príklade si ukážeme čo vlastne XML je a ako vyzerá:
  
<center>[[Image:strukturaxml.jpg]]</center>
+
[[Image:strukturaxml.jpg|center]]
  
 
Ako ste si asi mohli všimnúť, je to krátka správa od Jany pre Tomáša. Toto je jedna z&nbsp;nesporných výhod XML, je veľmi dobre čitateľné a&nbsp;zrozumiteľné aj pre bežného užívateľa. Teraz si poďme popísať čo všetko v&nbsp;tomto príklade môžeme vidieť.
 
Ako ste si asi mohli všimnúť, je to krátka správa od Jany pre Tomáša. Toto je jedna z&nbsp;nesporných výhod XML, je veľmi dobre čitateľné a&nbsp;zrozumiteľné aj pre bežného užívateľa. Teraz si poďme popísať čo všetko v&nbsp;tomto príklade môžeme vidieť.
Riadok 45: Riadok 43:
  
 
Na rozdiel od jazyka HTML kde by bez problémov fungoval takýto zápis:
 
Na rozdiel od jazyka HTML kde by bez problémov fungoval takýto zápis:
 
+
<source lang="html4strict">
<nowiki><b><i>&nbsp;Tento&nbsp;text&nbsp;je&nbsp;tučný&nbsp;a&nbsp;kurzívou</b></i>&nbsp;&nbsp;</nowiki>
+
<b><i>Tento text je tučný a kurzívou</b></i>
 
+
</source>
 
V&nbsp;dokumentoch XML by táto syntax nebola správne a&nbsp;je potrebné ju pozmeniť nasledujúcim spôsobom:
 
V&nbsp;dokumentoch XML by táto syntax nebola správne a&nbsp;je potrebné ju pozmeniť nasledujúcim spôsobom:
 
+
<source lang="html4strict">
<nowiki><b><i>&nbsp;Tento&nbsp;text&nbsp;je&nbsp;tučný&nbsp;a&nbsp;kurzívou</i></b>&nbsp;</nowiki>
+
<b><i>Tento text je tučný a kurzívou</i></b>
 
+
</source>
 
* Atribúty elementu musia byť uzavreté v&nbsp;úvodzovkách
 
* Atribúty elementu musia byť uzavreté v&nbsp;úvodzovkách
  
Toto je element ktorý má nejaký atribút: <nowiki><auto farba=”cierna”></nowiki> , atribúty detailnejšie popisujú daný element. Musia byť uzavreté v&nbsp;jednoduchých (‘ ‘), alebo zložených  
+
Toto je element ktorý má nejaký atribút: <nowiki><auto farba=”cierna”></nowiki> , atribúty detailnejšie popisujú daný element. Musia byť uzavreté v&nbsp;jednoduchých (‘ ‘), alebo zložených (“ “) úvodzovkách. Sú povolené 2 druhy úvodzoviek, lebo ak samotný atribút obsahuje jeden druh úvodzoviek, na jeho uzavretie sa použije ten druhý druh.
 
 
(“ “) úvodzovkách. Sú povolené 2 druhy úvodzoviek, lebo ak samotný atribút obsahuje jeden druh úvodzoviek, na jeho uzavretie sa použije ten druhý druh.
 
  
 
* Ukázali sme si ako sa zapisuje atribút elementu. Z&nbsp;tohto zápisu vidno že názov elementu nesmie obsahovať medzeru, pretože reťazec za medzerou by bol považovaný za atribút. Toto sa rieši nasledovne: <nowiki><nazov_elementu></nowiki>
 
* Ukázali sme si ako sa zapisuje atribút elementu. Z&nbsp;tohto zápisu vidno že názov elementu nesmie obsahovať medzeru, pretože reťazec za medzerou by bol považovaný za atribút. Toto sa rieši nasledovne: <nowiki><nazov_elementu></nowiki>
Riadok 63: Riadok 59:
 
* Komentáre sa v&nbsp;XML zapisujú takto: <nowiki><!--&nbsp;Toto&nbsp;je&nbsp;komentár&nbsp;--></nowiki>&nbsp;
 
* Komentáre sa v&nbsp;XML zapisujú takto: <nowiki><!--&nbsp;Toto&nbsp;je&nbsp;komentár&nbsp;--></nowiki>&nbsp;
 
* V&nbsp;XML existujú tzv. špeciálne znaky (escape characters), ktoré sa nesmú v&nbsp;názvoch a&nbsp;ani v&nbsp;obsahu elementov vyskytnúť. Miesto nich sa používajú tzv. HTML entity ako ukazuje nasledujúca tabuľka:
 
* V&nbsp;XML existujú tzv. špeciálne znaky (escape characters), ktoré sa nesmú v&nbsp;názvoch a&nbsp;ani v&nbsp;obsahu elementov vyskytnúť. Miesto nich sa používajú tzv. HTML entity ako ukazuje nasledujúca tabuľka:
 
+
<center>
'''Tabuľka 1.1 '''Špeciálne znaky
+
{| class="prettytable" style="text-align:center"
{| class="prettytable"
+
|+'''Tabuľka 1.1 '''Špeciálne znaky
| <center>'''Špeciálny znak'''</center>
+
|-
| <center>'''HTML entita'''</center>
+
! '''Špeciálny znak'''
 
+
! '''HTML entita'''
 
|-
 
|-
| <center><nowiki><</nowiki></center>
+
| <nowiki><</nowiki>
| <center>&lt</center>
+
| &lt
 
 
 
|-
 
|-
| <center>&</center>
+
| &
| <center>&amp</center>
+
| &amp
 
 
 
|-
 
|-
| <center>></center>
+
| <nowiki>></nowiki>
| <center>&gt</center>
+
| &gt
 
 
 
|-
 
|-
| <center>‘</center>
+
| <nowiki>‘</nowiki>
| <center>&apos</center>
+
| &apos
 
 
 
|-
 
|-
| <center></center>
+
| “
| <center>&quot</center>
+
| &quot
 
 
 
|}
 
|}
 +
</center>
 
* Ak z&nbsp;nejakého dôvodu potrebujeme použiť špeciálne znaky a nevyhovuje nám použitie ekvivalentných reťazcov, môžeme použiť CDATA sekciu. Sekcia CDATA začína&nbsp;<nowiki><![CDATA[</nowiki>&nbsp;a končí&nbsp;]]>.&nbsp;Všetko vo vnútri je ignorované parserom, takže je možné bez obáv písať špeciálne znaky.&nbsp;CDATA sekcia sa využíva hlavne ak potrebujeme v&nbsp;XML dokumente uviesť kód napísaný v&nbsp;ľubovoľnom programovacom jazyku. V&nbsp;takomto prípade je použitie HTML entít namiesto špeciálnych znakov neprípustné. Je však z&nbsp;pochopiteľných dôvodov zakázaná kombinácia znakov ]]>.
 
* Ak z&nbsp;nejakého dôvodu potrebujeme použiť špeciálne znaky a nevyhovuje nám použitie ekvivalentných reťazcov, môžeme použiť CDATA sekciu. Sekcia CDATA začína&nbsp;<nowiki><![CDATA[</nowiki>&nbsp;a končí&nbsp;]]>.&nbsp;Všetko vo vnútri je ignorované parserom, takže je možné bez obáv písať špeciálne znaky.&nbsp;CDATA sekcia sa využíva hlavne ak potrebujeme v&nbsp;XML dokumente uviesť kód napísaný v&nbsp;ľubovoľnom programovacom jazyku. V&nbsp;takomto prípade je použitie HTML entít namiesto špeciálnych znakov neprípustné. Je však z&nbsp;pochopiteľných dôvodov zakázaná kombinácia znakov ]]>.
  
Riadok 105: Riadok 97:
 
Nasledujúci príklad ukazuje ako pomocou menných priestorov zamedziť kolízii v názvoch elementov:
 
Nasledujúci príklad ukazuje ako pomocou menných priestorov zamedziť kolízii v názvoch elementov:
  
<center>[[Image:pict.jpg]]</center>
+
[[Image:pict.jpg|center]]
  
V dokumente sa vyskytuje dvakrát element tabulka, no vždy je priradený inému mennému priestoru.
+
V dokumente sa vyskytuje dvakrát element tabuľka, no vždy je priradený inému mennému priestoru.
  
 
==XPath==
 
==XPath==
 
Xpath (XML Path Language) vo verzii 1.0 definuje organizáciou W3C schválenú syntax popisu adries častí XML dokumentu. XPath výrazy sa vyhodnotia podľa logického stromu dokumentu a&nbsp;tak sa nájdu odpovedajúce uzly ( elementy, atribúty, text atd.). Spomínaná úroveň abstrakcie chráni vývojára pred zložitosťou fyzickej štruktúry dokumentu a&nbsp;výrazne zjednodušuje prácu.  
 
Xpath (XML Path Language) vo verzii 1.0 definuje organizáciou W3C schválenú syntax popisu adries častí XML dokumentu. XPath výrazy sa vyhodnotia podľa logického stromu dokumentu a&nbsp;tak sa nájdu odpovedajúce uzly ( elementy, atribúty, text atd.). Spomínaná úroveň abstrakcie chráni vývojára pred zložitosťou fyzickej štruktúry dokumentu a&nbsp;výrazne zjednodušuje prácu.  
  
XPath definuje stromový model podľa ktorého sa vyhodnocujú všetky výrazy. Tento model zodpovedá logickej štruktúre XML dokumentu, ktorá je formálne definovaná ako XML Infoset (XML Information set). Obrázok 1.1 ilustruje stromový model XPath
+
XPath definuje stromový model podľa ktorého sa vyhodnocujú všetky výrazy. Tento model zodpovedá logickej štruktúre XML dokumentu, ktorá je formálne definovaná ako XML Infoset (XML Information set). Obrázok 1.2 ilustruje stromový model XPath
 
 
<center>[[Image:xpath1.jpg]]</center>
 
  
<center>'''Obrázok 1.2''' Stromový model XPath</center>
+
[[Image:xpath1.jpg|center|framed|Obrázok 1.2 Stromový model XPath]]
  
 
Väčšina XPath výrazov popisuje množinu uzlov stromu. Napríklad nasledujúcemu výrazu zodpovedajú 2 elementy cena: /faktura/predmet/cena. Tomuto typu výrazu sa hovorí cesta (location path). XPath cesty vyzerajú podobne ako cesty v&nbsp;súborovom systéme, akurát navigujú v&nbsp;rámci stromového modelu, kde identifikujú množinu uzlov(node-set).
 
Väčšina XPath výrazov popisuje množinu uzlov stromu. Napríklad nasledujúcemu výrazu zodpovedajú 2 elementy cena: /faktura/predmet/cena. Tomuto typu výrazu sa hovorí cesta (location path). XPath cesty vyzerajú podobne ako cesty v&nbsp;súborovom systéme, akurát navigujú v&nbsp;rámci stromového modelu, kde identifikujú množinu uzlov(node-set).
Riadok 125: Riadok 115:
  
 
Spolu s&nbsp;množinami uzlov, podporuje XPath ešte ďalšie tri dátové typy: logické hodnoty(Boolean), čísla(number) a textové reťazce(string). XPath definuje, ako sa množiny uzlov porovnávajú s&nbsp;každým z&nbsp;týchto typov a&nbsp;ako sa vynúti potrebný dátový typ.
 
Spolu s&nbsp;množinami uzlov, podporuje XPath ešte ďalšie tri dátové typy: logické hodnoty(Boolean), čísla(number) a textové reťazce(string). XPath definuje, ako sa množiny uzlov porovnávajú s&nbsp;každým z&nbsp;týchto typov a&nbsp;ako sa vynúti potrebný dátový typ.
 
<center>'''Tabuľka 1.2 '''Dátové typy</center>
 
 
  
 
<center>
 
<center>
 
{| class="prettytable"
 
{| class="prettytable"
| '''Dátový typ'''
+
|+'''Tabuľka 1.2 '''Dátové typy
| '''Popis'''
+
|-
 
+
! Dátový typ
 +
! Popis
 
|-
 
|-
 
| Množina uzlov (node-set)
 
| Množina uzlov (node-set)
Riadok 151: Riadok 139:
  
 
|}
 
|}
 +
</center>
  
</center>
 
 
Každý XPath výraz vráti objekt jedného z&nbsp;možných typov. Konkrétny typ tohto objektu je možné vynútiť použitím odpovedajúcej funkcie boolean( ), number( ), alebo string( ). Ak je to potrebné vykoná sa implicitná konverzia objektu na iný dátový typ (napr. ak sa predáva množina uzlov funkcii, ktorá očakáva parameter typu textový reťazec). K porovnaniu a prevodu medzi množinami uzlov a&nbsp;ostatnými dátovými typmi je potrebné uzly zo stromového modelu previesť späť na textový reťazec. XPath definuje, ako v&nbsp;tomto prípade odpovedajúcu reťazcovú hodnotu (string value) získať. Prevádzaním uzlov späť na textové reťazce uľahčuje ich prevod na iné dátové typy a&nbsp;vzájomné porovnávanie medzi rôznymi typmi. Taktiež umožňuje tvorbu veľkého množstva ďalších výrazov.
 
Každý XPath výraz vráti objekt jedného z&nbsp;možných typov. Konkrétny typ tohto objektu je možné vynútiť použitím odpovedajúcej funkcie boolean( ), number( ), alebo string( ). Ak je to potrebné vykoná sa implicitná konverzia objektu na iný dátový typ (napr. ak sa predáva množina uzlov funkcii, ktorá očakáva parameter typu textový reťazec). K porovnaniu a prevodu medzi množinami uzlov a&nbsp;ostatnými dátovými typmi je potrebné uzly zo stromového modelu previesť späť na textový reťazec. XPath definuje, ako v&nbsp;tomto prípade odpovedajúcu reťazcovú hodnotu (string value) získať. Prevádzaním uzlov späť na textové reťazce uľahčuje ich prevod na iné dátové typy a&nbsp;vzájomné porovnávanie medzi rôznymi typmi. Taktiež umožňuje tvorbu veľkého množstva ďalších výrazov.
  
 
Nasledujúca tabuľka zhrňuje typy výrazov podporovaných štandardom XPath. Operátory ktoré sa používajú k&nbsp;tvorbe výrazov sú uvedené od najmenej dôležitých po operátory s&nbsp;najvyššou prioritou. Ku kontrole prednosti operátorov je možné použiť zátvorky.
 
Nasledujúca tabuľka zhrňuje typy výrazov podporovaných štandardom XPath. Operátory ktoré sa používajú k&nbsp;tvorbe výrazov sú uvedené od najmenej dôležitých po operátory s&nbsp;najvyššou prioritou. Ku kontrole prednosti operátorov je možné použiť zátvorky.
 
 
<center>'''Tabuľka 1.3 '''Operátory</center>
 
 
 
 
<center>
 
<center>
 
{| class="prettytable"
 
{| class="prettytable"
| '''Typ výrazu'''
+
|+'''Tabuľka 1.3 '''Operátory
| '''Operátory'''
+
|-
 
+
! '''Typ výrazu'''
 +
! '''Operátory'''
 
|-
 
|-
 
| Cesta
 
| Cesta
| / , //, |
+
| <nowiki>/ , //, |</nowiki>
  
 
|-
 
|-
Riadok 191: Riadok 175:
  
 
|}
 
|}
 +
</center>
 +
 
XPath sa uplatní všade tam, kde je potrebné vyberať z&nbsp;XML dokumentu len určité elementy, na základe vopred daných kritérií. Na XPath sú založené technológie ako XSLT a&nbsp;XQuery.
 
XPath sa uplatní všade tam, kde je potrebné vyberať z&nbsp;XML dokumentu len určité elementy, na základe vopred daných kritérií. Na XPath sú založené technológie ako XSLT a&nbsp;XQuery.
  
 
==XSLT==
 
==XSLT==
 +
Dokument vo formáte XML prináša vo všeobecnosti formu, v&nbsp;ktorej je možné uložiť informácie rôzneho charakteru. Čo však v&nbsp;prípade, že forma nie je pre aktuálnu potrebu práve najvhodnejšia? Iste, XML parser nie je problém a stačí&nbsp;už len zapísať výsledok podľa potrebnej štruktúry. XSLT je práve o&nbsp;tom, ako to&nbsp;urobiť elegantne a&nbsp;efektívne. Samotný štandard eXtensible Stylesheet Language Transformations, akceptovaný konzorciom W3C, má predchodcu Extensible Stylesheet Language (XSL). Z&nbsp;pohľadu programátora tento „programovací jazyk transformácií“ XML údajov je, opäť a&nbsp;znova XML dokumentom, štruktúrou xsl tagov.
 +
 +
Podporuje:
 +
 +
* Flexibilné dátové typy: boolean, number, string, node-set
 +
* Množinu operácií: <nowiki><xsl:template>, <xsl:apply-templates>, <xsl:sort>, …</nowiki>
 +
* Vetvenia a cykly: <nowiki><xsl:if>, <xsl:choose>, <xsl:for-each>, ...</nowiki>
 +
 +
Jednoduchú, ale kompletnú transformáciu dokumentu si ukážeme na príklade „Hello World“. Na začiatku je zdrojový súbor pozdrav.xml:
 +
 +
[[Image:pict3.jpg|center]]
 +
 +
Dokument obsahuje okrem povinných častí procesnú inštrukciu,:
 +
 +
<nowiki><?xml-stylesheet type="text/xsl" href="pozdrav.xsl"?></nowiki>
 +
 +
ktorá definuje odkaz na transformačný súbor pozdrav.xsl. Ten obsahuje jednoduchú kostru a&nbsp;xsl inštrukcie pre transformáciu zdrojového súboru do HTML dokumentu.
 +
 +
[[Image:pict4.jpg|center]]
 +
 +
Výsledkom transformácie je kód jednoduchej HTML stránky:
 +
 +
[[Image:pict8.jpg|center]]
 +
 +
Prvá použitá xsl inštrukcia definuje menný priestor týchto inštrukcií.&nbsp;<nowiki><xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform version="1.0"></nowiki>
 +
 +
Samozrejme, je možné doplniť aj ďalšie, momentálne sa ale obmedzíme na štandard W3C konzorcia. Jadro prevodu stojí na inštrukcii&nbsp;<nowiki><xsl:template match="/pozdrav"></nowiki>''.''&nbsp;Tá, zjednodušene povedané, definuje šablónu na prevod. Do výsledného dokumentu sa vloží len to, čo je obsiahnuté v&nbsp;rámci šablóny vzťahujúcej sa na koreňový uzol zdrojového súboru. V&nbsp;našom prípade to ale znamená aj informáciu, od koho pochádza pozdrav. Docielili sme to inštrukciou&nbsp;<nowiki><xsl:apply-templates select="od-koho"/></nowiki>'',''&nbsp;ktorá v&nbsp;mieste svojho volania aplikuje našu druhú definovanú šablónu. Tento jednoduchý spôsob vnárania je synonymom volania procedúr a funkcií. Poslednou inštrukciou je <nowiki><xsl:value-of></nowiki>&nbsp;vkladajúca hodnotu uzla definovaného v&nbsp;atribúte select do miesta svojho volania. Bodka je pritom ekvivalentom názvu uzla, v&nbsp;ktorom je inštrukcia volaná.
 +
 +
<center>[[Image:XSLT schema.jpg|center|framed|Obrázok 1.3 Schéma princípu XSLT]]</center>
 +
 +
Tento príklad vystihuje dôležitú vlastnosť XSLT transformácií - je deklaratívna a založená na pravidlách. Pravidlá sa nazývajú šablóny. Sú to inštrukcie definujúce spôsob prenosu zdrojového elementu do výsledného dokumentu. Pre kompletnú transformáciu musia byť aplikované všetky šablóny.&nbsp;Sú však nezávislé jedna od druhej, a tak poradie spracovania nie je dôležité. V&nbsp;tomto bode je XSLT výrazne odlišné od procedurálneho programovania. Zo zápisu je zrejmé, že ak by sa v&nbsp;xml dokumente vyskytovali nejaké atribúty elementov, pri transformácii sa stratia. Toto sa dá vyriešiť pomocou XPath. Znak @ definuje odkaz na atribút uzla. Inštrukcia <xsl:value-of select=”@meno”/> použije hodnotu Peter z uzla&nbsp;<nowiki><osoba meno=”Peter”/></nowiki>''.&nbsp;''Ak chcem atribúty aj vo výslednom dokumente, zápis:
 +
 +
<nowiki><uzol atribut=<xsl:value-of select=”.”/>/></nowiki>
 +
 +
''&nbsp;''odmietne spracovať akýkoľvek XML parser. XSLT používa konštrukciu:
 +
 +
<nowiki><xsl:attribute name=”meno_atribútu”>hodnota_atribútu</xsl:attribute></nowiki>
 +
 +
Príklady vetvenia a&nbsp;cyklov v&nbsp;XSLT:
 +
 +
IF
 +
 +
[[Image:pict5.jpg|center]]
 +
 +
 +
SWITCH, SELECT, a&nbsp;podobne
 +
 +
[[Image:pict6.jpg|center]]
 +
 +
FOR EACH
 +
 +
[[Image:pict7.jpg|center]]
 +
 
==XQuery==
 
==XQuery==
 +
XQuery je jazyk pre dotazovanie dát z XML dokumentov. XQuery 1.0 je jazyk veľmi podobný jazyku XPath 2.0, používa rovnaké funkcie a rovnaké operátory. Každý syntakticky správny výraz, ktorý sa vykoná v obidvoch jazykoch, vráti rovnaký výsledok aj v XPath aj v XQuery. XQuery používa rovnaký model dát (a rovnakú terminológiu) ako XPath. XQuery sa dá prirovnať k jazyku SQL a relačným databázam svojím významom a užitočnosťou pre XML súbory. Jeho špecifikácia a možnosti sú veľmi rozsiahle a keďže tento jazyk vo svojej práci nebudem využívať, nebudem sa mu ďalej venovať.

Aktuálna revízia z 12:22, 11. marec 2010

Tnu wiki.png
Trenčianska Univerzita Alexandra Dubčeka v Trenčíne
Fakulta Mechatroniky
Fm wiki.png
Otvorené formáty súborov kancelárskych softvérov

zadanie práce
Bakalárska práca


Autor:
Pedagogický vedúci: Ing. Juraj Ďuďák
Študijný odbor: Mechatronika

Akademický rok

2009/2010

Abstrakt

Práca sa zaoberá spôsobmi uchovávania dát v súboroch kancelárskych softvérov MS Office 2007 a Open Office 3.0. Rozoberá technológie použité pri ukladaní týchto dát a vnútornú štruktúru uložených dokumentov. Taktiež opisuje problematiku vytvorenia webovej aplikácie pre prezeranie súboru vybraného typu.

Abstract

The work deals with techniques of storying data in the files of the office software MS Office 2007 and OpenOffice.org 3.0. Analyzes the technologies used for the data storying and the internal structure of the stored documents.It also describes issues of creating a web-based application for viewing the selected file type.

XML, XPath, XSLT a XQuery

Úvod

Začiatkom osemdesiatych rokov dvadsiateho storočia IBM, DEC a ďalšie veľké priemyselné firmy prišli k dohode o potrebe štandardu pre výmenu údajov medzi rôznymi počítačmi. Ich iniciatíva viedla k vzniku štandardu ISO (International Organization for Standardization) s číselným označením 8879 z roku 1986. Obsahuje definíciu SGML (Standard Generalized Markup Language). Je to jazyk, ktorého cieľom bolo umožniť zdieľanie informácií medzi podnikmi s rozdielnymi informačnými systémami. Umožňuje oddeliť dáta od ich spracovania. Na základe analýzy štruktúry dát sa vytvára slovník, označovaný ako DTD (Document Type Definition). Tento slovník naznačuje obsah jednotlivých objektov tzv. objektovým modelom s presne definovanou syntaxou. Pretože rôzne množiny údajov môžu mať rôzne dátové objekty, líšia sa aj ich slovníky DTD. Dokument SGML je vytváraný ako textový dokument. Jednotlivé prvky dokumentu sú oddelené značkami, ktoré sú definované v slovníku DTD. Ako text je dokument prenositeľný na rôzne systémy, ktoré majú implementovaný analyzátor SGML dokumentov. Analyzátor tento dokument načíta, s využitím slovníka DTD a značiek v dokumente je schopný určiť štruktúru dokumentu a spracovať jeho obsah. Nevýhodou štandardu SGML bolo, že nebol schopný reagovať na požiadavky webu. Vznikol v dobe pomalých a drahých počítačov. Aby bolo možné z týchto systémov získať maximum, štandard SGML bol vybavený minimalizačnými nástrojmi. Tie mali výsledné textové súbory dokumentov stlačiť na čo najmenšiu veľkosť. Dôsledkom boli zložité, drahé a pomalé analyzátory a veľká finančná náročnosť zavádzania SGML do praxe. Skutočnosť, že SGML je štandardom ISO, sa premietla do odmietnutia zmien, ktoré smerovali k jeho zjednodušeniu. Zjednodušenia boli požadované pre možnosť použitia štandardu pri výmenu údajov vo webe a pre možnosť zobrazenia dokumentov prehliadačmi. Namiesto priameho použitia štandardu SGML ako celku veľké rozšírenie získala iba jeho aplikácia HTML - HyperTextMarkup Language. Pôvodcom jazyka je Tim Berners-Lee. Veľký ohlas mala verzia 2.0, ktorú Berners-Lee a D. Connolly zverejnili v novembri 1995 ako RFC1866. Ďalším medzníkom je január 1997. Bolo zverejnené odporúčanie W3C (World Wide Web Consorcium) HTML 3.2. Ale ani vtedy sa vývoj HTML neskončil. Pokračovalo pridávanie nových značiek. Objavila sa možnosť tvorby skriptov. Doplnené boli kaskádové štýly, formuláre, rámce. Popri statických HTML dokumentoch, čím ďalej tým viac údajov na webových serveroch sa ukladá v databázach. Čím ďalej tým viac dokumentov sa vytvára dynamicky programami alebo skriptami s využitím údajov v databázach. Rozširuje sa eBusines, eLearning, eBanking. Narastajú požiadavky na výmenu údajov medzi strojmi. HTML bolo pôvodne určené pre prezentáciu textov. Človek, čitateľ, si z textu potrebnú informáciu vyberie. Aby to však mohli robiť aj stroje, je potrebné dôslednejšie formátovať údaje a treba mať jasné pravidlá, podľa ktorých je možné zistiť, či sú údaje úplné. HTML k tomu nestačí, SGML je zložité a z tohto dôvodu vzniklo XML. V roku 1996 bola pod záštitou W3C vytvorená pracovná skupina, ktorej cieľom malo byť zjednodušenie SGML pre potreby webu. Okrem širokej akceptovateľnosti výsledného štandardu pre potreby webu sa mala dosiahnuť aj možnosť jednoduchej tvorby programov pre spracovanie XML dokumentov. Prvá verzia odporúčania XML bola zverejnená vo februári 1998. V októbri roku 2000 bola zverejnená revízia tohto odporúčania pod názvom Extensible Markup Language (XML) 1.0 (Second Edition). Odporúčanie definuje, čo je to XML dokument, čo je prvok (element), jeho počiatočné a koncové ohraničenie, značka, atribúty aj obsah prvku. Určuje pravidlá pre voľbu názvov prvkov - značiek, atribútov. Stanovuje tiež, kedy je dokument dobre sformovaný (well-formed - niekedy prekladané tiež správne sformátovaný) a tiež kedy je dokument platný (valid). Následne vznikla špecifikácia XHTML 1.0. Špecifikácia XHTML 1.0 je v podstate prepracovaným HTML 4.01 tak, aby splňovalo obmedzenia kladené na jazyk XML. Takže XHTML je aplikáciou XML. Množina elementov a atribútov je plne zdedená z HTML 4.01. Okrem obmedzení, ktoré vznikli z dôvodu dodržovania prísnejšej syntaxe jazyka XML, ďalej definuje špecifikáciu niekoľkých doporučených postupov, ktoré majú zaistiť spätnú kompatibilitu XHTML dokumentov s HTML prehliadačmi.

Obrázok 1.1 Vzťah SGML, XML, HTML a XHTML

XML

Štruktúra dokumentu

XML je v skutočnosti metajazyk, čo znamená, že je to jazyk, ktorý sa používa na popis ďalších jazykov. Neexistuje preddefinovaný zoznam elementov. XML poskytuje úplnú slobodu pri vytváraní prvkov, ktorých mená majú pre danú aplikáciu zmysel.


Na tomto jednoduchom príklade si ukážeme čo vlastne XML je a ako vyzerá:

Strukturaxml.jpg

Ako ste si asi mohli všimnúť, je to krátka správa od Jany pre Tomáša. Toto je jedna z nesporných výhod XML, je veľmi dobre čitateľné a zrozumiteľné aj pre bežného užívateľa. Teraz si poďme popísať čo všetko v tomto príklade môžeme vidieť.

Prvý riadok v dokumente – XML deklarácia – definuje verziu XML a kódovanie znakov, ktoré si prajeme použiť. V tomto prípade sa jedná o špecifikáciu XML 1.0 a používaná znaková sada je ISO-8859-2 (Stredoeurópske jazyky).

Druhý riadok dokumentu predstavuje tzv. koreňový element dokumentu s názvom „sprava“. Koreňový element je hlavný element celého dokumentu, je vždy iba jeden a všetky elementy sú mu v hierarchii dokumentu podriadené. Podriadené elementy sa nazývajú potomkovia. V našom prípade sú potomkovia elementy s názvom: pre, od, zahlavie, telo. Na konci dokumentu je uzavierací tag koreňového elementu </sprava> ktorým sa končí každý XML dokument.

Syntaktické pravidlá XML

  • Každý prvok XML dokumentu musí mať otvárací (<názov elementu>) aj uzavierací tag (</názov elementu>). Ak je daný element prázdny, môžeme použiť nasledujúcu skrátenú syntax: (<názov elementu/>). Ukončovací tag značí, že to, čo bude nasledovať v dokumente ďalej, už nepatrí danému elementu.
  • XML rozlišuje veľké a malé písmená v názve tagu. Z tohto vyplýva, že začiatočný, aj ukončovací tag, musia byť rovnako napísané.
  • Elementy musia byť v XML dokumente správne zahniezdené

Na rozdiel od jazyka HTML kde by bez problémov fungoval takýto zápis:

<b><i>Tento text je tučný a kurzívou</b></i>

V dokumentoch XML by táto syntax nebola správne a je potrebné ju pozmeniť nasledujúcim spôsobom:

<b><i>Tento text je tučný a kurzívou</i></b>
  • Atribúty elementu musia byť uzavreté v úvodzovkách

Toto je element ktorý má nejaký atribút: <auto farba=”cierna”> , atribúty detailnejšie popisujú daný element. Musia byť uzavreté v jednoduchých (‘ ‘), alebo zložených (“ “) úvodzovkách. Sú povolené 2 druhy úvodzoviek, lebo ak samotný atribút obsahuje jeden druh úvodzoviek, na jeho uzavretie sa použije ten druhý druh.

  • Ukázali sme si ako sa zapisuje atribút elementu. Z tohto zápisu vidno že názov elementu nesmie obsahovať medzeru, pretože reťazec za medzerou by bol považovaný za atribút. Toto sa rieši nasledovne: <nazov_elementu>
  • XML zachováva tzv. Biele znaky. Ak ste zvyknutý z jazyka HTML že viac medzier za sebou sa zmení na jednu, tak v XML sa zachovajú všetky znaky presne tak ako sú zapísané v dokumente.
  • XML používa pre označenie konca riadka výhrade znak LF(line feed), pre toto označenie ešte existuje znak CR(carriage return). Ak by sa však takýto znak v dokumente objavil, automaticky sa prevedie na LF.
  • Komentáre sa v XML zapisujú takto: <!-- Toto je komentár --> 
  • V XML existujú tzv. špeciálne znaky (escape characters), ktoré sa nesmú v názvoch a ani v obsahu elementov vyskytnúť. Miesto nich sa používajú tzv. HTML entity ako ukazuje nasledujúca tabuľka:
Tabuľka 1.1 Špeciálne znaky
Špeciálny znak HTML entita
< &lt
& &amp
> &gt
&apos
&quot
  • Ak z nejakého dôvodu potrebujeme použiť špeciálne znaky a nevyhovuje nám použitie ekvivalentných reťazcov, môžeme použiť CDATA sekciu. Sekcia CDATA začína <![CDATA[ a končí ]]>. Všetko vo vnútri je ignorované parserom, takže je možné bez obáv písať špeciálne znaky. CDATA sekcia sa využíva hlavne ak potrebujeme v XML dokumente uviesť kód napísaný v ľubovoľnom programovacom jazyku. V takomto prípade je použitie HTML entít namiesto špeciálnych znakov neprípustné. Je však z pochopiteľných dôvodov zakázaná kombinácia znakov ]]>.

Menné priestory

Vzhľadom k tomu, že XML umožňuje návrhárom zvoliť si svoje vlastné mená elementov, môžu si dvaja alebo viacerí návrhári pre niektoré elementy vybrať rovnaké meno. Menné priestory (Namespaces) prinášajú spôsob, ako od seba odlíšiť elementy, ktoré majú rovnaké lokálne meno, ale pochádzajú z rôznych „slovníkov“. Rozlíšenie elementov sa dosiahne asociáciou elementu s menným priestorom. Menný priestor má meno utvorené podľa špecifikácie URI. Toto URI slúži ako unikátny reťazec. Meno menného priestoru a lokálne meno elementu tvoria globálne unikátne meno, ktorému sa hovorí kvalifikované meno (qualified name).

Menný priestor sa deklaruje vo vnútri počiatočnej značky elementu. Táto deklarácia slúži k spojeniu mena menného priestoru s iným obvykle kratším reťazcom, ktorému sa hovorí prefix menného priestoru (namespace prefix). Syntax deklarácie menného priestoru je xmlns:prefix_menného_priestoru="URI_menného_priestoru". Je tiež možné deklarovať východzí menný priestor ktorý sa aplikuje na všetky elementy bez prefixu. Syntax deklarácie východzieho menného priestoru je xmlns="URI_menného_priestoru".

Element môže obsahovať maximálne jednu deklaráciu východzieho menného priestoru. Ostatných deklarácií menných priestorov môže element obsahovať ľubovoľné množstvo, ak má každá z nich iný prefix. Je možné priradiť rovnaké URI viacerým prefixom, no nie je to nijako užitočné.

Všetky deklarácie menných priestorov majú rozsah platnosti (scope) – tj. množinu elementov na ktoré sa vzťahujú. Do rozsahu platnosti deklarácie menného priestoru patrí element, v ktorom sa táto deklarácia nachádza, a všetci jeho potomkovia. Mapovanie prefixu môže byť v rozsahu jeho platnosti prekryté novou deklaráciou u potomka. Taktiež východzí menný priestor u potomka môže byť prekrytý jeho novou deklaráciou.

Elementom ktoré neležia mennom priestore sa hovorí nekvalifikované elementy (unqualified elements) menom menného priestoru nekvalifikovaného elementu je prázdny reťazec. Ak je element v rozsahu platnosti deklarácie východzieho menného priestoru a potrebujeme z neho urobiť nekvalifikovaný element, je možné deklaráciu východzieho menného priestoru prekryť novou deklaráciou v tomto elemente v tvare xmlns=‘ ‘.

Nasledujúci príklad ukazuje ako pomocou menných priestorov zamedziť kolízii v názvoch elementov:

Pict.jpg

V dokumente sa vyskytuje dvakrát element tabuľka, no vždy je priradený inému mennému priestoru.

XPath

Xpath (XML Path Language) vo verzii 1.0 definuje organizáciou W3C schválenú syntax popisu adries častí XML dokumentu. XPath výrazy sa vyhodnotia podľa logického stromu dokumentu a tak sa nájdu odpovedajúce uzly ( elementy, atribúty, text atd.). Spomínaná úroveň abstrakcie chráni vývojára pred zložitosťou fyzickej štruktúry dokumentu a výrazne zjednodušuje prácu.

XPath definuje stromový model podľa ktorého sa vyhodnocujú všetky výrazy. Tento model zodpovedá logickej štruktúre XML dokumentu, ktorá je formálne definovaná ako XML Infoset (XML Information set). Obrázok 1.2 ilustruje stromový model XPath

Obrázok 1.2 Stromový model XPath

Väčšina XPath výrazov popisuje množinu uzlov stromu. Napríklad nasledujúcemu výrazu zodpovedajú 2 elementy cena: /faktura/predmet/cena. Tomuto typu výrazu sa hovorí cesta (location path). XPath cesty vyzerajú podobne ako cesty v súborovom systéme, akurát navigujú v rámci stromového modelu, kde identifikujú množinu uzlov(node-set).

XPath je abstraktný jazyk, preto môže byť implementovaný v mnohých rôznych prostrediach. Intenzívne sa používa pri XSL transformáciách (XSLT) k identifikácii uzlov vstupného dokumentu. Taktiež sa používa vo väčšine implementácií štandardu DOM, kvôli bohatším možnostiam vyhľadávania v dokumente. XPath sa dokonca využíva v niektorých moderných technológiách pre sprístupnenie dát, aby sa úložisko dát prezentovalo užívateľovi ako XML. Treba si uvedomiť že XPath výrazy iba definujú ako prechádzať logickou XML štruktúrou a nachádzať odpovedajúcu množinu uzlov, odkiaľ sa však táto logická štruktúra zoberie, to už záleží iba na implementácii.

XPath prechádza strom uzlov v poradí dokumentu(document order). Poradie dokumentu je poradie v ktorom by sa uzly nachádzali v serializovanom XML dokumente(uzly sa prechádzajú zhora dole, z ľava do prava).

Spolu s množinami uzlov, podporuje XPath ešte ďalšie tri dátové typy: logické hodnoty(Boolean), čísla(number) a textové reťazce(string). XPath definuje, ako sa množiny uzlov porovnávajú s každým z týchto typov a ako sa vynúti potrebný dátový typ.

Tabuľka 1.2 Dátové typy
Dátový typ Popis
Množina uzlov (node-set) Množina uzlov bez násobného výskytu
Logická hodnota True (Pravda) alebo False (nepravda)
Číslo(number) Číslo s plávajúcou desatinnou čiarkou
Textový reťazec Postupnosť UCS znakov

Každý XPath výraz vráti objekt jedného z možných typov. Konkrétny typ tohto objektu je možné vynútiť použitím odpovedajúcej funkcie boolean( ), number( ), alebo string( ). Ak je to potrebné vykoná sa implicitná konverzia objektu na iný dátový typ (napr. ak sa predáva množina uzlov funkcii, ktorá očakáva parameter typu textový reťazec). K porovnaniu a prevodu medzi množinami uzlov a ostatnými dátovými typmi je potrebné uzly zo stromového modelu previesť späť na textový reťazec. XPath definuje, ako v tomto prípade odpovedajúcu reťazcovú hodnotu (string value) získať. Prevádzaním uzlov späť na textové reťazce uľahčuje ich prevod na iné dátové typy a vzájomné porovnávanie medzi rôznymi typmi. Taktiež umožňuje tvorbu veľkého množstva ďalších výrazov.

Nasledujúca tabuľka zhrňuje typy výrazov podporovaných štandardom XPath. Operátory ktoré sa používajú k tvorbe výrazov sú uvedené od najmenej dôležitých po operátory s najvyššou prioritou. Ku kontrole prednosti operátorov je možné použiť zátvorky.

Tabuľka 1.3 Operátory
Typ výrazu Operátory
Cesta / , //, |
Logický výraz or, and
Rovnosť =, !=
Relácie <=, <, >=, >
Číselný výraz +, -, div, mod, *, -(unárne)
Atribút @

XPath sa uplatní všade tam, kde je potrebné vyberať z XML dokumentu len určité elementy, na základe vopred daných kritérií. Na XPath sú založené technológie ako XSLT a XQuery.

XSLT

Dokument vo formáte XML prináša vo všeobecnosti formu, v ktorej je možné uložiť informácie rôzneho charakteru. Čo však v prípade, že forma nie je pre aktuálnu potrebu práve najvhodnejšia? Iste, XML parser nie je problém a stačí už len zapísať výsledok podľa potrebnej štruktúry. XSLT je práve o tom, ako to urobiť elegantne a efektívne. Samotný štandard eXtensible Stylesheet Language Transformations, akceptovaný konzorciom W3C, má predchodcu Extensible Stylesheet Language (XSL). Z pohľadu programátora tento „programovací jazyk transformácií“ XML údajov je, opäť a znova XML dokumentom, štruktúrou xsl tagov.

Podporuje:

  • Flexibilné dátové typy: boolean, number, string, node-set
  • Množinu operácií: <xsl:template>, <xsl:apply-templates>, <xsl:sort>, …
  • Vetvenia a cykly: <xsl:if>, <xsl:choose>, <xsl:for-each>, ...

Jednoduchú, ale kompletnú transformáciu dokumentu si ukážeme na príklade „Hello World“. Na začiatku je zdrojový súbor pozdrav.xml:

Pict3.jpg

Dokument obsahuje okrem povinných častí procesnú inštrukciu,:

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

ktorá definuje odkaz na transformačný súbor pozdrav.xsl. Ten obsahuje jednoduchú kostru a xsl inštrukcie pre transformáciu zdrojového súboru do HTML dokumentu.

Pict4.jpg

Výsledkom transformácie je kód jednoduchej HTML stránky:

Pict8.jpg

Prvá použitá xsl inštrukcia definuje menný priestor týchto inštrukcií. <xsl:stylesheet xmlns:xsl=http://www.w3.org/1999/XSL/Transform version="1.0">

Samozrejme, je možné doplniť aj ďalšie, momentálne sa ale obmedzíme na štandard W3C konzorcia. Jadro prevodu stojí na inštrukcii <xsl:template match="/pozdrav">. Tá, zjednodušene povedané, definuje šablónu na prevod. Do výsledného dokumentu sa vloží len to, čo je obsiahnuté v rámci šablóny vzťahujúcej sa na koreňový uzol zdrojového súboru. V našom prípade to ale znamená aj informáciu, od koho pochádza pozdrav. Docielili sme to inštrukciou <xsl:apply-templates select="od-koho"/>, ktorá v mieste svojho volania aplikuje našu druhú definovanú šablónu. Tento jednoduchý spôsob vnárania je synonymom volania procedúr a funkcií. Poslednou inštrukciou je <xsl:value-of> vkladajúca hodnotu uzla definovaného v atribúte select do miesta svojho volania. Bodka je pritom ekvivalentom názvu uzla, v ktorom je inštrukcia volaná.

Obrázok 1.3 Schéma princípu XSLT

Tento príklad vystihuje dôležitú vlastnosť XSLT transformácií - je deklaratívna a založená na pravidlách. Pravidlá sa nazývajú šablóny. Sú to inštrukcie definujúce spôsob prenosu zdrojového elementu do výsledného dokumentu. Pre kompletnú transformáciu musia byť aplikované všetky šablóny. Sú však nezávislé jedna od druhej, a tak poradie spracovania nie je dôležité. V tomto bode je XSLT výrazne odlišné od procedurálneho programovania. Zo zápisu je zrejmé, že ak by sa v xml dokumente vyskytovali nejaké atribúty elementov, pri transformácii sa stratia. Toto sa dá vyriešiť pomocou XPath. Znak @ definuje odkaz na atribút uzla. Inštrukcia <xsl:value-of select=”@meno”/> použije hodnotu Peter z uzla <osoba meno=”Peter”/>Ak chcem atribúty aj vo výslednom dokumente, zápis:

<uzol atribut=<xsl:value-of select=”.”/>/>

 odmietne spracovať akýkoľvek XML parser. XSLT používa konštrukciu:

<xsl:attribute name=”meno_atribútu”>hodnota_atribútu</xsl:attribute>

Príklady vetvenia a cyklov v XSLT:

IF

Pict5.jpg


SWITCH, SELECT, a podobne

Pict6.jpg

FOR EACH

Pict7.jpg

XQuery

XQuery je jazyk pre dotazovanie dát z XML dokumentov. XQuery 1.0 je jazyk veľmi podobný jazyku XPath 2.0, používa rovnaké funkcie a rovnaké operátory. Každý syntakticky správny výraz, ktorý sa vykoná v obidvoch jazykoch, vráti rovnaký výsledok aj v XPath aj v XQuery. XQuery používa rovnaký model dát (a rovnakú terminológiu) ako XPath. XQuery sa dá prirovnať k jazyku SQL a relačným databázam svojím významom a užitočnosťou pre XML súbory. Jeho špecifikácia a možnosti sú veľmi rozsiahle a keďže tento jazyk vo svojej práci nebudem využívať, nebudem sa mu ďalej venovať.