Katedra Informatiky Fakulta Matematiky, Fyziky a Informatiky Univerzita Komenského, Bratislava Konverzia DOCX na XHTML diplomová práca Bc. František Šmitala Odbor: Informatika 9.2.1 Vedúci: RNDr. Richard Ostertág Bratislava, 2009 Abstrakt ŠMITALA, František: Konverzia DOCX na XHTML. [diplomová práca] - Fakulta matematiky, fyziky a informatiky Univerzity Komenského v Bratislave; Katedra informatiky. Školiteľ: RNDr. Richard Ostertág - Bratislava 2009. 79 strán. Diplomová práca sa zaoberá problematikou Office Open XML formátu. Má dve časti. V prvej teoretickej časti podáva popis formátu Office Open XML s dôrazom na DOCX dokumenty a v druhej praktickej časti sa zaoberá návrhom a implementáciou aplikácie na konverziu dokumentu vo formáte DOCX na dokument vo formáte XHTML. K diplomovej práci je priložená výsledná aplikácia na konverziu DOCX na XHTML. Kľúčové slová: Office Open XML, konverzia formátov dokumentov, DOCX iii Predhovor Problém konverzie formátov dokumentov je tu v podstate od čias, keď tradičné papierové dokumenty boli nahradené dokumentami elektronickými. Rôzne formáty dokumentov môžu mať rôzne použitie, a preto je konverzia medzi nimi niekedy nevyhnutná. Typickým príkladom je publikovanie dokumentov na internete. Materiály, ktoré chceme publikovať sú len veľmi zriedka vo formáte na to určenom a to vo formáte XHTML. V súčasnosti najrozšírenejším nástrojom na prácu s dokumentami je kancelársky balík Microsoft Office. Jeho najnovšia verzia prišla s novým formátom na ukladanie dokumentov Office Open XML založeným na značkovacom jazyku XML. Konkrétne pre formátovaný text sa tento formát nazýva WordprocessingML a súbor v tomto formáte má príponu DOCX. Táto diplomová práca je o konverzii tohto formátu na formát XHTML. Zahŕňa prehľad formátu Office Open XML, prehľad existujúcich riešení a nakoniec implementáciu vlastného riešenia. Naprogramovaná aplikácia má ambíciu prekonať existujúce riešenia hlavne v kvalite zdrojového kódu skonvertovaného dokumentu. Zároveň chce zachovať kvalitu prenosu formátovania z DOCX dokumentu na XHTML dokument aspoň na takej úrovni, ako konkurenčné riešenia. Aplikácie je dostupná pre každého a je naprogramovaná tak, aby sa dali ľahko zapracovávať zmeny a vylepšenia. Výberom programovacieho jazyka Java sa zabezpečila použiteľnosť programu na akejkoľvek platforme. iv v Ďakujem svojmu vedúcemu diplomovej práce, RNDr. Richardovi Ostertágovi za cenné rady a pripomienky pri písaní tejto práce. Zároveň by som chcel poďakovať mojej priateľke a rodine za podporu. vi Čestne prehlasujem, že som túto diplomovú prácu vypracoval samostatne s použitím citovaných zdrojov. ................................... Obsah Abstrakt iii Predhovor iv 1 Úvod 1 1.1 Základné pojmy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Motivácia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Cieľ práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Rozvrhnutie práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 Office Open XML 2.1 6 Existujúca dokumentácia k Office Open XML . . . . . . . . . . . . . . . . . 7 2.1.1 Špecifikácia ECMA-376 . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.1.2 Špecifikácia ISO/IEC 29500:2008 . . . . . . . . . . . . . . . . . . . . 8 2.1.3 Online tutoriály a príručky, knihy . . . . . . . . . . . . . . . . . . . 8 2.2 Chronológia vývoja Open Office XML . . . . . . . . . . . . . . . . . . . . . 9 2.3 Štruktúra Office Open XML . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.4 Open Packaging Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.5 2.4.1 Balík a časti v OPC . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4.2 Prepojenia v OPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4.3 Definícia typov obsahu v OPC . . . . . . . . . . . . . . . . . . . . . 14 WordprocessingML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.5.1 Jednoduchý text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.5.2 Formátovanie textu . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.5.2.1 Formátovanie behu . . . . . . . . . . . . . . . . . . . . . . 16 2.5.2.2 Formátovanie odstavca . . . . . . . . . . . . . . . . . . . . 17 vii OBSAH viii 2.5.2.3 Formátovanie štýlmi . . . . . . . . . . . . . . . . . . . . . . 19 2.5.2.4 Hierarchia formátovania . . . . . . . . . . . . . . . . . . . . 20 2.5.3 Číselné a nečíselné zoznamy . . . . . . . . . . . . . . . . . . . . . . . 20 2.5.4 Tabuľky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.5.5 Poznámky pod čiarou . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.5.6 Poznámky na konci dokumentu . . . . . . . . . . . . . . . . . . . . . 25 2.5.7 Hyperlinky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.5.8 Komentáre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.5.9 Obrázky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.5.10 Témy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3 Existujúce riešenia 33 3.1 Export z Microsoft Office 2007 . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.2 Export z Open Office 3.0 3.3 Plugin pre prehliadač Mozilla Firefox . . . . . . . . . . . . . . . . . . . . . . 36 3.4 Online konverzia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.5 GMail náhľad dokumentov . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.6 Zhrnutie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4 Aplikácia Office Open XML convert 39 4.1 Špecifikácia aplikácie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2 Návrh aplikácie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.3 4.2.1 Programovací jazyk . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.2.2 Pomocné knižnice . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.2.3 Metódy riešenia problému . . . . . . . . . . . . . . . . . . . . . . . . 42 Implementácia aplikácie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.3.1 Grafické používateľské rozhranie . . . . . . . . . . . . . . . . . . . . 43 4.3.2 Konzolová aplikácia . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.3.2.1 Knižnica JDOM . . . . . . . . . . . . . . . . . . . . . . . . 46 4.3.2.2 Priebeh konverzie DOCX na XHTML . . . . . . . . . . . . 47 4.3.2.3 Trieda OOXMLparser . . . . . . . . . . . . . . . . . . . . . 49 4.3.2.4 Trieda ElementTable . . . . . . . . . . . . . . . . . . . . . 51 4.3.2.5 Trieda XHTMLoutput . . . . . . . . . . . . . . . . . . . . . 52 OBSAH ix 4.3.3 Problémy pri konverzii . . . . . . . . . . . . . . . . . . . . . . . . . . 53 5 Výsledky 55 5.1 Príprava testovania konverzie . . . . . . . . . . . . . . . . . . . . . . . . . . 55 5.2 Testovanie konverzie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 5.2.1 Vzorový dokument k OOXML convert . . . . . . . . . . . . . . . . . 56 5.2.2 Chybný dokument . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 5.2.3 Veľký a neprehľadný dokument . . . . . . . . . . . . . . . . . . . . . 61 5.2.4 Bežný dokument z internetu . . . . . . . . . . . . . . . . . . . . . . . 63 5.3 Vyhodnotenie výsledkov . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Záver 67 Zoznam použitej literatúry 68 Prílohy 70 Kapitola 1 Úvod Táto práca je určená hlavne pre začínajúcich vývojárov aplikácií na prácu s Office Open XML formátom. Aj keď sa prepokladá aspoň základná znalosť problematiky XML a XHTML, v prvej časti tejto kapitoly si vysvetlíme základné kľučové pojmy použité v tejto práci. V ďalšej časti tejto kapitoly prejdeme k definovaniu cieľa spolu s motiváciou. Na záver si ukážeme členenie tejto práce. 1.1 Základné pojmy V tejto časti si zadefinujeme základné pojmy, ktoré sú potrebné na pochopenie tejto diplomovej práce. Pojmy sú vysvetľované nie všeobecne, ale v kontexte tejto práce. CSS (Kaskádové štýly) Je to jazyk na popis spôsobu zobrazenia XHTML dokumentov. Umožňuje oddeliť vzhľad dokumentu od jeho štruktúry a obsahu. DTD (Document Type Definition) Ide o jazyk určený na popis štruktúry XHTML dokumentu. Definuje, ktoré elementy môže dokument obsahovať, aké atribúty obsahujú jednotlivé elementy a podobne. ECMA Je to medzinárodná nezisková štandardizačná organizácia pre informačné a komunikačné systémy. HTML Ide o značkovací jazyk určený hlavne na reprezenáciu web stránok. Popisuje štruktúru textovej informácie tým, že v nej umožňuje označiť nadpisy, odstavce, zoznamy, odkazy, vložiť obrázky a podobne. 1 KAPITOLA 1. ÚVOD 2 ISO Je to medzinárodná organizácia pre štandardizáciu zložená z predstaviteľov z rôznych národných štandardizačných organizácií. Zaoberá sa tvorbou medzinárodných noriem vo všetkých oblastiach. menný priestor (namespace) V XML menné priestory zoskupujú elementy a atribúty za účelom ich jedinečnosti a jednoznačnosti v rámci celého XML. Definované sú pomocou URI a príslušnosť elementu resp. atribútu do menného priestoru býva označená prefixom. Napríklad element „w:bÿ má prefix „wÿ. To, že ktorý menný priestor tento prefix označuje sa definuje atribútom xmlns:w. URI Ide o reťazec znakov s definovanou štruktúrou používaný na identifikáciu zdroja informácií. Príkladom URI je napríklad URL adresa, alebo „urn:issn:1535-3613ÿ, . . . W3C Je to medzinárodné konzorcium produkujúce štandardy pre World Wide Web. XHTML (Extensible Hypertext Markup Language) Je to v podstate HTML založené na XML. Má prísnejšiu štruktúru ako HTML a vďaka tomu je automatizované spracovanie oveľa jednoduchšie a rýchlejšie. Všeobecne je považovaný za nástupcu HTML a postupne ho vytláča. XML (Extensible Markup Language) Rozšíriteľný značkovací jazyk na tvorbu konkrétnych značkovacích jazykov pre rôzne účely (výmena dát, publikovanie dokumentov, . . .). XSLT (Extensible Stylesheet Language Transformations) Je to jazyk založený na XML určený na transformáciu XML dokumentov na iné XML dokumenty alebo akýkoľvek iný formát. 1.2 Motivácia Vydanie nového formátu Office Open XML otvára hlavne vývojárom nové možnosti, keďže spoločnosť Microsoft zverejnila k tomuto formátu kompletnú dokumentáciu na voľné stiahnutie. Problémom však je fakt, že táto špecifikácia má viac ako 6 000 strán a je teda pre bežného vývojára nepoužiteľná. Existuje množstvo článkov, prehľadov a tutoriálov špecializovaných na tento formát a teda je si z čoho vyberať. Väčšinou sú to však materiály, ktoré buď poskytujú naozaj len základné informácie, alebo sú až príliš detailné a špecializované KAPITOLA 1. ÚVOD 3 na jednu oblasť. Neexistuje teda popis tohto formátu, ktorý by bol dostatočne obsiahly, aby bolo na jeho základe možné pracovať s dokumentami so štandardným obsahom, ale zároveň aby nebol príliš rozsiahly a nezaoberal sa zbytočnými vecami. V súvislosti s formátmi dokumentov sa vyskytuje ešte jeden častý problém. Je ním konverzia medzi jednotlivými formátmi dokumentov. Na dokumenty publikované na internete existuje v podstate iba jeden rozumný formát a to HTML resp. XHTML. Tento formát je priamo podporovaný prehliadačmi. Aj keď existuje veľké množstvo konvertorov, všetky fungujú na princípe doslovného1 prekladu. Problémom je tiež, že nie všetky DOCX štruktúry majú XHTML ekvivalent. Výsledkom konverzie tak je XHTML dokument, ktorý je síce vzľadom veľmi podobný na svoj DOCX originál, avšak za cenu objemného a neprehľadného zdrojového kódu. Pri XHTML dokumentoch nám však ide o viac než len o to ako vyzerá. Tradičným problémom je rozdielne zobrazovanie toho istého dokumentu v rôznych prehliadačoch. Preto je vhodné pri vytváraní XHTML dokumentov dodržiavať štandardy a nerobiť ich zbytočne zložité (čo sa zdrojového kódu týka). Kvôli rýchlosti načítania a vyrenderovania obsahu je tiež dôležitá veľkosť dokumentu. Posledným aspektom v súvislosti s objemným a neprehľadným zdrojovým kôdom XHTML dokumentu je možnosť úprav a prispôsobovania. Predstavme si situáciu, keď na webovskú stránku s profesionálnym dizajnom potrebujeme pridať štruktúrovaný DOCX dokument. Máme na výber dve možnosti. Ručne skopírujeme iba text a postupne ho štruktúrujeme použitím XHTML tagov. Druhá možnosť je, že si dokument skonvertujeme a v jeho neprehľadnom zdrojovom kóde dokument pracne napojíme na naše existujúce CSS štýly. Ukázali sme si teda dva problémy v súvislosti s DOCX formátom. A práve neexistujúca dokumentácia, ktorá by bola prehľadná, stručná a zároveň dostatočne silná a neexistujúci konvertovací nástroj z formátu Office Open XML na XHTML, v ktorom by kvalita zdrojového kódu bola dôležitejšia ako kvalita presnosti prenesenia vzhľadu, je dôvodom na vznik tejto diplomovej práce. 1.3 Cieľ práce Táto diplomová práca má tri hlavné ciele. Sú to: 1 Doslovný vo význame, že každý element v DOCX má nejaký ekvivalent v XHTML KAPITOLA 1. ÚVOD 4 • prehľad existujúcich riešení na konverziu DOCX na XHTML • stručná dokumentácia k Office Open XML • vytvorenie aplikácie na konverziu DOCX na XHTML Primárnym cieľom je vytvorenie aplikácie na konverziu DOCX dokumentu na XHTML dokument. Pri tomto cieli sledujeme hlavne zachovanie štruktúry dokumentu, schopnosť vedieť pracovať so všetkými štandardnými elementami v bežných dokumentoch a možnosť voľby úrovne zachovania formátovania. Je zrejmé, že čím bude prenos formátovania presnejší, tým neprehľadnejší bude zdrojový kód XHTML výstupu. Ďalej chceme, aby bol výstup valídny XHTML dokument so Strict DTD. Tiež od výsledného programu očakávame primeranú rýchlosť a nenáročnosť na výpočtovú zložitosť. Nakoniec chceme, aby bol tento program riešený konzolovou aplikáciou. Samozrejme je potrebné vytvoriť aj grafické používateľské prostredie, ktoré na základe nastavení konverzie spustí konzolovú aplikáciu s patričnými parametrami. Týmto uľahčíme použitie programu aj iným aplikáciam. Sekundárnym cieľom tejto diplomovej práce je vytvorenie stručnej a prehľadnej dokumentácie k formátu DOCX. Táto dokumentácia by mala obsahovať dostatok informácii na to, aby bol čitateľ schopný pracovať so štandardnými DOCX dokumentami. Zároveň chceme, aby v prípade zložitejšej konštrukcie dokumentu bol čitateľ schopný sám hľadať informácie z dostupnej oficiálnej dokumentácie. 1.4 Rozvrhnutie práce Táto práca obsahuje dve logické časti. Prvá je teoretická a druhá praktická. Formálne sa delí na 5 kapitol. Prvá kapitola je tento úvod. Sú v nej zadefinované základné pojmy, ktoré sú nevyhnutné na správne pochopenie problematiky. Tiež tu je vytýčený cieľ práce a motivácia k tejto práci. V druhej kapitole je vypracovaná teoretická časť práce. Zahŕňa prehľad Office Open XML a hlavne WordprocessingML formátu na takej úrovni, aby bol čitateľ schopný na základe týchto informácii vytvárať alebo spracovávať bežné dokumenty v tomto formáte. V tretej kapitole sú opísané všetky existujúce riešenia konverzie DOCX dokumentu na XHTML dokument. KAPITOLA 1. ÚVOD 5 Štvrtá kapitola obsahuje informácie o aplikácii, ktorá tvorí jadro tejto práce. Začneme špecifikáciou programu, potom prejdeme k návrhu a nakoniec k samotnej implementácii. V piatej kapitole budeme program testovať. Porovnáme výsledky s existujúcimi riešeniami a zhodnotíme celkový prínos. Kapitola 2 Office Open XML Office Open XML (tiež známy ako OOXML, OpenXML alebo Open XML) je súborový formát reprezentujúci textové dokumenty, prezentácie a tabuľky. Súčasťou týchto dokumentov môžu byť tiež grafy, či iné grafické elementy alebo matematické vzorce. Formát vyvinula firma Microsoft a používa ho ako východzí súborový formát vo svojom kancelárskom balíku Microsoft Office 2007. Ide vlastne o niekoľko XML súborov a iných potrebných súborov vzájomne poprepájaných definovanými prepojeniami a spoločne zabalených v jednom ZIP archíve1 . Tento formát prichádza v čase, keď už jeden štandardizovaný formát na ukladanie dokumentov existuje, a to OpenDocument (skrátené z OASIS Open Document Format for Office Applications). Existujú aj mnohé iné dôvody, pre ktoré je tento krok firmy Microsoft kritizovaný, ale porovnávanie týchto dvoch formátov je nad rámec tejto diplomovej práce. Faktom zostáva, že kancelárske balíky od firmy Microsoft majú dominantné postavenie na trhu a pôvodné binárne formáty používané v týchto balíkoch nemali verejne dostupnú špecifikáciu a teda akýkoľvek externý prístup k týmto súborom bol značne problematický. Aj keď neskôr Microsoft špecifikáciu k týmto binárnym formátom zverejnil, XML je predsa len pre vývojárov vhodnejší a prehľadnejší formát. Formáty súborov založené na formáte XML umožňujú vývojárom pristupovať ku konkrétnemu obsahu v rámci súborov bez toho, aby museli analyzovať celé dokumenty. Povedzme, že chceme vyextrahovať všetky obrázky z dokumentu. V prípade binárnych formátov musíme analyzovať celý dokument, v prípade XML dokumentu prečítame patričné prepojenia, kde nájdeme umiestnenie jednotlivých obrázkov. 1 Porovnaj s [wik09] 6 KAPITOLA 2. OFFICE OPEN XML 7 Súčasťou kancelárskeho balíku Microsoft Office 2007 sú programy Word na vytváranie dokumentov s formátovaným textom, tabuľkový kalkulátor Excel a program PowerPoint, ktorý slúži na vytváranie prezentácii. Štandardne sú jednotlivé dokumenty odlíšené príponami. Dokumenty s formátovaným textom majú príponu „.docxÿ, tabuľky „.xlsxÿ a nakoniec prezentácie „.pptxÿ. Preto pod pojmom „Konverzia DOCX na XHTMLÿ budeme v tejto práci rozumieť konverziu dokumentov vo formáte Office Open XML obsahujúcich formátovaný text na dokument vo formáte XHTML. V prvej časti tejto kapitoly si popíšeme existujúce dokumentácie k Office Open XML a ukážeme si aké majú výhody a nevýhody. Na základe neuspokojivých záverov z tejto časti sme vytvorili túto kapitolu. V druhej časti si povieme základné informácie o histórii a vývoji Office Open XML formátu. Spomenieme všetky významné mílniky. V tretej časti prejdeme k štruktúre tohto formátu. Ukážeme si najprv logické rozdelenie Open Office XML na menšie značkovacie jazyky, kde každý z nich má nejakú špecifickú funkciu. Potom sa pozrieme bližšie na fyzickú reprezentáciu tohto formátu. V štvrtej časti sa začneme venovať základnej téme tejto diplomovej práce - WordprocessingML. Keďže je WordprocessingML značne rozsiahly, je nutné dopredu poznamenať, že popis jednotlivých elementov bude zredukovaný. Bude to však len do takej miery, aby podstata funkcie elementu bola dostatočne objasnená. 2.1 Existujúca dokumentácia k Office Open XML Informácie o Office Open XML je možné čerpať z viacerých zdrojov. Rozlišujeme niekoľko typov. Prvým sú oficiálne špecifikácie štandardov ECMA a ISO. Potom sú to rôzne online tutoriály a príručky na internete. Poslednou kategóriou sú knihy. Keďže nie sú veľmi rozšírené, spomenieme si len jednu. 2.1.1 Špecifikácia ECMA-376 Špecifikácia k štandardu ECMA-376 je príliš rozsiahla na to, aby čitateľ v krátkom čase získal dostatočné vedomosti o Office Open XML. Táto špecifikácia je rozdelená na 5 častí: 1. Fundamentals - základy typu zoznam skratiek, konvencie v zápisoch a podobne. 2. Open Packaging Conventions - vnútorná fyzická štruktúra dokumentov 3. Primer - informatívny úvod do Office Open XML jazykov KAPITOLA 2. OFFICE OPEN XML 8 4. Markup Language Reference - podrobná dokumentácia jednotlivých Office Open XML jazykov 5. Markup Compatibility and Extensibility - popisuje konvencie, ktoré umožňujú budúce vylepšenie a rozšírenie Office Open XML dokumentov 2.1.2 Špecifikácia ISO/IEC 29500:2008 Špecifikácia k druhému štandardu zaviedla použitie dvoch úrovní „Strictÿ a „Transitionalÿ. Kým „Transitionalÿ je veľmi podobná špecifikácií ECMA a jej úloha je hlavne spätná kompatibilita, v úrovni „Strictÿ sú zapracované (takmer) všetky pripomienky vznesené počas schvaľovacieho procesu. Táto špecifikácia na 7 228 stranách sa člení na 4 časti: 1. Fundamentals and Markup Language Reference - podrobná dokumentácia 2. Open Packaging Conventions - vnútorná fyzická štruktúra dokumentov (obdobne ako v ECMA-376) 3. Markup Compatibility and Extensibility - možnosti rozšírenia (obdobne ako v ECMA-376) 4. Transitional Migration Features - táto časť obsahuje elementy a atribúty nespomenuté v časti 1, ktoré zachovávajú kompatibilitu s predošlími Microsoft Office aplikáciami. Nachádza sa tu aj zoznam rozdielov medzi ECMA-376 a ISO/IEC 29500:20082 . Na základe tejto špecifikácie vznikla špecifikácia ECMA-376 2. verzia3 . Podobne ako pri ECMA-376 1. verzii aj táto verzia je príliš rozsiahla. 2.1.3 Online tutoriály a príručky, knihy Veľa informácii o Office Open XML sa dá nájsť na rôznych špecializovaných fórach a blogoch. Bohužiaľ, tieto informácie nie sú kompletné a ťažko sa v spleti mnohých článkov orientuje. Príkladom zaujímavého článku je napríklad [Jon06], avšak nie je dostatočne detailný. Ďalšia kategória online príručiek sú rôzne prehľady, ako napríklad [Ehr06] alebo [Mic03]. Prvý z menovaných je zameraný hlavne na fyzickú štruktúru dokumentu a druhý je zase zastaralý4 . Posledný zdroj, ktorý si popíšeme je [Kos08]. Ide o slidy, na ktorých je 2 Rozdiely sú napísané na siedmich stranách. ECMA-376 2. verzia a ISO/IEC 29500:2008 sú obsahovo rovnaké. 4 opisuje WordprocessingML ešte vo verzii z Office 2003 XML 3 KAPITOLA 2. OFFICE OPEN XML 9 síce prehľadne, ale až príliš stručne popísaný Office Open XML. Nakoniec si spomenieme knihu [LML04], ktorá je síce prehľadná, ale bohužiaľ zastaralá, keďže opisuje predchodcu Open Office XML - formát Office 2003 XML. Táto kniha je vhodná len na úplne základné informácie o tomto formáte. 2.2 Chronológia vývoja Open Office XML Začiatky Office Open XML siahajú do roku 2000, kedy spoločnosť Microsoft v beta verzii kancelárskeho balíka Microsoft Office XP použila ako alternatívny súborový formát pre tabuľkové dokumenty formát založený na XML. Vtedy ho nazvala SpreadsheetML a tento formát je predchodcom toho dnešného. Neskôr v roku 2002 bol spolu s beta verziou Microsoft Office 2003 zverejnený formát na ukladanie textového dokumentu - WordprocessingML, ktorý je tiež predchodcom toho dnešného. Oba formáty potom vystupovali pod názvom Office 2003 XML. V roku 2004 Európska únia odporučila spoločnosti Microsoft zverejniť a štandardizovať špecifikáciu k tomuto novému formátu. Rok na to spoločnosť vyhlásila, že po úpravách sa chystá štandardizovať tento formát pod hlavičkou združenia ECMA International. To sa nakoniec v roku 2006 aj stalo a špecifikácia Office Open XML sa stala medzinárodným štandardom ECMA-376. Vzápätí sa tento formát stal prednastaveným v najnovšom kancelárskom balíku Microsoft Office 2007. Po zapracovaní rôznych pripomienok bola špecifikácia štandardizovaná Medzinárodnou organizáciou pre normalizáciu ako štandard ISO/IEC 29500:2008. Stalo sa tak v novembri 2008 a preto na rozdiel od ECMA štandardu, ISO štandard bude plne zapracovaný až v kancelárskom balíku v nadchádzajúcej verzii Microsoft Office 2010. Jeden z rodielov oproti ECMA štandardu je, že ISO definuje dve úrovne Office Open XML - Strict a Transitional. Strict verzia má prísnejšiu štruktúru (v pôvodnej verzii je veľa vecí, ktoré sa v Office Open XML dajú spraviť viacerými spôsobmi) oproti úrovni Transitional, ktorej úloha je hlavne spätná kompatibilita. 2.3 Štruktúra Office Open XML Formát Office Open XML umožňuje ukladať tak formátovaný text, ako aj tabuľky či prezentácie. Pre každý z týchto typov existujú špecializované značkovacie jazyky v rámci Open Office XML. Tieto značkovacie jazyky sú nasledujúce: KAPITOLA 2. OFFICE OPEN XML 10 WordprocessingML Slúži na reprezentáciu formátovaného textu. V tejto práci bude tomuto značkovaciemu jazyku venovaný najväčší priestor. SpreadsheetML Reprezentuje tabuľky. PresentationML Reprezentuje prezentácie. Office Open XML obsahuje aj takzvané zdieľané značkovacie jazyky, ktoré sa môžu vyskytovať aj v rámci vyššie spomenutých jazykov: DrawingML Značkovací jazyk reprezentujúci vektorovú grafiku. Pomocou tohto značkovacieho jazyka je možné renderovať grafický text (s rôznymi efektami), rôzne geometrické tvary, ale tiež grafické tabuľky či grafy (koláčové, stĺpcové, . . .). Tomuto značkovaciemu jazyku sa budeme venovať ešte neskôr v samostatnej časti. VML (Vector Markup Language) Tento značkovací jazyk slúži tiež na zobrazovanie vektorovej grafiky. Spoločnosť Microsoft sa rozhodla tento jazyk použiť aj napriek tomu, že konzorcium W3C odporučilo ako štandard na zobrazovanie vektorovej grafiky jazyk SVG (Scalable Vector Graphics). Office MathML Šlúži na reprezentovanie matematických zápisov (vzorcov, výrazov. . .). Tento značkovací jazyk bol podrobený kritike, pretože na matematické vzorce už existuje štandardizovaný značkovací jazyk MathML. V skutočnosti sú tieto jazyky veľmi príbuzné a jediný zásadný rozdiel je v tom, že do Office MathML sa na rozdiel od MathML dajú zakomponovať elementy z WordprocessingML ako napríklad poznámky pod čiarou, komentáre, obrázky, či dokonca formátovanie. V ďalšom texte si povieme bližšie informácie hlavne o WordprocessingML a čiastočne o DrawingML. Teda značkovacie jazyky, ktoré sa aktívne podieľajú na reprezentácii dokumentov vytváraných v programe Word z kancelárskeho balíka Microsoft Office 2007. Bližšie informácie o ostatných jazykoch sú nad rámec tejto diplomovej práce. 2.4 Open Packaging Conventions Formát Office Open XML, ako už bolo spomenuté, obsahuje vzájomne poprepájané súbory zbalené do jedného ZIP archívu. Vnútorná štruktúra v tomto archíve je definovaná KAPITOLA 2. OFFICE OPEN XML 11 na základe štandardu vyvinutého tiež spoločnosťou Microsoft s názvom Open Packaging Conventions (OPC). 2.4.1 Balík a časti v OPC Balíkom v kontexte Open Packaging Conventions chápeme kontajner5 obsahujúci časti dokumentu. Tieto časti môžu niesť nejakú informáciu o dokumente (text, štýly, komentáre, obrázok, fonty, . . .) alebo môžu definovať prepojenia medzi týmito informáciami. Príkladom prepojenia je napríklad informácia o umiestnení obrázka v štruktúre balíka. Fyzicky je balík ZIP archív, kde každý súbor v ZIP archíve reprezentuje nejakú časť balíka. Je to vlastne elegantný spôsob, ako celý dokument a všetky jeho súčasti (obrázky, fonty, . . .) uchovávať v jednom fyzickom súbore. Každý typ dokumentu má inú súborovú štruktúru v rámci balíka. Niektoré konvencie sú však pre všetky rovnaké. adresár rels V tomto adresári sa nachádzajú súbory definujúce vzťahy medzi rôznymi časťami. Pre tieto súbory je vyhradená prípona „.relÿ. Bližšie informácie o definovaní vzťahov si povieme v samostatnej časti. súbor / rels/.rels Súbor vzťahov / rels/.rels definuje vzťahy celého balíku ku konkrétnym častiam. Príkladom takéhoto vzťahu je umiestnenie hlavného dokumentu. súbor [Content Types].xml V tomto súbori sa definuje typ obsahu jednotlivých častí obsiahnutých v balíku. Podrobnejšie sa definícii typov obsahu budeme venovať neskôr v samostatnej časti. Ako je vidno, povinných konvencií pri dodržiavaní štandardu OPC nie je veľa, avšak existujú i nepísané konvencie, ktoré sprehľadňujú celý dokument. Takáto konvencia napríklad je, že dokument aplikácie Microsoft Word má hlavný dokument uložený v adresári /word/document.xml a podobne. Ako taká typická štruktúra dokumentu aplikácie Microsoft Word vyzerá je možné vidieť na obrázku 2.1. 2.4.2 Prepojenia v OPC Jednotlivé časti v dokumente môžu obsahovať referencie na iné časti v dokumente alebo aj mimo dokumentu (linky na web stránky a podobne). Tieto referencie v OPC nazývame 5 Bohužiaľ, lepší preklad na anglické „containerÿ sa nedá nájsť. Myslíme na kontajner vo význame abstraktného balíka, ktorý obsahuje nejaké položky. KAPITOLA 2. OFFICE OPEN XML 12 Obr. 2.1: Typická štruktúra WordprocessingML dokumentu prepojenia. Definované sú v súbore uloženom v adresári \_rels, ktorý sa nachádza v tom istom adresári ako súbor, pre ktorý definujeme prepojenie. Navyše súbor, kde budú tieto prepojenia definované, bude mať také isté meno ako súbor, pre ktorý prepojenia definujeme, len bude mať pridanú príponu „.relÿ. Napríklad súbor /word/document.xml bude mať prepojenia definované v súbore /word/ rels/document.xml.rel. Súbor s prepojeniami je XML dokument s preddefinovanou štruktúrou. Hlavným koreňovým elementom je element Relationships. Potom nasleduje zoznam prepojení, každý v elemente Relationship. Atribúty tohto elementu sú nasledovné: Id Atribút určuje jednoznačný identifikátor pre toto prepojenie. Hodnota musí byť jedinečná v rámci celého súboru s prepojeniami. Type Atribút určuje typ prepojenia na základe URI. Zoznam najčastejšie používaných URI pre WordprocessingML môžeme vidieť v tabuľke 2.1. Target Atribút určuje cieľový zdroj. Určený je na základe URI. TargetMode Posledný atribút určuje či sa nachádza cieľový zdroj definovaný v atribúte Target vo vnútri balíka (vtedy má hodnotu „Internalÿ), alebo mimo balíka (hodnota „Externalÿ). Teraz si ukážeme konkrétny príklad súboru s prepojeniami. V príklade 2.1 vidíme typický súbor / rels/.rel pre WordprocessingML. Ako už bolo spomenuté, tento súbor je KAPITOLA 2. OFFICE OPEN XML 13 Tabuľka 2.1: URI základných prepojení vo WordprocessingML dokumente URI http://schemas.openxmlformats.org/officeDocument /2006/relationships/officeDocument http://schemas.openxmlformats.org/officeDocument /2006/relationships/extended-properties http://schemas.openxmlformats.org/package /2006/relationships/metadata/core-properties http://schemas.openxmlformats.org/officeDocument /2006/relationships/styles http://schemas.openxmlformats.org/officeDocument /2006/relationships/numbering http://schemas.openxmlformats.org/officeDocument /2006/relationships/footnotes http://schemas.openxmlformats.org/officeDocument /2006/relationships/endnotes http://schemas.openxmlformats.org/officeDocument /2006/relationships/comments http://schemas.openxmlformats.org/officeDocument /2006/relationships/theme http://schemas.openxmlformats.org/officeDocument /2006/relationships/image http://schemas.openxmlformats.org/officeDocument /2006/relationships/hyperlink popis vzťah medzi balíkom a hlavným dokumentom vzťah medzi balíkom a rozšírenými informáciami o dokumente (počet strán/riadkov/znakov, . . .) vzťah medzi balíkom a prehľadom informácii o dokumente (názov a popis dokumentu, autor, dátum, . . .) vzťah medzi dokumentom a externými štýlmi vzťah medzi dokumentom a definíciou zoznamov vzťah medzi dokumentom a definíciou poznámok pod čiarou vzťah medzi dokumentom a definíciou poznámok na konci dokumentu vzťah medzi dokumentom a definíciou komentárov vzťah medzi dokumentom a témou vzťah medzi dokumentom a obrázkom vzťah medzi dokumentom a nejakým cieľom hyperlinky Príklad 2.1 „.relÿ súbor vo WordprocessingML menšia výnimka, pretože definuje prepojenia k celému balíku a nie medzi časťami balíka. Súbor obsahuje tri prepojenia. Prvé prepojenie je podľa definície uvedenej v tabuľke 2.1 prepojenie na súbor s rozšírenými informáciami o dokumente, kde sa dá zistiť počet riadkov a iné sumáre bez potreby prechádzať celým dokumentom. Druhé prepojenie je KAPITOLA 2. OFFICE OPEN XML 14 prepojenie tiež s informáciami o dokumente ale tento krát s menom autora, dátumom vytvorenia, poslednej zmeny a podobne. Posledné prepojenie definuje umiestnenie hlavného dokumentu. 2.4.3 Definícia typov obsahu v OPC Definícia obsahu uloženého v jednotlivých častiach balíka sa nachádza v súbore [Content_ Types].xml. Je to opäť XML dokument, ktorého štruktúru si teraz popíšeme. Koreňový element je Types. Tento element má potomkov element Default a element Override, v ktorých definujeme typy obsahu pre všetky súbory s danou príponou (Default) alebo pre konkrétne časti (Override). Default element má atribúty Extension a ContentType. V prvom definujeme príponu, v druhom samotný typ obsahu. Override element má atribúty PartName a ContentType. Prvý z nich definuje časť balíka, pre ktorý definujeme obsah. Je v ňom uložená cesta v rámci balíka k danému súboru. Druhý parameter podobne ako pri prvom elemente definuje typ obsahu. Ak pre nejakú časť existuje aj Override aj Default element, použije sa typ definovaný v elemente Override. Príklad 2.2 [Content Types].xml súbor vo WordprocessingML dokumente Na príklade 2.2 vidíme jednoduchý dokument s definíciami obsahu vo WordprocessingML dokumente. Prvé dve definície určujú obsah súborov s príponou „.relsÿ a „.xmlÿ. KAPITOLA 2. OFFICE OPEN XML 15 Ďalšia definícia určuje, že časť /word/document.xml obsahuje hlavný dokument. Ďalej vidíme, že súbor /word/styles.xml obsahuje štýly, /docProps/app.xml rozšírené informácie o dokumente a nakoniec /docProps/core.xml základné informácie o dokumente. Prepojenia verzus definícia typov obsahu Čitateľ si iste všimol náznak redundancie informácií o obsahu jednotlivých súborov v dokumente. Informácia o obsahu súboru je obsiahnutá v súbore s prepojeniami aj v súbore s typmi obsahu. Obe časti sú aj napriek tomu dôležité a to hneď z niekoľkých dôvodov. V prvom rade, informácia o obsahu v prepojeniach nie je úplná. Napríklad informácia o prepojení obrázka a nečíselného zoznamu nehovorí nič o formáte obrázka. Práve o tomto formáte hovorí typ obsahu súboru. Ďalším dôvodom je, že OPC neslúži len na definovanie WordprocessingML dokumentov, ale v podstate akéhokoľvek iného formátu. A [Content\ _Types].xml súbor je podľa špecifikácie na rozdiel od definovania prepojení povinný. 2.5 WordprocessingML V tejto časti si predstavíme WordprocessingML dokument. WordprocessingML dokument pozostáva z hlavného dokumentu6 a jeho súčastí. V nich sa nachádzajú doplnkové informácie, texty, štýly a podobne. Teraz sa detailnejšie pozrieme na tento hlavný dokument, na jeho štruktúru a potom postupne spomenieme aj jeho ďalšie súčasti, ktoré sú s týmto hlavným dokumentom prepojené. 2.5.1 Jednoduchý text Hlavný dokument je XML súbor, ktorý v štruktúre balíka tvorí najväčší podiel na výslednom dokumente. Skôr ako sa pozrieme detailnejšie na konkrétne XML elementy ukážeme si na príklade 2.3 jednoduchý dokument s textom „Hello world!ÿ. Koreňový element v hlavnom dokumente je document. Ten obsahuje element body, ktorý vymedzuje telo dokumentu. Telo dokumentu je členené na odstavce, ktoré obsahujú behy7 a tie ešte obsahujú samotný text. Odstavce sú označené elementom p, beh elementom r. Behy definuje také úseky textu alebo iných komponentov, ktoré majú rov6 Hlavný dokument je v štruktúre balíka umiestnený na základe prepojení, ktoré sme si definovali v časti 2.4.2. 7 z anglického „runÿ KAPITOLA 2. OFFICE OPEN XML 16 Príklad 2.3 Hlavný dokument vo WordprocessingML Hello world! naké formátovanie. Môže to byť napríklad niekoľko slov zobrazených hrubým písmom. Beh okrem zobraziteľného textu, ktorý je vždy v elemente t, môže obsahovat napríklad aj zalomenie riadku pomocou elementu br. Poznámka. Treba si všimnúť, že meno každého elementu má prefix pred dvojbodkou. V príklade je to prefix „wÿ. Týmto je definovaný menný priestor daného elementu. 2.5.2 Formátovanie textu Formátovanie textu v dokumente sa môže realizovať niekoľkými spôsobmi. Prvým z nich je využiť element rPr8 , ktorý definuje formátovanie pre daný beh alebo element pPr9 , ktorý definuje formátovanie pre daný odstavec. Ďalším spôsobom je definovať štýl, ktorý sa potom k danému behu alebo odstavcu pripojí využitím elementu rStyle resp. pStyle. 2.5.2.1 Formátovanie behu Na formátovanie behu slúži už spomenutý element rPr, umiestnený na začiatku behu, ktorý chceme formátovať. Do tohto elementu potom môžme pridávať elementy, ktoré slúžia na formátovanie. Príklad 2.4 zobrazuje výsek dokumentu, v ktorom vypíšeme text „Hello world!ÿ („Helloÿ hrubým písmom). Ako vidieť z príkladu, hrubé písmo dosiahneme použitím elementu b. Poznámka. Štandardne sa medzere v texte na začiatku alebo na konci ignorujú. Nastavením atribútu xml:space na hodnotu „preserveÿ zabezpečíme, že sa medzere ignorovať nebudú. V tabuľke 2.2 je zoznam bežných formátovacích elementov a k nim popis, atribúty a ich význam. 8 9 skratka z „run propertiesÿ - vlastnosti behu skratka z „paragraph propertiesÿ - vlastnosti odstavca KAPITOLA 2. OFFICE OPEN XML 17 Príklad 2.4 Formátovanie behu vo WordprocessingML ... Hello world! ... Tabuľka 2.2: Zoznam formátovacích elementov pre beh 2.5.2.2 Element b i u strike vertAlign popis hrubý font kurzíva podčiarknuté písmo prečiarknuté písmo vertikálne zarovnanie color farba textu sz rFonts veľkosť fontu meno fontu highlight farba pozadia shd farba pozadia10 atribúty val - on/off, prednastavený je on val - on/off, prednastavený je on val - typ podčiarkuntia, napríklad „doubleÿ val - on/off, prednastavený je on val - typ vertikálneho zarovnania (superscript horný index, subscript - dolný index, baseline klasické zarovnanie v riadku) themeColor - špecifikuje farebnú tému definovanú v časti s témami val - RGB hodnota farby val - veľkosť fontu v polbodoch ascii/hAnsi - meno fontu pre znaky ASCII rozsahu / ostatné znaky asciiTheme/hAnsiTheme - špecifikuje tému, kde je definovaný font val - farba pozadia (slovná hodnota, napr. red, blue, yellow, . . .) fill - RGB hodnota farby themeFill - špecifikuje farebnú tému definovanú v časti s témami Formátovanie odstavca Analogicky k formátovaniu behu sa definuje formátovanie odstavca. Na rozdiel od behu sa však na odstavec viažu iné možnosti formátovania. Dá sa pracovať s odstavcom ako takým a nie so samotným textom. Na formátovanie odstavca teda slúži element pPr, ktorý musí byť umiestnený na začiatku odstavca, ktorý chceme formátovať. Možnosti formátovacích elementov je možné vidieť v tabuľke 2.3. Element pBdr ešte môže obsahovať ďalšie elementy, ktoré definujú, jednotlivé strany 10 Element shd má podobnú funkciu ako element highlight, ale umožňuje navyše nastaviť vlastnosti, ktoré sú nad rámec tejto diplomovej práce (napríklad pattern). 11 1440 twipsov = 1 palec = 96 pixelov KAPITOLA 2. OFFICE OPEN XML 18 Tabuľka 2.3: Zoznam formátovacích elementov pre odstavec Element shd popis farba pozadia pBdr jc rámček okolo odstavca zarovnanie textu v odstavci ind horizontálne odsadenie spacing riadkovanie atribúty fill - RGB hodnota farby themeFill - špecifikuje farebnú tému definovanú v časti s témami right, left, center, both - v poradí vpravo, vľavo, na stred, rovnomerne rozmiestniť (justify) left - odsadenie zľava right - odsadenie sprava (vyjadrené v twipsoch11 ) line - výška riadku (vyjadrené v 240-tinách riadku) before - veľkosť medzery pred odstavcom after - veľkosť medzery za odstavcom (vyjadrené v twipsoch) rámčeka. Sú to elementy top (vrchná strana), right (pravá strana), bottom (spodná strana) a left (ľavá strana). Každý z týchto elementov môže mať tieto atribúty: color (farba v hexadecimálnom RGB tvare), val (typ čiary, napríklad „dashedÿ, „singleÿ, „solidÿ) a sz (hrúbka čiary - vyjadrené v osminách bodu). Príklad 2.5 Formátovanie odstavca vo WordprocessingML ... Hello world! ... V príklade 2.5 vidíme fragment hlavného dokumentu, v ktorom je zadefinovaný odstavec s textom „Hello world!ÿ. Tento odstavec má nastavené modré pozadie a červené horné a dolné okraje s hrúbkou 4 pixely. Navyše je tento odstavec odsadený zľava o pol palca (48 pixelov) a má nastavené dvojité riadkovanie. KAPITOLA 2. OFFICE OPEN XML 2.5.2.3 19 Formátovanie štýlmi Štýly umožňujú vytvorenie množiny formátovacích elementov, ktoré je možné priradiť behu alebo odstavcu. Štýly zmenšujú veľkosť dokumentu a hlavne ho sprehľadňujú a zjednodušujú úpravy. Definujú sa v časti štýly12 a referencujú sa na tom istom mieste, kde sa definuje formátovanie behu alebo odstavca. V elemente rStyle resp. pStyle cez atribút val určíme, ktorý štýl sa má použiť a ten potom platí v celom behu, resp. v celom odstavci. Dokument s definíciami štýlov má koreňový element styles. Najdôležitejší potomkovia tohto elementu sú elementy docDefaults a style. V prvom z nich sa definujú prednastavené hodnoty platné na celý dokument (napríklad veľkosť fontu, názov fontu a podobne). Prednastavené hodnoty pre každý beh sa definujú v elemente rPrDefaults a pre každý odstavec v elemente pPrDefaults. Definovanie formátovania v týchto elementoch je už analogické k definovaniu formátovania v behoch resp. v odstavcoch. V elementoch style sa zase definuje samotný štýl. Element má atribúty type a styleId. Prvý z nich definuje typ štýlu a druhý je jednoznačný textový identifikátor štýlu. Typy štýlov môžu byť: • paragraph - štýl sa viaže na odstavce • character - štýl sa viaže na jednotlivé znaky • numbering - štýl sa viaže na číselné a nečíselné zoznamy • table - štýl sa viaže na tabuľku Štýly sú definované tak, že sa do elementu style vloží rPr element (definovanie štýlu pre beh) alebo pPr element (definovanie štýlu pre odstavec). Definovanie štýlov v týchto elementoch je už štandardné (tzn. vkladáme do nich formátovacie elementy). Ďalší element, ktorý sa môžu vyskytnúť v elemente style je basedOn element. Umožňuje cez atribút val nastaviť štýl, z ktorého má aktuálny štýl zdediť formátovacie elementy. Použitie štýlov si teraz ukážeme na príklade 2.6. Prvý fragment dokumentu je definícia štýlov vo vnútri styles elementu v časti so štýlmi. Definujeme dva štýly (Italic - kurzíva a ItalicBold - hrubý font kurzívou), ktoré sa viažu na celý odstavec a kde druhý z nich dedí vlastnosti toho prvého. V druhom fragmente vidíme použitie štýlu v hlavnom dokumente. Výsledkom je odstavec, v ktorom je kurzívou a hrubým fontom napísaný text „Hello world!ÿ. 12 Kde sa štýly nachádzajú, zistíme z prepojení hlavného dokumentu, teda štandardne v /word/\_rels/ document.xml.rel KAPITOLA 2. OFFICE OPEN XML 20 Príklad 2.6 Príklad použitia štýlov vo WordprocessingML súbor "/word/styles.xml": ... ... súbor "/word/document.xml": ... Hello World! ... 2.5.2.4 Hierarchia formátovania Pri definovaní formátovania (či už priamo, alebo cez štýly) často dochádza k situácii, že na jeden fragment textu platí viac formátovacích vzájomne sa vylučujúcich elementov. Definovanie formátovania má však svoje pravidlá, na základe ktorých sa vždy dá jednoznačne určiť, aké formátovanie sa nakoniec použije. Funguje nasledovná hierarchia: • Najprv sa použijú prednastavené štýly13 . • Potom sa použijú štýly definované pre tabuľku. • Ďalej sa použijú štýly definované pre číselné a nečíselné zoznamy. • Potom nasledujú štýly definované pre odstavce. • Potom nasledujú štýly definované pre beh. • Nakoniec nasledujú formátovacie elementy priamo definované v odstavcoch a behoch. Formátovaniu tabuľky a zoznamov sa budeme venovať v príslušných častiach. 2.5.3 Číselné a nečíselné zoznamy Vo WordprocessingML sú zoznamy odstavce, ku ktorým je priradený štýl zoznamu. Čo odlišuje klasický odstavec od položky zoznamu je prítomnosť elementu listPr v elemente 13 element rPrDefaults KAPITOLA 2. OFFICE OPEN XML 21 pPr. V tomto elemente je definovaný štýl zoznamu a úroveň (level) aktuálnej položky. Tieto vlastnosti sú určené elementmi ilfo a ilvl. V prvom z nich sa cez atribút val definuje štýl zoznamu a v druhom taktiež cez atribút val úroveň vnorenia v zozname14 . Definície štýlov zoznamu nájdeme na základe definície prepojení na hlavný dokument. Štandardne to však je v súbore /word/numbering.xml. V dokumente so štýlmi zoznamov sa definujú najprv abstraktné štýly a až potom sa definujú konkrétne štýly, ktoré musia dediť vlastnosti jedného z abstraktných štýlov. Koreňový element v tomto dokumente je numbering. Príklad 2.7 Príklad obrázkovej odrážky vo WordprocessingML ... ... Ak sa v odrážkach vyskytujú obrázky, tak tieto sa definujú v elemente numPicBullet. Atribútom numPicBulletId sa nastaví jedinečný identifikátor, ktorým sa neskôr referencuje. Obsahuje element pict, v ktorom je element v:shape a ten obsahuje element v:imagedata. V ňom sa cez atribút r:id nastavuje identifikátor obrázka definovaného v prepojeniach dokumentu so zoznamami (štandardne v súbore /word/\_rels/numbering. xml.rels). V príklade 2.7 vidíme definovanie obrázkovej odrážky. Obrázok s identifikátorom „rId1ÿ je potom definovaný v prepojeniach dokumentu so zoznamami. Abstraktný štýl sa definuje elementom abstractNum. V ňom sa elementami lvl určujú vlastnosti jednotlivých úrovní zoznamu. Túto úroveň určíme atribútom ilvl 15 . Teraz si uvedieme zoznam elementov, ktoré definujú vlastnosti danej úrovne: start Využíva sa pri číselných zoznamoch. Atribútom val určuje od ktorého čísla sa bude úroveň číslovať. numFmt Určuje typ odrážky. Nastavuje sa atribútom val a môže nadobúdať napríklad tieto hodnoty: • bullet - klasická nečíselná odrážka 14 15 Zoznam môže byť vnorený v inom zozname. Najvyššia úroveň má ilvl 0, prvá vnorená 1, atď. . . KAPITOLA 2. OFFICE OPEN XML 22 • decimal - číslo • lowerLetter - malé písmená abecedy • upperLetter - veľké písmená abecedy • lowerRoman - malé rímske čísla • upperRoman - veľké rímske čísla lvlText Atribútom val určuje „textÿ odrážky. Pri nečíselných zoznamoch určuje znak (alebo znaky) ktoré sa zobrazia ako odrážka. Pri číselných zoznamoch má špeciálny význam znak percenta nasledovaný číslom. Reprezentuje poradie položky pre úroveň vyjadrenú číslom za znakom percenta. Použitie tohoto atribútu môžeme vidieť v príklade 2.8. lvlPicBulletId - identifikátor skôr definovaného obrázka, ktorý sa má použiť ako odrážka pPr - miesto pre formátovacie elementy vzťahujúce sa na odstavec (odsadenie) rPr - miesto pre formátovacie elementy vzťahujúce sa na beh (font) Definícia samotných štýlov sa nachádza v elementoch num. V atribúte numId sa potom definuje jednoznačný identifikátor, ktorým sa štýl číslovania použije v hlavnom dokumente. V elemente num sa potom nachádza element abstractNumId, ktorým sa určí, z ktorého abstraktného štýlu zoznamu sa majú zdediť vlastnosti. Môže ešte obsahovať element lvlOverride, v ktorom sa dajú predefinovať vlastnosti zoznamu pre úroveň definovanú v jeho atribúte ilvl. V ňom sa nachádzajú už štandardné elementy lvl. Jednoduchá definícia štýlu číselného zoznamu a následné použitie vidíme v príklade 2.8. Prvý fragment je z dokumentu definujúceho štýly číslovania. Kvôli prehľadnosti sú definované len dve úrovne. Druhý fragment je priamo z hlavného dokumentu a demonštruje jednu položku zoznamu na úrovni 1 (ilvl = 0) a pod ňou je vnorený zoznam tiež s jednou položkou na úrovni 2 (ilvl = 1). Oba používajú štýl číslovania s id = 1. Ako vyzerá výstupný dokument môžeme vidieť na obrázku 2.2. Obr. 2.2: Číselný zoznam KAPITOLA 2. OFFICE OPEN XML 23 Príklad 2.8 Príklad číselného zoznamu vo WordprocessingML súbor "/word/numbering.xml": súbor "/word/document.xml": ... prvá položka číselného zoznamu druhá položka číselného zoznamu ... 2.5.4 Tabuľky Tabuľky sa vo WordprocessingML označujú elementom tbl a vkladajú sa do elementu body. Element tbl môže obsahovať nasledujúce elementy: • tblPr - vlastnosti tabuľky (bližšie informácie sú nad rámec tejto diplomovej práce) • tblGrid - obsahuje pre každý stĺpec element gridCol, v ktorom sa atribútom w nastavuje jeho šírka KAPITOLA 2. OFFICE OPEN XML 24 • tr - riadok tabuľky Riadky potom obsahujú bunky tabuľky, ktoré reprezentuje element tc. Bunky obsahujú element tcPr, v ktorom sa definujú vlastnosti bunky, a nakoniec samotný obsah. Vlastnosti bunky sú napríklad šírka bunky (element tcW), definícia okrajov bunky (element tcBorders) alebo elementy ktoré majú na starosti spájanie buniek v tabuľke (tým sa budeme venovať neskôr). Obsah bunky je väčšinou odstavec textu, teda element p, ale môže to byť napríklad aj ďalšia vnorená tabuľka. Spájanie buniek je relatívne neprehľadná záležitosť, pretože WordprocessingML umožňuje hneď niekoľko spôsobov. Prvý z nich je spájanie prostredníctvom elementov vMerge a hMerge. Prvý z nich umožňuje vertikálne spájanie buniek (riadky) a druhý horizontálne (stĺpce). Oba fungujú rovnakým spôsobom, že sa nastaví atribútu val hodnota „restartÿ a tým sa určí prvá bunka v spojenej oblasti. Každá ďalšia bunka patriaca do tejto oblasti potom tento element s nastaveným atribútom val na „continueÿ (resp. nenastaveným vôbec, pretože táto hodnota je prednastavená). Ďalší spôsob spájania buniek je elementami gridSpan a rowSpan. Prvý slúži na spájanie buniek v riadku (teda spája stĺpce) a druhý na spájanie buniek v stĺpci (spája riadky). Cez atribút val sa celočíselnou hodnotou nastaví počet buniek, ktoré sa spoja. Ďalšie bunky, ktoré sa nachádzajú v takto definovanej spojenej oblasti, sa potom vynechávajú. Príklad 2.9 Príklad tabuľky vo WordprocessingML ... 1 2 3 KAPITOLA 2. OFFICE OPEN XML 25 Teraz si ukážeme jednoduchú tabuľku na príklade 2.9, kde vidíme fragment z hlavného dokumentu. Tabuľka má rozmery 2x2 a v prvom riadku sú spojené obe bunky. Táto spojená bunka obsahuje text „1ÿ. Zvyšné bunky obsahujú text „2ÿ a „3ÿ. 2.5.5 Poznámky pod čiarou Poznámky pod čiarou sa vo WordprocessingML štandardne definujú v súbore /word/ footnotes.xml16 a referencujú sa potom v hlavnom dokumente. Dokument s definíciami poznámok má koreňový element footnotes, v ktorom sa nachádzajú elementy footnote. V nich sú definované samotné poznámky. Atribútom id elementu footnote sa nastavuje jednoznačný identifikátor, ktorým potom pristupujeme k poznámke v hlavnom dokumente. Element môže obsahovať element footnotePr, ktorým sa nastavujú rôzne vlastnosti (ich popis je však nad rámec tejto diplomovej práce). Obsahuje text samotnej poznámky a to väčšinou štandardne v elemente p. Takto definované poznámky sa potom referencujú v hlavnom dokumente prostredníctvom elementu footnoteReference umiestneného v samostatnom behu (element r). Na definovanú poznámku sa prepojí prostredníctvom atribútu id, ktorý obsahuje hodnotu jednoznačného identifikátora poznámky. V jednoduchom príklade 2.10 vidíme použitie poznámky pod čiarou za textom „Hello world!ÿ s textom poznámkou „toto je poznámkaÿ. V prvom fragmente je dokument definujúci poznámky pod čiarou. Element footnoteRef reprezentuje číselnú hodnotu, ktorá definuje poznámku v texte. V druhom fragmente je použitie tejto poznámky v texte hlavného dokumentu. 2.5.6 Poznámky na konci dokumentu S poznámkami na konci dokumentu sa pracuje presne rovnako ako s poznámkami pod čiarou. Jediný rozdiel je v tom, že všetky názvy „footnoteÿ treba nahradiť názvom „endnoteÿ. 2.5.7 Hyperlinky Hyperlinky vo WordprocessingML sa vkladajú pomocou prepojení. Najprv sa v dokumente s prepojeniami zadefinuje prepojenie na externý cieľ, teda sa do atribútu Id nastaví nejaký 16 Umiestnenie určujú prepojenia hlavného dokumentu KAPITOLA 2. OFFICE OPEN XML 26 Príklad 2.10 Príklad poznámky pod čiarou vo WordprocessingML súbor "/word/footnotes.xml": toto je poznámka súbor "/word/document.xml": ... Hello world! ... jednoznačný identifikátor, do atribútu Type dá URI určujúce hyperlink, do Target sa dá cieľ odkazu a TargetMode sa nastaví na „Externalÿ. Textový odkaz sa potom do hlavného dokumentu vkladá elementom hyperlink a atribútom id sa nastaví identifikátor odkazu. Tento element sa vkladá do elementu p a text v ňom sa definuje elementom r. Keď chceme mať hyperlink z obrázka, namiesto elementu hyperlink použijeme element hlinkClick s rovnakými vlastnosťami. Rozdiel je len v umiestnení, keďže hlinkClick sa vkladá do elementu docPr v obrázku. Bližšie informácie o obrázkoch si uvedieme neskôr. V príklade 2.11 si ukážeme definíciu a použitie jednoduchého odkazu na stránku http://www.foo.sk/. V prvom fragmente je časť dokumentu s definíciami prepojení17 a v druhom použitie definovaného odkazu v hlavnom dokumente. Dokument vytvára hyperlink s textom „Toto je klikací odkaz.ÿ odkazujúcim na stránku http://www.foo.sk/. 17 Prepojenia boli detailnejšie opísané v časti 2.4.2 KAPITOLA 2. OFFICE OPEN XML 27 Príklad 2.11 Príklad hyperlinky vo WordprocessingML súbor "/word/_rels/document.xml.rels": ... ... súbor "/word/document.xml": ... Toto je klikací odkaz. ... 2.5.8 Komentáre Komentáre sa vo WordprocessingML definujú štandardne v dokumente /word/comments. xml18 . Koreňový element je comments. Ten obsahuje elementy comment, v ktorých sú definované samotné komentáre. Atribútom id sa určí jednoznačný identifikátor, atribútom author sa určí autor poznámky, atribút date určuje dátum vytvorenia a nakoniec atribút initials určuje inicálky autora (hodnota sa použije na označenie komentára). Môže obsahovať akýkoľvek blokový element (tzn. p, tbl). Špeciálny význam má element annotationRef, ktorý reprezentuje označenie poznámky v texte. V hlavom dokumente sa potom poznámky referencujú elementami commentRangeStart a commentRangeEnd, ktoré určujú začiatok a koniec komentovanej časti. Nachádzajú sa v elemente p a medzi nimi môže byť prakticky akýkoľvek obsah. Atribútom id sa určí identifikátor komentára, ktorému chceme začiatok a koniec v dokumente určiť. Nakoniec elementom commentReference definujeme vloženie komentára do dokumentu. Atribútom id sa určí identifikátor komentára, ktorý chceme do dokumentu vložiť. Tento element by sa mal nachádzať v elemente r. Teraz si ukážeme použitie komentárov na príklade 2.12. V prvom fragmente vidím definíciu komentárov. Zadefinovali sme jeden komentár s identifikátorom „0ÿ, autorom „Frantisek Smitalaÿ a s iniciálkami „FSÿ. Text komentára je „Toto je komentárÿ. V druhom fragmente je časť hlavného dokumentu, kde na text „Tento text bude okomentovaný.ÿ 18 Umiestnenie určujú prepojenia hlavného dokumentu KAPITOLA 2. OFFICE OPEN XML 28 Príklad 2.12 Príklad komentárov vo WordprocessingML súbor "/word/comments.xml": Toto je komentár súbor "/word/document.xml": ... Tento text bude okomentovaný. ... aplikujeme pred tým definovaný komentár. 2.5.9 Obrázky Obrázky sa do dokumentu vkladajú pomocou elementu drawing, ktorý sa nachádza v elemente r. Do tohto elementu sa potom vkladajú elementy značkovacieho jazyka DrawingML. Prvý takýto element určuje, že akým spôsobom sa obrázok vkladá do textu. Môže to byť element wp:inline alebo wp:anchor. Prvý z nich určuje, že sa obrázok vloží do riadku s textom. Druhý z nich určuje, že obrázok bude ukotvený priamo v texte. Spôsob obtekania textu okolo obrázka bude definovaný v potomkoch tohto elementu. Teraz si ukážeme zoznam možných potomkov týchto elementov: • wp:extent - Atribútmi cx a cy určuje rozmer zobrazovaného obrázka. Udáva sa v jednotkách EMU19 . • wp:docPr - Obsahuje rôzne vlastnosti obrázka, ale hlavne môže obsahovať element hlinkClick, ku ktorému sú bližšie informácie v časti 2.5.7. • wp:positionH - Určuje horizontálnu pozíciu obrázka. 19 360000 EMU = 1 cm KAPITOLA 2. OFFICE OPEN XML 29 • wp:positionV - Určuje vertikálnu pozíciu obrázka. • wp:wrapSquare - Jeho výskyt definuje spôsob obtekania textu, v tomto prípade bude text obtekať obrázok tak, že sa okolo neho vytvorí (virtuálny) obdĺžnik. • wp:wrapTopAndBottom - Text bude obrázok obtekať zvrchu a zospodu, ale nie po bokoch. • a:graphic - Tento element obsahuje informácie o obrázku. Bližšie informácie si uvedieme neskôr. Elementy wp:positionH a wp:positionV určujú kde bude obrázok ukotvený. Oba obsahujú atribúty relativeFrom, ktorý určuje, že vzhľadom na čo sa bude obrázok kotviť20 . Potom obsahujú element wp:posOffset alebo wp:align. V prvom z nich sa definuje posun obrázka horizontálne a vertikálne v jednotkách EMU cez textový obsah elementu. V druhom z nich sa definuje zarovnanie obrázka cez textový obsah elementu hodnotami „rightÿ (vpravo), „leftÿ (vľavo) alebo „centerÿ (na stred). Element a:graphic obsahuje len element a:graphicData. V jeho atribúte uri sa zadefinuje URI, ktorá definuje obsah tohto elementu. V našom prípade je to obrázok http://schemas.openxmlformats.org/drawingml/2006/picture. Potomkom tohto elementu je potom už samotný obrázok, ktorý je definovaný elementom pic:pic. Element pic:pic môže obsahovať viac elementov, my sa budeme venovať iba dvom z nich. Prvý z nich je element pic:blipFill a druhý pic:spPr. Element pic:blipFill určuje spôsob akým sa obrázok vyplní. Môže obsahovať elementy a:blip a a:stretch. Prvý z nich definuje prostredníctvom atribútu r:embed jednoznačný identifikátor obrázka definovaného v prepojeniach. Druhý z nich definuje, že sa obrázok má roztiahnuť aby vyplnil celý definovaný priestor. Obsahuje jeden element a:fillRect. Tento definuje na akej ploche z definovaného priestoru sa má obrázok roztiahnuť. Pomocou atribútov b, l, r, t môžme percentuálne vymedziť túto plochu. V danom poradí určujú percentuálne odsadenie zdola, zlava, sprava a zhora. Keď sa vynechajú atribúty, obrázok sa natiahne na celý definovaný priestor. Element pic:spPr určuje vlastnosti obrázka. My sa budeme zaoberat jedným jeho potomkom - elementom a:ln. Tento určuje orámovanie obrázka. Atribútom w nastavíme hrúbku čiary v EMU jednotkách. Môže obsahovať element a:solidFill alebo a:prstDash. Prvý z nich definuje plnú výplň orámovania a farba výplne sa definuje v jeho potomkoch. 20 napríklad „paragraphÿ - odstavec, „columnÿ - stĺpec, „marginÿ - okraj. . . KAPITOLA 2. OFFICE OPEN XML 30 Druhý element definuje prerušovanú čiaru orámovania. Farba výplne môže byt definovaná dvoma spôsobmi. Prvý spôsob definovania farby je elementom a:srgbClr. V jeho atribúte val je 6 miestny hexadecimálny zápis RGB hodnoty farby. Druhý spôsob je cez element a:schemeClr, ktorým cez atribút val nastavíme farbu pomocou farebnej schémy definovanej v dokumente s témamy. Definícia prerušovaného rámčeka sa robí elementom a:prstDash, v ktorom nastavením atribútu val určíme spôsob prerušovania. Tieto spôsoby môžu byt „dashÿ - čiarkovane, „dotÿ - bodkovane a nakoniec „solidÿ - súvislá čiara. Príklad 2.13 Príklad obrázkov vo WordprocessingML súbor "/word/_rels/document.xml.rels": súbor "/word/document.xml": ... 2540 2540 ... Teraz si na príklade 2.13 ukážeme vloženie obrázka do dokumentu. Obrázok chceme ukotvit v texte a chceme aby text obtekal okolo obrázka. Ďalej chceme, aby bol okolo KAPITOLA 2. OFFICE OPEN XML 31 obrázka rámček z prerušovanej čiary zelenej farby. V prvom fragmente v príklade vidíme definíciu obrázka v prepojeniach. V druhom fragmente je samotné vloženie obrázka do dokumentu. Je dôležité poznamenat, že pre jednoduchosť boli odstránené niektoré časti dokumentu, ktoré neboli nevyhnutné na demonštráciu obrázkov vo WordprocessingML. Poznámka. Výskyt prefixov elementov, ktoré určujú menné priestory v tejto časti je zámerný, aby sme sa vyhli nedorozumeniam. Kým v predchádzajúcich častiach sme pracovali iba s jedným menným priestorom, tu ich je hneď niekoľko. Zoznam menných priestorov použitých v tejto kapitole sa nachádza v tabuľke 2.4. Tabuľka 2.4: Zoznam menných priestorov prefix w wp a pic r v 2.5.10 URI http://schemas.openxmlformats.org/wordprocessingml/2006/main http://schemas.openxmlformats.org/drawingml/2006 /wordprocessingDrawing http://schemas.openxmlformats.org/drawingml/2006/main http://schemas.openxmlformats.org/drawingml/2006/picture http://schemas.openxmlformats.org/officeDocument/2006 /relationships urn:schemas-microsoft-com:vml Témy Viackrát sme sa v tejto kapitole odvolávali na časť dokumentu s témami. Teraz si ukážeme, akú štruktúru má tento dokument. Koreňovým elementom je theme, ktorý v atribúte name určuje názov danej témy. Pod týmto elementom sa nachádza element themeElements. V ňom sa nachádzajú napríklad elementy clrScheme alebo fontScheme. V prvom sa definujú farebné schémy, v druhom schémy pre fonty. My sa budeme venovať iba farbám. Element clrScheme obsahuje atribút name, kde sa definuje meno pre danú schému. Obsahuje elementy definujúce jednotlivé farebné schémy. Na meno týchto elementov sa odvolávame pri použití farebnej schémy v hlavnom dokumente. V týchto elementoch sa nachádza element definujúci farbu, teda najčastejšie elementom a:srgbClr, ktorý sme si definovali v časti 2.5.9. Analogicky k farebným schémam sa definujú schémy s fontami v elemente fontScheme. Teraz si na príklade 2.14 ukážeme definovanie a použitie farebných schém. V prvom fragmente vidíme definovanie tém a farebnej schémy accent1 na RGB hodnotu 4F81BD. KAPITOLA 2. OFFICE OPEN XML 32 Príklad 2.14 Príklad použitia farebnej schémy vo WordprocessingML súbor "/word/theme/theme1.xml": ... ... ... ... súbor "/word/document.xml": ... Hello world! ... V druhom fragmente z hlavného dokumentu vidíme použitie tejto farebnej schémy ako farbu textu „Hello world!ÿ. Kapitola 3 Existujúce riešenia V tejto kapitole sa bližšie pozrieme na existujúce riešenia konverzie dokumentov vo formáte DOCX na dokumenty vo formáte XHTML. Ukážeme si súčasné možnosti takejto konverzie a tiež poukážeme na výhody a nevýhody jednotlivých riešení. 3.1 Export z Microsoft Office 2007 Prvá z možností konverzie DOCX dokumentu na XHTML dokument je priamo v aplikácii Microsoft Word 2007. Prvá nevýhoda tohto riešenia spočíva v tom, že balík Microsoft Office 2007 nie je práve najlacnejší softvér. Preto je nepravdepodobné, že by si ho niekto, kto túto aplikáciu nevlastní, kupoval len kvôli konverzii DOCX na XHTML. Ďalším problémom je veľmi neprehľadný zdrojový kód a nezachovávanie štruktúry. Výstupný dokument napríklad nezachoval zoznam, ale namiesto toho CSS štýlmi upravil klasické odstavce aby zoznam pripomínali. Taktiež po vizuálnej stránke Microsoft Office zaostáva, keď XHTML výstup sa inak zobrazuje v rôznych prehliadačoch, ako je možné vidieť na obrázku 3.1. Word umožňuje dve možnosti exportu. Prvá z nich by mala za cenu objemnosti a neprehľadnosti zdrojového kódu ponúkať takmer totožný vizuálny výstup ako originál dokumentu. Druhá možnosť (filtrovaná) sa snaží neplytvať miestom, čo sa odrazí na menšej vizuálnej zhode s originálom. Bohužiaľ aj prvá aj druhá verzia má zdrojový kód neprehľadný a zbytočne veľký a tiež pri oboch verziách sa vyskytuje problém so zobrazením niektorých častí dokumentu. Konkrétne problémy si čitateľ môže pozrieť na priloženom CD médiu. V prehliadači Microsoft Internet Explorer je výstup nefiltrovanej verzie na dobrej úrovni, v ostatných prehliadačoch je v podstate nepoužiteľný. 33 KAPITOLA 3. EXISTUJÚCE RIEŠENIA 34 Obr. 3.1: XHTML dokument skonvertovaný programom Microsoft Word 2007 zobrazený v prehliadači Firefox 3.2 Export z Open Office 3.0 Ďalšia možnosť exportu, tentoraz už zadarmo, je prostredníctvom kancelárskeho balíka Open Office. Program umožňuje exportovať aj do HTML aj do XHTML. Ako prvé čo si používateľ všimne je fakt, že už len samotný DOCX dokument Open Office nezobrazí správne. Preto sa netreba čudovať, keď aj XHTML, resp. HTML export nie je vizuálne veľmi podobný na svoju DOCX predlohu. Zdrojový kód XHTML dokumentu je veľmi neprehľadný a mal obrázky uložené priamo v sebe1 , čo je niekedy veľmi nepraktické a hlavne neštandardné. Výsledný dokument tiež neprešiel testom validity. Oproti HTML exportu sa na svoj DOCX originál podobá oveľa menej. Prehľadnosť zdrojového kódu HTML dokumentu je na relatívne slušnej úrovni. Z vizuálnej stránky je tento export lepší ako spomenutý XHTML dokument, stále má ale problémy napríklad s tabuľkami, s farbou pozadia a iné. Všetky obrázky konvertuje do GIF formátu, čo je tiež niekedy výrazným problémom. GIF formát nepodporuje viac ako 256 farieb a tiež je veľmi neefektívny pri ukladaní fotografií. 1 Obrázky kódované v base64 a sú vkladané do src atribútu elementu img. KAPITOLA 3. EXISTUJÚCE RIEŠENIA 35 Na obrázku 3.2 je porovnanie číselného zoznamu v XHTML dokumente, ktorý je výstupom konverzie DOCX dokumentu programom Open Office 3.0, a originálneho číselného zoznamu DOCX dokumentu. Na ďalšom obrázku je porovnanie tej istej tabuľky v HTML dokumente a v pôvodnom DOCX dokumente. Obr. 3.2: Vľavo: XHTML dokument, vpravo: pôvodný DOCX dokument. Obr. 3.3: Hore: HTML dokument, dole: pôvodný DOCX dokument. KAPITOLA 3. EXISTUJÚCE RIEŠENIA 3.3 36 Plugin pre prehliadač Mozilla Firefox Ďalšou možnosťou je nainštalovať si do prehliadača Mozilla Firefox plugin na zobrazovanie DOCX dokumentov. Tento plugin funguje tak, že zdrojový DOCX dokument skonvertuje na XHTML a potom otvorí. Bohužiaľ, toto riešenie je opäť nedostačujúce. Zdrojový kód tohto výstupu je veľmi neprehľadný a tiež nezachováva štruktúru dokumentu. Podobne ako Microsoft Office 2007 aj tento konvertor pretransformoval zoznam na odstavce, ktoré sú CSS štýlmi upravené aby vyzerali ako zoznam. CSS štýly priamo v zdrojovom kóde XHTML dokumentu sú tiež neprehľadné a hlavne zbytočne objemné. Čo sa týka podobnosti XHTML dokumentu na pôvodný DOCX dokument je na tom toto riešenie relatívne dobre. Trocha je problém s obrázkami ukotvenými priamo v texte (ktoré XHTML dokument dal do riadku) a tiež s odrážkami zoznamu, ktoré vôbec neboli zobrazené. 3.4 Online konverzia Možnost konverzie online službou na internete ponúka viac webovských stránok. Väčšinou však ide o platené služby. Prevádzkovatelia týchto služieb využívajú fakt, že keď potrebujeme otvoriť dokument vo formáte DOCX a nevlastníme Microsoft Office 2007, tak je lacnejšie využiť ich službu, ako si tento produkt kupovať. Implicitne ani staršia verzia Microsoft Office 2003 nepodporuje formát DOCX. Prevádzkovatelia využívajú to, že väčšina používateľov nie je vždy technicky zdatná a teda nemá prístup k informáciam o bezplatných riešeniach. Navyše, konverziu DOCX na XHTML berú skôr ako doplnkovú službu2 a teda nie je predpoklad, že by XHTML výstup bol na vysokej úrovni. Medzi týmito online službami je však jedna výnimka. Je ňou konvertor DOCX Convert Office 2007 (http://www.docx-converter.com/), ktorý je zadarmo. Je to však len online implementácia konvertora používaného v Open Office. Jediným rozdielom je verzia. Kým v časti 3.2 sme písali o verzii 3.0 na platforme Windows, táto online implementácia je vo verzii 2.3 na platforme Linux. Problémy sú tam teda podobné. Avšak až na problém s obrázkom, ktorý je nesprávne umiestnený, je staršia verzia oproti novšej lepšia v zachovaní dizajnu pôvodného DOCX dokumentu. 2 Najrozšírenejšia je konverzia do staršieho DOC formátu. KAPITOLA 3. EXISTUJÚCE RIEŠENIA 3.5 37 GMail náhľad dokumentov Posledná možnosť je dosť nepraktická. Služba GMail v doručenej pošte ponúka v prípade prílohy vo formáte DOCX možnosť zobraziť HTML náhľad. Teda keď chceme spraviť konverziu z DOCX dokumentu na HTML, tak najprv musíme mať GMail účet, potom musíme poslať na tento účet email a ako prílohu pridať DOCX dokument a potom si ho v doručenej pošte zobraziť. Výsledný HTML dokument má síce relatívne jednoduchý zdrojový kód, avšak nepoužíva štýly a všetky formátovania robí HTML tagmi a elementami a tiež podporuje len základné možnosti formátovania. Vôbec nepodporuje obrázky. Podobnosť s pôvodným DOCX dokumentom je teda len približná. Okrem toho, tento náhľad obsahuje vložený automatický odstavec s informáciou o tom, že dokument je len náhľad bez obrázkov. Keď chceme teda tento výstup použiť, je nutné tento odstavec ručne zmazať. 3.6 Zhrnutie V tejto časti zhrnieme jednotlivé možnosti konverzie do tabuľky 3.1. Budeme pri tom sledovať tieto vlastnosti exportovaných HTML resp. XHTML dokumentov zo vzorového DOCX dokumentu3 : 1. Formát dokumentu - HTML/XHTML. 2. Či je dokument valídny - Hodnoty áno/nie a v zátvorke počet chýb4 . 3. Úroveň zachovania formátovania - teda či je výsledný dokument podobný na svoj DOCX originál. Hodnotíme číselnou hodnotou od 1 do 5, kde 1 je najlepšia úroveň a 5 je najhoršia úroveň. Do úvahy sa berie zobrazenie v prehliadači Firefox 3.0, Opera 9.6 a Internet Explorer 7. 4. Úroveň zachovania štruktúry - teda či zoznamy sú v HTML resp. XHTML tagoch pre zoznamy, nadpisy v tagoch pre nadpisy a podobne. Hodnotíme číselnou hodnotou od 1 do 5, kde 1 je najlepšia úroveň a 5 je najhoršia úroveň. 5. Prehľadnosť zdrojového kódu. Hodnotíme číselnou hodnotou od 1 do 5, kde 1 je najlepšia úroveň a 5 je najhoršia úroveň. 6. Veľkosť HTML/XHTML dokumentu spolu s CSS štýlmi udaná v kB. 7. Celková veľkosť exportu udaná v kB. 3 Referenčný dokument DOCX podobne ako aj všetky HTML resp. XHTML exporty sa nachádzajú v prílohe na CD médiu. 4 Dokumenty boli testované oficiálnym validátorom na stránke konzorcia W3C. KAPITOLA 3. EXISTUJÚCE RIEŠENIA 38 5 veľkosť bez obrázkov celková veľkosť (372) (5) (9) (26) (8) (18) (9) prehľadnosť nie nie nie nie nie nie nie štruktúra XHTML HTML HTML XHTML XHTML HTML HTML formátovanie validita riešenie MS Word MS Word (filtrovaný) Open Office (HTML) Open Office (XHTML) Firefox plugin DOCX Convert Office 2007 GMail formát Tabuľka 3.1: Zhrnutie kvality XHTML resp. HTML exportov 3 1 3 4 4 2 4 3 3 1 1 5 2 1 5 3 2 5 4 2 1 74.4 21.8 12.9 52.65 29.1 16.8 9.49 507 418 74.2 52.6 87.7 414 9.57 V tejto veľkosti je zarátaná aj veľkosť obrázkov, kedže sú priamo v XHTML dokumente. Kapitola 4 Aplikácia Office Open XML convert Teraz nasleduje popis realizovania praktickej časti tejto práce - tvorby programu na konverziu DOCX dokumentov na XHTML dokumenty, ktorý dostal názov Office Open XML convert, resp. skrátene OOXML convert. Aplikáciu budeme tvoriť v troch etapách. Prvá bude špecifikácia, teda zhrnieme si všetky vlastnosti, ktoré od aplikácie očakávame. V ďalšej časti na základe požadovaných vlastností vytvoríme návrh aplikácie a vyberieme si prostriedky, pomocou ktorých aplikáciu vytvoríme. Nakoniec si popíšeme samotnú implementáciu. 4.1 Špecifikácia aplikácie Očakávané vlastnosti programu sme už čiastočne definovali v časti 1.3. Teraz ich postupne rozpíšeme a pridáme ďalšie. Najdôležitejšia vlastnosť programu je schopnosť zachovávať štruktúru1 bežných dokumentov. Viackrát sa v predošlom texte vyskytol pojem bežného či štandardného dokumentu. Teraz si ukážeme, ktoré súčasti dokumentu považujeme za bežné. V prvom rade to budú nadpisy a odstavce. Tieto definujú základnú štruktúru a sú teda nevyhnutné. Pri nadpisoch požadujeme možnosť zvoliť si k jednotlivým štýlom nadpisov v DOCX dokumente úroveň nadpisov v XHTML dokumente. Ďalej sú to zoznamy, kde chceme aby sa zachoval aj typ zoznamu, teda či je číselný alebo nečíselný. Samozrejmosťou by malo byť 1 Pod štruktúrou myslíme rozdelenie na nadpisy, odstavce, zoznamy a podobne. 39 KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 40 zvládnutie zachovania vnorených zoznamov. Poznámky pod čiarou a na konci dokumentu tiež budeme považovať za súčasť bežných dokumentov. Ďalej chceme zachovávať tabuľky a základnú štruktúru tabuľky. Tým myslíme hlavne spájanie buniek. Chceme tiež zachovať obrázky a ich pozíciu v texte a nakoniec aj hyperlinky na externé zdroje. Hyperlinkom nemusí byť len text, ale tiež obrázok. Ďalšia vlastnosť programu je zachovanie formátovania. Teraz si špecifikujeme, aké formátovanie chceme vo výslednom XHTML dokumente zachovávať. Pri texte všeobecne chceme zachovávať hlavne to, či je text hrubým fontom, kurzívou alebo je podčiarknutý či prečiarknutý, ďalej samotný font, farbu a veľkosť písma, farbu pozadia a nakoniec horné a dolné indexy. Pri odstavcoch chceme zachovať výšku riadku, odsadenie odstavca zo všetkých strán, rámčeky okolo odstavcov a tiež štýl zarovnania textu. Nakoniec chceme prenášať obrázky a základné vlastnosti obrázka ako sú rozmery, orámovanie a štýl orámovania. Chceme aby sa dala nastaviť úroveň prenášania formátovania. Mali by existovať tri rôzne úrovne, kde v prvej sa nebude prenášať žiadne formátovanie, v druhej iba základné, ako sú napríklad farba fontu, hrúbka fontu, podčiarknutie a prečiarknutie, horný a dolný index. Nakoniec v poslednej úrovni chceme prenášať všetky vyššie spomenuté formátovania. Ďalšia podstatná vlastnosť je, aby bol XHTML výstup valídnym XHTML dokumentom a aby mal Strict DTD. Dôvod prečo má výstupný dokument Strict DTD je hlavne prísnejšie rozdelenie dizajnu a formátovania dokumentu od samotného obsahu a štruktúry dokumentu. Týmto si zabezpečíme maximálnu možnú prehľadnosť. V prípade, že má čitateľ záujem o bližšie dôvody výberu formátu, je dobré prečítať si [Dow00], [Joh05] a [Web03]. Ďalšia vlastnosť je primeraná rýchlosť konverzie. Teda je potrebné všetky výpočtové kroky zoptimalizovať. Tiež chceme, aby bola aplikácia použiteľná aj inými aplikáciami a teda aby bola konzolová. Pomocou spúšťacích parametrov nastavíme požadované parametre konverzie. Kvôli jednoduchosti použitia treba tiež spraviť nejaké používateľské rozhranie, kde sa budú môcť vizuálne nastaviť jednotlivé parametre konverzie a po tomto kroku aplikácia spustí s požadovanými parametrami vyššie spomenutú konzolovú aplikáciu. Ďalšia vlastnosť by mala byť možnosť lokálne v dokumente zmeniť nastavenia KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 41 vstupných parametrov. Napríklad chceme, aby sa dalo nastaviť, že sa polke dokumentu bude prenášať iba základné formátovanie, ale v druhej polke rozšírené. Malo by sa to dať robiť komentármi v dokumente, ktoré budú mať presne definovanú štruktúru. Nakoniec požadujeme možnosť prepojiť XHTML výstup na existujúce CSS štýly. Malo by sa dať kontrolovať, či sa CSS štýly vytvoria nanovo, alebo sa jednotlivé štýly pridajú do existujúceho dopredu určeného CSS súboru. Posledná možnosť by mala byť menovité prepojenie štýlov na existujúce štýly v dopredu určenom CSS súbore. Teda napríklad, keď máme stránku s existujúcimi štýlmi a do nej chceme pridať nejaký DOCX dokument, tak len určíme, ktorá trieda má na starosti hrubý font, alebo kurzívu a podobne. XHTML výstup bude v tomto prípade prepojený na tieto existujúce štýly. 4.2 Návrh aplikácie V druhej časti tvorby softvéru sa budeme venovať návrhu aplikácie. Začneme výberom programovacieho jazyka, potom sa budeme zaoberať voľbou pomocných knižníc a nakoniec si zanalyzujeme metódy riešenia problému. 4.2.1 Programovací jazyk V prvom rade si bolo treba vybrať programovací jazyk. Prvá alternatíva bola použiť .NET a napríklad jazyk C# a druhá zase Java. Výhoda prvej alternatívy je hlavne predpoklad, že na prácu s Office Open XML bude obsahovať kvalitnejšie knižnice, keďže aj .NET aj Office Open XML pochádza od tej istej spoločnosti. Nakoniec ale prevážil fakt, že Java je multiplatformová, a teda neviazanosť na konkrétny operačný systém umožní väčšie rozšírenie aplikácie. 4.2.2 Pomocné knižnice Ďalším problémom je voľba pomocných knižníc. K dispozícii máme hneď niekoľko možností. Vo všeobecnosti môžme tieto možnosti rozdeliť na knižnice na prácu s Office Open XML a knižnice na prácu s XML. Do prvej kategórie spadajú knižnice OpenXML4J a docx4j. Obe knižnice vytvárajú objektovú reprezentáciu Office Open XML dokumentu. Toto by nám uľahčilo prácu, keďže by sme nemuseli potrebné súčasti dokumentu parsovať. Problémom však je fakt, že uvedené KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 42 knižnice sú až príliš zložité a na naše účely by ich použitie bolo zbytočné. Projekty tohoto typu majú až príliš veľký záber (aj keď v skutočnosti potrebujeme využiť len časť z nich) a potom klesá ich výkon. Jeden z dôvodov prečo je priamy prístup k XML lepší je aj to, že potom je možné na tomto programe demonštrovať štruktúru Office Open XML opísanú v kapitole 2. V druhej kategórii sú knižnice na prácu s XML. Použitie takejto knižnice nie je nevyhnutné, keďže aj samotná Java ponúka hneď niekoľko štandardných knižníc na parsovanie XML dokumentov, ale práca so špecializovanou knižnicou je jednoduchšia. Hlavným kritériom výberu bola rýchlosť a jednoduchosť použitia. Voľba nakoniec padla na knižnicu JDOM2 . Táto knižnica ponúka možnosť čítať a zapisovať XML dokumenty a to rýchlo a narába úsporne s pamäťou. 4.2.3 Metódy riešenia problému Ďalším krokom bolo zvolenie si metódy riešenia problému. Prvá alternatíva bola použiť XSLT techniku a druhá programovo preparsovať obsah Office Open XML. Aj keď je XSLT určené práve na takéto transformácie, niektoré veci by sa v ňom robili oveľa zložitejšie3 ako v nejakom vyššom programovacom jazyku. Naším cieľom je spraviť hlavne kvalitný export, čo by sa pomocou XSLT veľmi ťažko dosahovalo. Preto bude aplikácia naprogramovaná tak, že sa preparsujú potrebné XML dokumenty obsiahnuté v DOCX dokumente a spraví sa XHTML výstup. 4.3 Implementácia aplikácie Aplikácia bude mať dve časti. Prvá bude grafické rozhranie, kde si používateľ na štandardných komponentoch nastaví požadované vlastnosti konverzie. Druhá časť bude konzolová aplikácia zabezpečujúca samotnú konverziu. Popis implementácie si rozdelíme tiež na dve časti. V prvej si popíšeme grafické rozhranie, ktoré bude slúžiť aj ako používateľská príručka a v druhej časti si popíšeme postup implementácie konzolovej aplikácie. 2 Ak má čitateľ záujem o zaujímavý článok s porovnaním existujúcich knižníc na prácu s XML pre Javu, je dobré si prečítať [xml07] 3 Napríklad optimalizovanie použitia span elementov o ktorom si povieme v časti 4.3.2.5. KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 4.3.1 43 Grafické používateľské rozhranie Vychádzajúc zo špecifikácie je implementácia grafického používateľského rozhrania už jednoduchá. Jednotlivé nastavenia sme rozdelili na 3 karty, aby sa v množstve nastavení ľahšie orientovalo. Obr. 4.1: Screenshot grafického používateľského rozhrania - karta Zdroj a cieľ Na obrázku 4.1 vidíme prvú kartu rozhrania. Vyberajú sa na nej najdôležitejšie a povinné položky - cesta k DOCX dokumentu, ktorý chceme skonvertovať a cesta k XHTML dokumentu, kam sa má uložiť výstup. Cesta k obrázkom a k CSS súboru sa určuje relatívne k umiestneniu XHTML dokumentu a zabezpečuje prehľadnosť výstupu. Na obrázku 4.2 sa nachádza screenshot z druhej karty rozhrania, ktorá ponúka základné možnosti nastavenia. Najdôležitejšia položka je výberovník na nastavenie úrovne prenášania formátovania z originálneho DOCX dokumentu. Obsahuje tri hodnoty s nasledujúcim významom: • žiadne formátovanie - Určuje, že sa CSS štýly nebudú vôbec vytvárať. Exportuje sa iba čistá štruktúra dokumentu bez formátovania. • základné formátovanie - CSS štýly sa budú vytvárať, ale iba na základné formátovanie: hrubý font, kurzíva, podčiarknutie, prečiarknutie, horný a dolný index a farba písma. KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 44 Obr. 4.2: Screenshot grafického používateľského rozhrania - karta Základné nastavenia • rozšírené formátovanie - Budú sa prenášať všetky pre program známe formátovania. Rozsah je definovaný v časti 4.1 na mieste kde sa píše o zachovávaní formátovania. V časti obrázky môžeme určiť, či ich chceme prenášať do výsledného dokumentu a ak áno, tak môžeme určiť úroveň kompresie JPEG obrázkov4 . Keďže Microsoft Word ukladá originálne obrázky a zmeny na obrázkoch (zmena veľkosti a podobne. . .) sa uchovajú len ako informácie, tak sa po konverzii obrázky musia spracovávať a v prípade formátu JPEG sa budú nanovo komprimovať. Platí, že čím vyššia kvalita, tým zaberá obrázok viac miesta na disku a opačne. Posledná možnosť na tejto karte sú nastavenia nadpisov. Keďže v DOCX dokumentoch nie sú nadpisy explicitne určené, treba na zisťovanie nadpisov používať heuristiku. Viac sa o fungovaní tejto heuristiky je možné dočítať v časti 4.3.2. Heuristiku môžeme zapnúť alebo vypnúť príslušným zaškrtávacím políčkom na tejto karte. Hneď pod touto voľbou sa nachádza textové pole „Default HTML tag pre nadpisÿ, ktoré určuje, aký XHTML element bude reprezentovať heuristikou rozpoznané nadpisy. Najbežnejší spôsob ako sa označujú nadpisy v DOCX dokumente sú štýly. Ak názvy týchto štýlov poznáme a chceme ich priradiť jednotlivým tagom na nadpisy v XHTML, tak je to možné spraviť v textových 4 Tento parameter sa použije len v prípade, že dokument obsahuje JPEG obrázok. Pre iné formáty sa kompresia nenastavuje. KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 45 poliach umiestnených na tejto karte. Obr. 4.3: Screenshot grafického používateľského rozhrania - karta Rozšírené nastavenia Na poslednej karte, ktorú vidíme na obrázku 4.3 môžeme nastaviť to, či chceme prenášať poznámky pod čiarou (footnotes) a poznámky na konci dokumentu (endnotes). Keďže vo webovskom dokumente nie sú strany, poznámky pod čiarou aj na konci dokumentu nie sú vo výslednom XHTML dokumente rozlišované. Ďalej si na tejto karte pomocou výberovníka (combo box) môžeme nastaviť spôsob prepojenia štýlov na existujúci CSS súbor. Máme k dizpozícii tieto hodnoty: • žiadne prepojenie - Táto voľba určuje, že sa vytvorí nový CSS súbor a neprihliada sa na žiadne existujúce štýly. • štýly pridať do CSS - Týmto je určené, že do výstupného CSS súboru sa najprv skopíruje existujúci CSS súbor a potom sa pridajú všetky ostatné vlastné štýly. V tomto prípade treba daný CSS súbor špecifikovať v poli „Externé CSSÿ. • prepojiť na CSS - Táto voľba určí, že do výstupného CSS súboru sa skopíruje existujúci CSS súbor a nepridajú sa žiadne iné vlastné štýly. Textové polia „hrubý fontÿ, „kurzívaÿ, . . . atď. určujú názov štýlu pre dané formátovanie v existujúcom CSS súbore (ak neexistujú, stačí nechať prázdne pole). Keďže sa snažíme používateľom čo najviac uľahčiť prácu, pri výbere súborov (DOCX, KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 46 XHTML, CSS) sa zapamätáva cesta a pri budúcom výbere sa automaticky nastaví aktuálny adresár na ten použitý naposledy. Táto cesta sa zapamätáva do súboru s lokálnymi nastaveniami programu, ktorý sa automaticky vytvorí v domovskom adresári. Po vyplnení všetkých potrebných polí, sa tlačidlom „Konvertujÿ na základe vyplnených nastavení pripravia parametre, s ktorými sa spustí konzolová aplikácia. Jej štandardný aj chybový výstup sa zobrazí v novom okne. V prípade, že si neželáme spustiť konverziu, ale chceme zistiť, aké sú parametre na spustenie konzolovej aplikácie s aktuálnymi nastaveniami, tak musíme kliknúť na talčidlo „Zobraz parametreÿ. 4.3.2 Konzolová aplikácia Teraz nasleduje popis programu na konverziu DOCX dokumentu na XHTML dokument. Začneme najprv veľmi stručným popisom pomocnej knižnice JDOM na prácu s XML dokumentami. Potom prejdeme ku samotnej konverzii a ukážeme si ako prebieha. 4.3.2.1 Knižnica JDOM JDOM je open source knižnica optimalizovaná pre Javu určená na manipuláciu s XML dokumentami. V našom projekte budeme pracovať s týmito balíkmi obsiahnutých v JDOM: • org.jdom - Balík obsahujúci triedy na reprezentáciu XML dokumentov. Je to napríklad trieda Document, Element, Namespace, Attribute. . . Už samotný názov napovedá účelu. • org.jdom.input - Balík obsahujúci triedy, ktoré vytvárajú XML dokument. Najdôležitejšia trieda, ktorá je použitá aj v aplikácii je trieda SAXBuilder. Načúvaním prichádzajúcim SAX udalostiam vytvára zodpovedajúci dokument5 . • org.jdom.output - Balík obsahujúci triedy na publikovanie dokumentu. Trieda XMLOutputter transformuje vnútornú reprezentáciu dokumentu na nejaký výstup. My ju budeme používať na XHTML výstup a keďže ako jediná bola pre potreby aplikácie upravená, ešte o nej budeme písať. Na manipuláciu s XML dokumentom budeme používať jednoduché mechanizmy. Ukážeme si ich na príklade 4.1. V prvej časti vidíme vytvorenie jednoduchého dokumentu s koreňovým elementom root, ktorý má jedného potomka child. V druhej časti postupne 5 Viac informácií o SAX metóde prechádzania XML dokumentom je možné získať prečítaním [sax09]. KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 47 Príklad 4.1 Parsovanie dokumentu // vytvaranie dokumentu Document doc = new Document(); Element e = new Element("root"); e.addContent(new Element("child")); doc.addContent(e); // citanie dokumentu Element root = doc.getRootElement(); Element child = root.getChild("child"); // ... List listElements = child.getChildren(); prečítame tieto elementy. Predpokladáme, že na mieste označenom tromi bodkami pridáme do elementu child niekoľko potomkov. Potom v poslednom riadku všetkých týchto potomkov prečítame do List štruktúry. List môžeme prechádzať klasickým iterátorom. Ak má čitateľ záujem o bližšie informácie o JDOM knižnici, vhodné doplnkové čítanie je [Hun02] a [Hun07]. 4.3.2.2 Priebeh konverzie DOCX na XHTML Keďže je program na to aby sme si ho podrobne opísali až príliš rozsiahly, ukážeme si len základnú myšlienku algoritmu a podrobnejšie si prejdeme len dôležitejšie a programátorsky zaujímavejšie miesta. Konverzia začína tým, že sa vytvorí inštancia hlavnej triedy OOXMLconvert. Tá potom zabezpečí vykonanie týchto krokov: 1. vytvorí inštanciu triedy OOXMLparams, ktorá spracuje vstupné parametre - stručný popis jednotlivých vstupných parametrov vidíme v tabuľke 4.1 2. rozbalí obsah DOCX dokumentu do dočasného adresára 3. vytvorí inštanciu triedy OOXMLpreserve, ktorá obsahuje informácie o tom, aké formátovanie sa na základe zvolenej úrovne prenáša do výsledného XHTML dokumentu 4. vytvorí inštanciu triedy OOXMLrels, ktorá prečíta vzťahy v dokumente 5. vytvorí inštanciu triedy OOXMLtheme, ktorá prečíta definíciu tém v dokumente 6. vytvorí inštanciu triedy OOXMLstyles, ktorá prečíta definíciu štýlov v dokumente 7. vytvorí inštanciu triedy OOXMLnumberings, ktorá prečíta definíciu zoznamov v dokumente 8. vytvorí inštanciu triedy OOXMLnotes, ktorá prečíta definíciu poznámok pod čiarou a na konci dokumentu KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 48 Tabuľka 4.1: Zoznam vstupných parametrov konzolovej aplikácie param -i -o -co -io -fl -pi -jq -hh popis vstupný DOCX subor na skonvertovanie výstupný XHTML súbor relatívna cesta od XHTML súboru k adresáru, kde sa uložia CSS relatívna cesta od XHTML súboru k adresáru, kde sa uložia obrázky úroveň zachovania formátovania -ct určuje, či sa majú prenášať obrázky kvalita jpeg kompresie použitej na obrázkoch určuje, či sa majú heuristikou rozoznávať nadpisy názov štýlu nadpisu úrovne 1 názov štýlu nadpisu úrovne 2 názov štýlu nadpisu úrovne 3 HTML tag pre nadpis rozpoznaný heuristikou určuje, či sa prenášajú poznámky pod čiarou určuje, či sa prenášajú poznámky na konci dokumentu typ prepojenia na CSS súbor -ci -cssb -cssi -cssu -csss -cssui -cssli vstupný CSS súbor určuje CSS štýl pre určuje CSS štýl pre určuje CSS štýl pre určuje CSS štýl pre určuje CSS štýl pre určuje CSS štýl pre -hs1 -hs2 -hs3 -ht -pf -pe hrubý font kurzívu podčiarknutie prečiarknutie horný index dolný index hodnota súbor súbor súbor súbor 0 - žiadne formátovanie 1 - základné formátovanie 2 - rozšírené formátovanie (y/n) (od 1 do 100) (y/n) názov názov názov názov štýlu štýlu štýlu tagu (y/n) (y/n) 0 - žiadne prepojenie 1 - štýly sa pridajú do existujúceho CSS 2 - prepojiť na CSS a nevytvoriť nové súbor názov štýlu názov štýlu názov štýlu názov štýlu názov štýlu názov štýlu 9. vytvorí inštanciu triedy OOXMLcomments, ktorá prečíta definíciu komentárov v dokumente 10. preparsuje hlavný XML dokument pomocou triedy OOXMLparser 11. vzápätí získaný XHTML výstup zapíše do súboru pomocou triedy XHTMLoutput 12. vytvorené CSS štýly pomocou triedy CSSoutput zapíše do súboru Základ celej aplikácie tvorí trieda OOXMLparser, preto si o tejto triede bližšie povieme v samostatnej časti. KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 4.3.2.3 49 Trieda OOXMLparser Hlavná metóda triedy OOXMLparser je parse, ktorá prejde daným dokumentom a vráti XHTML dokument. Pri navrhovaní tejto metódy existovali dve verzie. Prvá verzia, pracovne nazvaná rekurzívna, pre každý potomok aktuálneho elementu zavolala rekurzívne metódu parse a všetky elementy sa teda spracovávali v jednej centrálnej metóde. Výhoda tohoto prístupu boli menej prísne požiadavky na štruktúru dokumentu, keďže si spomínaná metóda vedela dať rady aj so zle umiestneným elementom. Nevýhoda bola neprehľadnosť a tým aj vyššia náchylnosť na chyby. Druhá verzia, pracovne nazvaná lineárna, pre každý typ elementu zavolá metódu, ktorá daný element spracuje. Na názov tejto metódy existuje konvencia a síce, že má tvar parseElementXXX, kde XXX je názov daného elementu. Kvôli väčšej prehľadnosti sú elementy obrázka a tabuľky spracovávané v samostatných triedach ElementPicture a ElementTable. Pri tomto prístupe je dopredu dané aké elementy v danom elemente očakávame a to sa nakoniec ukázalo aj ako chcené. Preto je do aplikácie zapracovaná táto druhá verzia. Príklad 4.2 Použitie rPr premennej triedy OOXMLparser fragment z metódy parseElementRPr: ... if (rPrChild.getName().trim().equals("i")) { rPr.put("i", rPrChild.getAttributeValue("val", Global.wns, "on")); } ... fragmenty z metódy parseElementR: ... String stylesClasses = ""; if (Global.ooxmlPreserve.italic && rPr.containsKey("i") && rPr.get("i").equals("on")) { stylesClasses += " " + Global.ooxmlParams.cssI; Global.cssOutput.addClass("." + Global.ooxmlParams.cssI,"font-style: italic;"); } ... runEl.setAttribute("class", stylesClasses); paragraphEl.addContent((Element)runEl.clone()); ... V tejto triede sú veľmi dôležité premenné rPr a pPr. Obe triedy sú dátového typu LinkedHashMap. Ide vlastne o mapovanie vlastností behu, resp. odstavca. Ako sa tieto premenné používajú si ukážeme na príklade 4.2. V prvom fragmente vidíme zisťovanie, aký element obsahuje rPr element. Ak ide o i element (kurzíva), tak do rPr pridáme o tom záznam. Metóda getAttributeValue vráti hodnotu atribútu val. Global.wns je definovaný menný priestor, v ktorom je daný atribút. Menné priestory sú definované v triede Global (nachádzajú sa v nej všetky premenné, konštatny a inštancie tried potrebné KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 50 pre celý systém). V druhom fragmente vidíme výsek z metódy parseElementR. Výsek je z časti, keď sme už zanalyzovali obsah tohoto elementu a teraz mu nastavujeme štýly. V zobrazenej podmienke najprv zistíme, či formátovanie kurzívou prenášame do výsledného dokumentu, potom či dané formátovanie aktuálny beh obsahuje a keď toto spĺňa tak do reťazca stylesClasses pridáme názov triedy v CSS pre kurzívu a do výsledných CSS štýlov pridáme štýl na písmo kurzívou. Nakoniec aktuálnej XHTML reprezentácii behu (runEl ) nastavíme atribút class na triedy pridané do stylesClasses. Potom pridáme klon runEl do XHTML reprezentácie aktuálneho odstavca. Teraz si ukážeme ako vlastne funguje spomínaná heuristika pri určovaní nadpisov v dokumente. Nadpisom bude odstavec, v ktorom je jediný beh s textom napísaným hrubým fontom a veľkosť fontu je väčšia ako vo zvyšku dokumentu. Obsah tohoto odstavca sa pridá do XHTML elementu pre nadpis6 . Ďalšia oblasť, ktorá si zaslúži pozoronosť je riešenie problému zo špecifikácie, kde sme chceli aby sa dali parametre konverzie dočasne meniť. Slúžiť na to majú komentáre s presne definovanou štruktúrou. Úsek, na ktorom chceme dočasne použiť iné parametre konverzie označíme komentárom, ktorý má na prvom riadku text „overrideParamsÿ. V každom ďalšom riadku komentára môžeme nastaviť parametre konverzie, ktoré sa dočasne zmenia, so syntaxou takou istou ako pri parametroch na vstupe. Každý jeden parameter treba dať na nový riadok. Výskyt takéhoto komentára v dokumente spôsobí, že sa v triede OOXMLparams vytvorí záloha aktuálnych parametrov a parametre nastavené v tomto komentári sa prepíšu. Keď komentár skončí, tak sa obnovia parametre zo zálohy. Príklad na obrázku Obr. 4.4: Komentár dočasne meniaci parametre konverzie dokumentu 4.4 ukazuje ako by vyzeral komentár, ktorým chceme dočasne zmeniť parameter určujúci úroveň zachovania formátovania na hodnotu „2ÿ (rozšírené formátovanie) a paramter určujúci či chceme prenášať obrázky do výsledného dokumentu na hodnotu „nÿ (neprenášať obrázky). 6 Úroveň tohoto nadpisu sme nastavili vstupnými parametrami. KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 4.3.2.4 51 Trieda ElementTable Ďalšia trieda, ktorú je dôležité spomenúť je trieda ElementTable. Konštruktor tejto triedy dostane ako parameter XML element obsahujúci tabuľku v dokumente. Verejnou metódou getXHTMLTable trieda preparsuje tabuľku a vráti XHTML výstup. Pri vytváraní tabuľky však narážame na niekoľko problémov. Prvý z nich je fakt, že bunka tabuľky môže obsahovať akékoľvek elementy a teda napríklad aj ďalšiu tabuľku. Riešenie tohoto problému je relatívne jednoduché, keďže stačí upraviť metódu parse v triede OOXMLparser, aby zvládala preparsovať nielen celý dokument, ale aj vnorený element. Keď budeme parsovať obsah bunky, tak vytvoríme novú inštanciu triedy OOXMLparser a spustíme metódu parse, kde ako parameter pošleme element obsahujúci telo bunky. Ďalším problémom je fakt, že spôsob spájania buniek funguje vo WordprocessingML inak ako v XHTML. Existujú na to dva spôsoby. V XHTML dokumente sa bunky spájajú atribútmi colspan a rowspan, ktoré fungujú na tom istom princípe ako spájanie buniek v DOCX dokumente pomocou elementov rowSpan a gridSpan7 . Avšak pri parsovaní buniek spojených elementom vMerge resp. hMerge, ak neoznačujú začínajúci spojený úsek, tak potom tieto bunky do XHTML dokumentu neprenášame, len inkrementujeme colspan resp. rowspan atribút. Práve na túto inkrementáciu si pri parsovaní musíme pamätať aktuálny stĺpec a riadok. Navyše si musíme pamätať pre každý stĺpec, či v ňom náhodou nie je začatý spojený úsek. Pre riadky si to pamätať nemusíme, keďže parsovanie prebieha po riadkoch a teda nám stačí iba informácia o tom, či v aktuálnom riadku nie je začatý spojený úsek. Obr. 4.5: Tabuľka so spojenými bunkami Uvažujme príklad na obrázku 4.5. Keď na spojenie buniek v prvom stĺpci použijeme 7 Bližšie informácie o spájaní buniek je možné nájsť v časti 2.5.4. KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 52 rowSpan a na spojenie buniek v poslednom stĺpci použijeme vMerge, tak vnútorná reprezentácia elementami tc je zobrazená červenými bunkami. V tomto prípade by nám nefungovalo jednoduché inkrementačné8 počítadlo pre aktuálny stĺpec. Keď sa parsovaním budeme nachádzať v bunke v poslednom stĺpci, v druhom riadku, tak toto počítadlo by malo hodnotu 3, pritom by malo mať hodnotu 4. My však musíme zistiť v akom stĺpci sme, aby sme mohli inkrementovať atribút rowspan bunky v poslednom stĺpci v prvom riadku na XHTML výstupe. Preto si naimplementujeme počítadlo, ktoré bude vedieť správne narábať s číslom stĺpcov. Využijeme pri tom pomocné pole definované takto: boolean mergedCells[][]. Pre každú bunku v riadku r a v stĺpci s nastavíme hodnotu mergedCells[s][r] na true ak je táto bunka v spojenej oblasti buniek metódou rowSpan alebo gridSpan, ale nie je prvá a na false inak. Hodnoty mergedCells[][] nastavíme najprv všetky na false a pri spracovaní rowSpan alebo gridSpan patričné bunky nastavíme na true. V príklade 4.3 vidíme telo funkcie ktorá vracia poradie stĺpca Príklad 4.3 Metóda getNextCol() private int getNextCol() { ... col++; while ((col= cCols) { // sme v novom riadku col = 0; row++; if (row >= cRows) { throw new Exception("V tabuľke sa nenachádza ďalší sĺpec!"); } } return col; ... } ďalšej bunky v poradí. col a row označujú aktuálne spracovávanú bunku, cCols a cRows označujú počet stĺpcov, resp. počet riadkov v tabuľke. 4.3.2.5 Trieda XHTMLoutput Trieda XHTMLoutput má na starosti prípravu XHTML výstupu. Trieda pracuje s už predpripraveným body elementom, ktorý je vlastne výstupom preparsovania dokumentu. Tento element sa ešte rôznymi spôsobmi upravuje. V prvom rade sa spoja elementy span, 8 Počítadlo, ktoré by sa pre každú novú bunku v stĺpci zväčšilo o jedna. KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 53 ktoré sú v dokumente hneď vedľa seba a majú rovnaké CSS štýly. Ďalšou úpravou, ktorou dosiahneme zníženie veľkosti výstupu je vloženie obsahu span elementu do rodičovského elementu, ak je to možné. Napríklad môžme vložiť obsah span elementu do rodičovského elementu p, ak p neobsahuje žiadny iný element. Ďalšia dôležitá funkcia triedy XHTMLoutput je transformácia objektovej reprezentácie dokumentu na textovú, ktorú môžme zapísať do súboru. Na to slúži trieda XMLOutputter z knižnice JDOM. Táto trieda obsahuje niekoľko predpripravených možností formátovania výsledného textu (odsadenie elementov, nové riadky a podobne). Môžme si nastaviť, či chceme aby bol vo výslednom dokumente každý vnorený element odsadený a na novom riadku, alebo chceme aby bol celý dokument v jednom riadku. My by sme ale potrebovali niečo medzi tým. Keby sme mali celý dokument v jednom riadku, tak by v ňom boli dodatočné úpravy veľmi zložité. Keby sme však mali dokument pekne formátovaný, tak zase na niektorých miestach vo výslednom dokumente by boli nadbytočné medzery. Napríklad XHTML kód v príklade 4.4 by sa v prehliadači zobrazil namiesto súvislého textu „Popocatepetlÿ s rôznou farbou textu, nesúvislý text s medzerami medzi jednotlivými fragmentmi slov. Je to preto, lebo nový riadok berie prehliadač ako znak a interpretuje ho ako medzeru. Príklad 4.4 Príklad XHTML dokumentu ...

