Otvorené formáty súborov kancelárskych softvérov

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
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.

Príklad.jpg

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 tabulka, 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.1 ilustruje stromový model XPath

Xpath1.jpg
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

XQuery