Popo cate petl

... Chceme preto upraviť výstup tak, aby elementy boli odsadené, ale nech sa obsah elementu p vypíše do riadku. Na tento účel musíme upraviť triedu XMLOutputter a pridať podmienku, že keď sa vnoríme do elementu p, tak prestaneme výstup formátovať. 4.3.3 Problémy pri konverzii V tejto časti si povieme o niektorých problémoch, na ktoré sme narazili počas konverzie dokumentu. Nie každá štruktúra v DOCX dokumente má ekvivalent v XHTML dokumente a preto konvertovaný súbor nebude nikdy úplne rovnaký ako jeho DOCX predloha. Prvým príkladom takejto nekompatibility sú odrážky. Napríklad v DOCX dokumente KAPITOLA 4. APLIKÁCIA OFFICE OPEN XML CONVERT 54 sa dá nastaviť začiatok číslovania na určitú hodnotu. Toto by sa dalo robiť aj v XHTML dokumente atribútom start v elemente ol. Bohužiaľ takúto možnosť nemáme so Strict DTD. Ďalším problémom je fakt, že v DOCX dokumente môže prvá odrážka začať v podstate v akejkoľvek úrovni, naproti tomu v XHTML dokumente, musí byť prvá odrážka v prvej úrovni. Nakoniec je problém aj v samotných odrážkach. WordprocessingML definuje odrážky ako text. Nastaví sa font a znak, ktorý sa použije ako odrážka. Vďaka fontom ako je napríklad Symbol, je na výber mnoho zaujímavých znakov ako fajky, šípky a mnoho iných. XHTML dokumenty, resp. CSS štýly takéto nastavenia odrážok nepodporujú. Ďalším problémom sú obrázky. V DOCX dokumentoch sa im dá nastaviť, že text okolo nich ich má obtekať a tiež, že sa majú posunúť o niekoľko pixelov napríklad smerom doprava. Text potom bude obrázok obtekať na novej súradnici. V XHTML a CSS to ale funguje tak, že keď obrázok posunieme relatívne k jeho pôvodnej polohe, tak sa síce posunie, ale text ho obteká na pôvodných súradniciach. Posledný problém, o ktorom si povieme, sú tabulátory. Tabulátor nemá v XHTML dokumente obdobu. Faktom však je, že mnoho dokumentov sa vytvára práve ich použitím. Tabulátory možnosťami pripomínajú tabuľku, preto v budúcnosti, keď sa tento problém bude riešiť v programe Office Open XML convert, tak to bude pravdepodobne cestou transformácie tabulátorového rozvrhnutia dokumentu na tabuľkové. Problémov, ktoré spôsobujú nekompatibilitu DOCX dokumentov a XHTML dokumentov je samozrejme viac, ale vyššie spomenuté problémy sú z nich najčastejšie. Ich riešenie je však už nad rámec tejto diplomovej práce. Kapitola 5 Výsledky V tejto kapitole sa budeme venovať výsledkom, ktoré aplikácia Office Open XML convert (ďalej ho budeme označovať skratkou OOXML convert) dosahuje. Tieto výsledky budeme porovnávať s výsledkami konvertorov spomínaných v kapitole 3. Kapitola bude rozdelená na niekoľko častí. V prvej časti si opíšeme okolnosti, za akých sme dokumenty konvertovali. To znamená hlavne ako sme dokumenty vyberali, aké nastavenia sme použili, aké kritéria budeme sledovať a podobne. V ďalšej časti si porovnáme výsledky konverzie jednotlivých riešení. 5.1 Príprava testovania konverzie Testovanie konverzie bude prebiehať na platforme Windows a výstupné XHTML resp. HTML dokumenty sa budú otvárať v prehliadačoch Mozilla Firefox 3, Opera 9 a Internet Explorer 7. Počas testovania výstupov konverzie jednotlivých dokumentov budeme sledovať tie isté vlastnosti ako v časti 3.6, teda hlavne verný prenos formátovania, zachovanie štruktúry, prehľadnosť kódu a s tým súvisiaca veľkosť výsledného dokumentu. Pripravili sme si niekoľko DOCX dokumentov, na ktorých budeme konvertory testovať. Výber sme sa snažili spraviť tak, aby bola zachovaná najväčšia možná objektívnosť testovania. Preto okrem jedného dokumentu, ktorý bol vytvorený za účelom demonštrácie sily programu OOXML convert, sú všetky dokumenty z rôznych nezávislých zdrojov na internete a podobne. 55 KAPITOLA 5. VÝSLEDKY 5.2 56 Testovanie konverzie V tejto časti si prejdeme jednotlivé DOCX dokumenty a ich skonvertované HTML resp. XHTML ekvivalenty. Najprv začneme vlastnosťami XHTML výstupu programu OOXML convert. Ak sme narazili na nejaké problémy, tak si ich detailnejšie zanalyzujeme. Pri ostatných riešeniach si len poukážeme na klady a zápory. Program OOXML convert, keď nie je povedané inak, budeme spúšťať s tromi rôznymi verziami vstupných parametrov. Prvá verzia je nastavená tak, aby bola zachovaná maximálna možná vizuálna zhoda s originálnym dokumentom. Vstupné parametre pre túto verziu sú: -i ”subor.docx” -o ”subor.html” -co ”styles/” -io ”pics/” -fl 2 -pi y -jq 80 -hh n -hs1 ”heading1” -hs2 ”heading2” -hs3 ”heading3” -pf y -pe y -ct 0. Druhá verzia vstupných parametrov zachováva vo výslednom dokumente len základné formátovanie. Vstupné parametre pre túto verziu sú: -i ”subor.docx” -o ”subor.html” -co ”styles/” -io ”pics/” -fl 1 -pi y -jq 80 -hh n -hs1 ”heading1” -hs2 ”heading2” -hs3 ”heading3” -pf y -pe y -ct 0. A nakoniec v poslednej verzii, kde nechceme prenášať žiadne formátovanie, spúšťame program s týmito parametrami: -i ”subor.docx” -o ”subor.html” -co ”styles/” -io ”pics/” -fl 0 -pi y -jq 80 -hh n -hs1 ”heading1” -hs2 ”heading2” -hs3 ”heading3” -pf n -pe n -ct 0. 5.2.1 Vzorový dokument k OOXML convert Prvým analyzovaným dokumentom bude ten, na ktorom bola demonštrovaná sila programu OOXML convert. Dokument obsahuje všetky bežné súčasti, ako sme si ich definovali v časti 4.1. Keďže sme sa už venovali tomu, ako si s týmto dokumentom poradili ostatné programy, opíšeme si len výstup programu OOXML convert a potom si všetky vlastnosti jednotlivých riešení zhrnieme do tabuľky. OOXML convert Keďže sa jedná o dokument, ktorý bol na mieru vytvorený práve pre tento program, nie je prekvapením, že kvalita výstupu je na vysokej úrovni. Najprv si však prejdime nastavenia programu. Program sme na vzorovom vstupe spustili celkovo trikrát, zakaždým s vyššie definovanými verziami parametrov. Prvá verzia je pochopiteľne vo všetkým oblastiach na vysokej úrovni. Čo sa týka prenosu formátovania, tak je to, až na nejaké detaily (pozri obrázok 5.1), prakticky úplná kópia pôvodného dokumentu. Zachováva tiež štruktúru všetkých elementov. Jediné, čo by KAPITOLA 5. VÝSLEDKY 57 sme tomuto výstupu mohli vytknúť sú trocha neprehľadné definície atribútov class, keďže každé formátovanie má samostatný štýl. Toto by mohla byť výzva do budúcna, aby sa nejakým spôsobom spájali štýly dohromady tam, kde to má zmysel (napríklad, keď sa v dokumente veľakrát vyskytuje tá istá kombinácia tried). Aj napriek tomu sa tento výstup zaradil medzi najlepšie. Ako jediný z konvertorov tento program vytvára plne valídne XHTML dokumenty so Strict DTD. Obr. 5.1: Vľavo: XHTML dokument, vpravo: pôvodný DOCX dokument. Druhá verzia má oproti prvej tú výhodu, že má zdrojový kód prehľadnejší, ale za cenu menšej presnosti prenosu formátovania. Preto je výsledný dokument vizuálne podobný na svoj originál len základnými črtamy ako je farba písma, podčiarknutie, hrubý font a podobne. Tretia verzia nepoužíva žiadne štýly, preto sa na svoj originál podobá len štruktúrou. Táto verzia je určená tým, ktorí potrebujú zachovať štruktúru dokumentu, ale nezáleží im na formátovaní. Výsledkom je veľmi prehľadný zdrojový kód, ktorý sa ľahko upravuje. Ostatné konvertory Pozri kapitolu 3. Zhrnutie Teraz si výsledky všetkých konvertorov môžme pozrieť v tabuľke 5.1. Ide o tú istú tabuľku, akú sme si ukázali v časti 3.6, len tentokrát je v nej aj program OOXML convert. Zeleným KAPITOLA 5. VÝSLEDKY 58 písmom sme označili najlepšie hodnoty v rámci stĺpca a červeným písmom najhoršie. validita formátovanie štruktúra prehľadnosť veľkosť bez obrázkov celková veľkosť riešenie OOXML convert 1 OOXML convert 2 OOXML convert 3 MS Word MS Word (filtrovaný) Open Office (HTML) Open Office (XHTML) Firefox plugin DOCX Convert Office 2007 GMail formát Tabuľka 5.1: Zhrnutie kvality XHTML resp. HTML exportov na prvom vstupnom dokumente XHTML XHTML XHTML XHTML HTML HTML XHTML XHTML HTML HTML áno (0) áno (0) áno (0) nie (372) nie (5) nie (9) nie (26) nie (8) nie (18) nie (9) 1 3 4 3 1 3 4 4 2 4 1 1 1 3 3 1 1 5 2 1 2 1 1 5 3 2 5 4 2 1 10.7 8.32 6.51 74.4 21.8 12.9 52.61 29.1 16.8 9.49 33.1 29.3 27.5 507 418 74.2 52.6 87.7 414 9.57 Vidíme teda, že najlepším konvertorom (v zachovaní formátovania) pre prvý vstup je OOXML convert s prvou verziou nastavenia parametrov. V prípade, že si ako kritérium dáme najkompaktnejšie riešenie, tak najlepším by bol opäť konvertor OOXML convert, tentokrát s treťou verziou nastavenia parametrov. Najhoršie obstáli v takmer všetkých sledovaných vlastnostiach konvertor, ktorý je súčasťou programu Microsoft Word 2007 a plugin do prehliadača Mozilla Firefox. 5.2.2 Chybný dokument Ďalší DOCX dokument bol pôvodne vybraný na demonštráciu nedostatkov programu OOXML convert a na zistenie ako sa s týmito problémami vysporiadajú ostatné konvertory. Dokument je príloha k dokumentácii o XSLT transformácii XML dokumentu na DOCX dokument. Obsahuje niekoľko chýb, čo sa nakoniec ukázalo ako výhoda. Môžme sa teda pozrieť na to, ako si poradia jednotlivé konvertory s chybným DOCX dokumentom. Chyba spočíva napríklad v tom, že nie všetky použité štýly v dokumente sú definované 1 V tejto veľkosti je zarátaná aj veľkosť obrázkov, kedže sú priamo v XHTML dokumente. KAPITOLA 5. VÝSLEDKY 59 alebo že sa element br nachádza v elemente p, kde by sa podľa špecifikácie nachádzať nemal. OOXML convert Program OOXML convert nemal žiadne problémy s tým, že v dokumente sú chyby. Spomenutý zle umiestnený element br bol vo všetkých verziách parametrov odignorovaný, chýbajúce štýly výstup tiež výraznejšie neovplyvnili. Tretia verzia parametrov spravila presne to, čo sa od nej očakávalo, teda zachovala len štruktúru a bez formátovania. V druhej verzii tiež nenastal žiadny problém, program pracoval podľa očakávaní. V tretej verzii už treba spomenúť jeden problém. Ide o problém spomenutý v časti 4.3.3 - tabulátory. OOXML convert nateraz tabulátory ingoruje, ale na tomto konkrétnom príklade to nie je až takým problémom. Chaos v štýloch tiež spôsobil, že tabuľka v texte nie je správne naformátovaná. Ostatné konvertory Výstup z Open Office a z GMail náhľadu sa nepodarilo získať. Open Office uvedený dokument ani neotvoril, GMail vypísal chybovú hlášku: „Príloha sa nedá zobraziť ako HTMLÿ. Paradoxne, DOCX Convert Office 2007, ktorý je tiež založený na Open Office, nemal s týmto dokumentom také veľké problémy. So zachovaním formátovania a štruktúry to však bolo horšie. Časť tabuľky nebola vôbec zobrazená a chýba tiež formátovanie tabuľky. Tabulátory boli vynechané. Plugin pre prehliadač Firefox tiež vynechal tabulátory, ale tabuľku zachoval a je tu tiež náznak pôvodného formátovania tabuľky. Potom sú tu ešte drobné chyby ako napríklad chýbajúca čiara pod menom a podobne. Obidva výstupy z Microsoft Office 2007 sú v zachovaní formátovania na vysokej úrovni. Tradičným problémom je veľkosť a neprehľadnosť zdrojového kódu. Na obrázku 5.2 je možné vidieť štyri rôzne interpretácie tej istej tabuľky. Zhrnutie Na tomto vstupe konvertory preukázali svoju schopnosť narábať s nepredvídateľnými problémami. Všetky informácie si teraz zhrnieme do tabuľky 5.2. Najhoršie a najlepšie hodnoty sú označené červenou, resp. zelenou farbou. KAPITOLA 5. VÝSLEDKY 60 Obr. 5.2: Export tej istej tabuľky v poradí v: DOCX Convert Office 2007, plugin Firefox, OOXML convert (2. verzia parametrov), Microsoft Office 2007 validita formátovanie štruktúra prehľadnosť veľkosť bez obrázkov celková veľkosť riešenie OOXML convert 1 OOXML convert 2 OOXML convert 3 MS Word MS Word (filtrovaný) Open Office (HTML) Open Office (XHTML) Firefox plugin DOCX Convert Office 2007 GMail formát Tabuľka 5.2: Zhrnutie kvality XHTML resp. HTML exportov na druhom vstupnom dokumente XHTML XHTML XHTML XHTML HTML n/a n/a XHTML HTML n/a áno (0) áno (0) áno (0) nie (1612) nie (20) n/a n/a nie (37) nie (18) n/a 2 3 4 1 1 5 5 2 5 5 1 1 1 2 2 5 5 2 3 5 2 1 1 5 4 5 5 4 2 5 23.1 20.0 17.8 185 106 0 0 129 42.1 0 38.8 35.7 33.5 205 119 0 0 136 49 0 Z tabuľky vidíme, že najlepším konvertorom na tomto vstupe, keď berieme ako hlavné kritérium zachovanie formátovania, je Microsoft Office 2007. Hneď však treba dodať, že zdrojový kód oboch verzií je veľmi neprehľadný a preto je objektívne prvenstvo na tomto vstupe viac než diskutabilné. Keď berieme do úvahy aj prehľadnosť, tak sa potom víťazom stávajú exporty z programu OOXML convert s parametrami v prvej a druhej verzii. KAPITOLA 5. VÝSLEDKY 61 Naopak najhoršie obstáli konvertory, ktoré dokument ani neotvorili a z tých čo vytvorili aspoň nejaký výstup je najhorší DOCX Convert Office 2007. 5.2.3 Veľký a neprehľadný dokument Ďalší v poradí bude veľký a neprehľadný verejný dokument stiahnutý z internetu - výročná správa. Takéto dokumenty bývajú zväčša skúškou ohňom, keďže tvorcovia len málokedy myslia na to, aby mal dokument aj nejakú štruktúru. Konkrétne v tomto dokumente sú zaujímavosti typu odsadzovanie medzerami, vo veľkom sa využívajú už spomínané tabulátory (na niektorých miestach nie práve najvhodnejšie), druhá úroveň odrážok je tu niekedy robená tak, že je vytvorený nový zoznam a ten je viac odsadený. . . teda zachovanie štruktúry v tomto dokumente nebude veľmi prísne brané, keďže štruktúru ani veľmi nemá. Hlavne nás bude zaujímať ako vyzerá výstup v prehliadači a tiež možnosť úprav, teda jednoduchosť zdrojového kódu. OOXML convert XHTML výstup programu OOXML convert je už tradične valídny, prehľadný a hlavne ľahko upraviteľný. Čo sa týka prenesenia formátovania, tak v prvej verzii vstupných parametrov je výstup na slušnej úrovni, ale miestami zaostáva. Takým miestom sú napríklad tabuľky, alebo niektoré odrážky. Druhá verzia parametrov aj napriek tomu, že prenáša iba základné formátovanie má tiež kvalitný výstup, aj keď sa na pôvodný dokument podobá skôr len štruktúrou ako formátovaním. Nakoniec tretia verzia vyniká jednoduchosťou zdrojového kódu a je teda určená hlavne na dodatočné úpravy. Na originál sa podobá len vzdialene. Ostatné konvertory Microsoft Office 2007 drží prvenstvo v prenášaní formátovania. Až na nejaké detaily pri odrážkach je to naozaj verná kópia. Horšie je to so zdrojovým kódom. Štruktúry ako napríklad zoznamy sú prekladané do odsekov textu, ktoré majú také formátovanie, aby ako zoznamy vyzerali. XHTML výstup z Open Office je v zachovávaní formátovania na veľmi nízkej úrovni. V prehliadači Opera bola vyrenderovaná spleť neznámych znakov a v ostatných sa tiež vyskytujú neznáme znaky a nepresnosti vo formátovaní. HTML verzia je na tom trocha KAPITOLA 5. VÝSLEDKY 62 lepšie. Miestami je na úrovni OOXML convert, na iných miestach ale dochádza k úplnému rozbitiu štruktúry (napríklad pri niektorých tabuľkách). Zdrojový kód HTML dokumentu je však na celkom dobrej úrovni. Plugin pre prehliadač Firefox má výstup tiež na nízkej úrovni. Nezachováva ani štruktúru. Svetlou výnikou sú tabuľky, ktoré majú formátovanie takmer ako pôvodný dokument. Zdrojový kód je tiež celkom kvalitný, kazia ho jedine CSS štýly, ktoré sú priamo v každom elemente. GMail má celkom prehľadné formátovanie, ale na pôvodný dokument sa až tak moc nepodobá. Zachovanie štruktúry a tiež relatívne prehľadný zdrojový kód je silná stránka GMail náhľadu. Nakoniec konvertor DOCX Convert Office 2007. Jeho silnejšou stránkou je relatívne dobrý prenos formátovania a tiež celkom dobré zachovávanie štruktúry. V prehľadnosti patrí k priemeru. Obr. 5.3: Rôzne chyby v zobrazení, hore: Open Office - XHTML verzia v prehliadači Opera, dole: Open Office - HTML verzia KAPITOLA 5. VÝSLEDKY 63 Zhrnutie Tento vstup testoval schopnosť poradiť si s veľmi zlým formátovaním. V tabuľke 5.2 vidíme prehľadné výsledky jednotlivých konvertorov na tomto vstupe. validita formátovanie štruktúra prehľadnosť veľkosť bez obrázkov celková veľkosť riešenie OOXML convert 1 OOXML convert 2 OOXML convert 3 MS Word MS Word (filtrovaný) Open Office (HTML) Open Office (XHTML) Firefox plugin DOCX Convert Office 2007 GMail formát Tabuľka 5.3: Zhrnutie kvality XHTML resp. HTML exportov na treťom vstupnom dokumente XHTML XHTML XHTML XHTML HTML HTML XHTML XHTML HTML HTML áno (0) áno (0) áno (0) nie (4573) nie (8) nie (120) nie (29) nie (4) nie (201) nie (251) 2 3 3 1 1 3 4 3 2 3 1 1 1 3 3 2 2 3 2 1 2 1 1 5 4 2 3 2 3 2 176 137 127 699 421 317 270 662 527 202 176 137 127 845 440 317 270 662 527 202 Z tabuľky vidíme, že aj na tomto vstupe pokračujú typické výsledky, keď Microsoft Office 2007 vedie v prenášaní formátovania a OOXML convert vedie v kvalite zdrojového kódu a v prenášaní štruktúry. Treba tiež spomenúť, že Microsoft Office 2007 ako jediný z konvertorov vyexportoval aj obrázok organizačnej štruktúry, ktorý bol v DOCX dokumente vložený ako objekt Organization Chart. Najhoršie obstál XHTML výstup z programu Open Office. 5.2.4 Bežný dokument z internetu Posledným z testovacej sady dokumentov je dokument o Office Open XML publikovaný na internete. Ide o dokument, ktorý má bežné formátovanie, obsahuje odstavce, nejaké odkazy, nadpisy, zoznamy a podobne. Tento dokument má za úlohu overiť použitie týchto konvertorov v bežných úlohách. KAPITOLA 5. VÝSLEDKY 64 OOXML convert Vzhľadom na to, že ide o relatívne jednoduché formátovanie, rozdiel medzi jednotlivými verziami vstupných parametrov nie sú až také veľké, ako na iných príkladoch. Aj keď je zachovávanie formátovania veľmi kvalitné, problémom sú opäť tabuľky, pretože sa im zobrazujú okraje, čo by sa však nemali. Ostatné konvertory Microsoft Office 2007 má obe verzie výstupov takmer úplne totožné. Výnimočne je aj zdrojový kód, na pomery tejto aplikácie, vcelku prehľadný. Celkom dobré zachovanie formátovania má okrem aplikácie Microsoft Office 2007 aj GMail náhľad. Ostatné riešenia v tomto mierne zaostávajú. Zhrnutie Keďže ide o veľmi jednoduchý dokument, budeme ho hodnotiť prísnejšie. V tabuľke 5.3 sú zhrnuté vlastnosti jednotlivých konvertorov na tomto vstupe. validita formátovanie štruktúra prehľadnosť veľkosť bez obrázkov celková veľkosť riešenie OOXML convert 1 OOXML convert 2 OOXML convert 3 MS Word MS Word (filtrovaný) Open Office (HTML) Open Office (XHTML) Firefox plugin DOCX Convert Office 2007 GMail formát Tabuľka 5.4: Zhrnutie kvality XHTML resp. HTML exportov na štvrtom vstupnom dokumente XHTML XHTML XHTML XHTML HTML HTML XHTML XHTML HTML HTML áno (0) áno (0) áno (0) nie (1047) nie (27) nie (26) nie (37) nie (51) nie (13) nie (170) 2 2 3 1 1 2 4 3 2 3 1 1 1 2 2 1 4 2 1 1 2 1 1 4 3 2 4 3 2 2 112 83.3 76.7 266 152 148 142 248 170 116 150 121 114 289 175 174 142 271 193 116 Opäť sme dostali podobné výsledky ako doposiaľ. Na prvých priečkach Microsoft Word KAPITOLA 5. VÝSLEDKY 65 2007 a OOXML convert, každý ale v inej kategórii a najhoršie opäť dopadol Open Office s XHTML verziou. 5.3 Vyhodnotenie výsledkov Teraz si zhrnieme doterajšie výsledky v jednej tabuľke. Hodnotenia od 1 do 5 spriemerujeme aritmetickým priemerom. Veľkosti súborov a počet chýb z validácie sčítame (bez tých výsledkov, kde sa niektoré konvertory ani nespustili). Takto dostaneme tabuľku 5.5. počet chýb formátovanie štruktúra prehľadnosť veľkosť bez obrázkov celková veľkosť riešenie OOXML convert 1 OOXML convert 2 OOXML convert 3 MS Word MS Word (filtrovaný) Open Office (HTML) Open Office (XHTML) Firefox plugin DOCX Convert Office 2007 GMail formát Tabuľka 5.5: Zhrnutie kvality XHTML resp. HTML exportov na všetkých vstupných dokumentoch XHTML XHTML XHTML XHTML HTML HTML XHTML XHTML HTML HTML 0 0 0 5992 40 155 92 63 232 430 1.75 2.75 3.5 1.5 1 3.25 4.25 3 2.75 3.75 1 1 1 2.5 2.5 2.25 3 3 2 2 2 1 1 4.75 3.5 2.75 4.25 3.25 2.25 2.5 299 229 210 1039 594.8 478 465 939 714 328 359 287 269 1641 1033 565 465 1021 1134 328 Celkové poradie sa určiť nedá, pretože v každej oblasti je iný víťaz. V prenášaní formátovania je najlepší Microsoft Word 2007, v kvalite výstupného zdrojového kódu dokumentu je zase najlepší OOXML convert. OOXML convert zároveň celkom dobre prenáša formátovanie (je druhý v poradí v tomto kritériu), preto sa zdá, že by mohol byť z uvedených riešení objektívne najlepší. Prednosti programu OOXML convert sú okrem valídneho kvalitného výstupu aj variabilita nastavení a multiplatformové použitie. Naopak nevýhody sú horšia podpora formátovania tabuliek a nepodporovanie tabulátorov. Hlavná výhoda použitia Microsoft Office 2007 je kvalitné zachovanie formátovania KAPITOLA 5. VÝSLEDKY 66 dokumentu a hlavná nevýhoda je, že tento výstupný dokument je príliš veľký a neprehľadný a je teda prakticky nemožné ho ďalej upravovať. Nezanedbateľná nevýhoda je tiež, že táto aplikácia nie je zadarmo. Z tohto nám teda vyplýva, že ak nám ide o striktné zachovanie formátovania, tak najlepšia voľba na konvertor z DOCX na XHTML by bola Microsoft Office 2007. V prípade, že síce chceme vernú kópiu pôvodného DOCX dokumentu, ale záleží nám aj na ďalšej použiteľnosti a prispôsobiteľnosti, tak je lepšou voľbou OOXML convert. Záver Cieľom tejto práce bolo vytvoriť stručnú a prehľadnú dokumentáciu k formátu Office Open XML. Táto dokumentácia by mala obsahovať dostatok informácií na to, aby na jej základe čitateľ nielen porozumel danej problematike, ale aby tiež vedel tieto informácie prakticky používať. Tento cieľ sa nám podarilo splniť v 2. kapitole. Neskôr sme popísali (spolu s príkladmi) existujúce riešenia konverzie DOCX dokumentov na XHTML dokumenty, čím sme naplnili náš ďalší cieľ - spraviť prehľad existujúcich riešení. Nakoniec sme naprogramovali funkčnú konzolovú aplikáciu v jazyku Java slúžiacu na konverziu DOCX na XHTML a tiež grafické používateľské rozhranie. Táto aplikácia bola vzápätí podrobená testovaniu na náhodne vybraných DOCX dokumentoch spolu s ostatnými existujúcimi riešeniami. Na základe výsledkov sme spravili prehľad kvality XHTML resp. HTML exportov, v ktorom naša aplikácia vo väčšine sledovaných vlastností uspela najlepšie. Týmto sme splnili náš hlavný cieľ - naprogramovať aplikáciu na konverziu DOCX na XHTML, kde nám záleží hlavne na kvalite zdrojového kódu, ale tiež aj na zachovaní formátovania pôvodného dokumentu. Konverzia tak komplexného formátu, akým je Office Open XML, je vysoko nad rámec jednej diplomovej práce. Preto hlavne v časti, kde sme aplikáciu testovali, uvádzame niekoľko nápadov na jej vylepšenie. Ide hlavne o rozšírenie funkcionality konverzie na nové elementy v dokumente. Využitie by mala napríklad podpora tabulátorov, viacerých stĺpcov v texte či pokročilejšie heuristiky na zjednodušenie a sprehľadnenie zdrojového kódu XHTML dokumentu. Veľký potenciál vidíme aj vo webovskej aplikácii, ktorá by slúžila ako grafické používateľské rozhranie pre našu aplikáciu. 67 Zoznam použitej literatúry [Dow00] Thomas Dowling. Validating html. 2000. Available from: http://gold. ohiolink.edu/tdowling/validation.html. [ECM06] ECMA. Standard ECMA-376, Office Open XML File Formats, 1st Edition, 2006. [Ehr06] Erika Ehrli. Walkthrough: Word 2007 xml format. 2006. Available from: http://msdn.microsoft.com/en-us/library/ms771890.aspx. [Hun02] Jason Hunter. Jdom and xml parsing. Oracle Magazine, 2002. [Hun07] Jason Hunter. Jdom documentation. 2007. Available from: http://www. jdom.org/downloads/docs.html. [ISO08] ISO. International Standard ISO/IEC 29500:2008, Information technology – Document description and processing languages - Office Open XML file formats, 2008. [Joh05] Roger Johansson. Transitional vs. strict markup. 2005. Available from: http: //24ways.org/2005/transitional-vs-strict-markup. [Jon06] Brian Jones. Introduction to word documents. 2006. Available from: http: //blogs.msdn.com/brian_jones/archive/2006/02/02/523469.aspx. [Kos08] Jirka Kosek. Office open xml, seminář o novém formátu souborů. 2008. Available from: http://www.kosek.cz/xml/2008ooxml/. [LML04] Evan Lenz, Mary McRae, and Simon St. Laurent. Office 2003 XML: Integrating Office with the Rest of the World. O’Reilly, 2004. 68 ZOZNAM POUŽITEJ LITERATÚRY 69 [MDHY06] Sanjay Kumar Madhva, Kulkarni D.V., Srinidhi H.S., and Pujari Y. Creating word document in office open xml format using java. 2006. Available from: http://openxmldeveloper.org/articles/JavaWordProcessingML.aspx. [Mic03] Microsoft. Overview of WordprocessingML, 2003. Available from: http://rep.oio.dk/Microsoft.com/officeschemas/wordprocessingml_ article.htm. [sax09] Simple api for xml. 2009. Available from: http://en.wikipedia.org/wiki/ Simple_API_for_XML. [Web03] The Web Standards Project. HTML Versus XHTML, 2003. Available from: http://www.webstandards.org/learn/articles/askw3c/oct2003/. [wik09] Office open xml. 2009. Available from: http://en.wikipedia.org/wiki/ Office_Open_XML. [xml07] Open source xml parsers in java. 2007. Available from: http://java-source. net/open-source/xml-parsers. Prílohy Zoznam príloh: 1. CD médium Obsah CD média Priložené CD má nasledovnú štruktúru: • vysledky - v tomto adresári sa nachádzajú testovacie sady DOCX dokumentov a tiež HTML resp. XHTML výstupy jednotlivých konvertorov • JavaDoc - v tomto adresári sa nachádza popis tried, metód a premenných použitých v aplikácii Office Open XML convert • diplomova praca - v tomto adresári sa nachádza elektronická verzia tejto práce • OOXML convert - v tomto adresári sa nachádza program Office Open XML convert spolu so zdrojovými súbormi 70