Z´apadoˇcesk´a univerzita v Plzni Fakulta aplikovan´ych vˇed Katedra informatiky a v´ypoˇcetn´ı techniky
Diplomov´ a pr´ ace
Kontrola form´ aln´ıch pravidel u dokument˚ u vybran´ ych textov´ ych procesor˚ u
Plzeˇn 2015
Bc. Ondˇrej Kupil´ık
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem diplomovou pr´aci vypracoval samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. V Plzni dne 22. ˇcervna 2015 Bc. Ondˇrej Kupil´ık
Abstract Kontrola form´ aln´ıch pravidel u dokument˚ u vybran´ ych textov´ ych procesor˚ u Diplomov´a pr´ace se zab´ yv´a kontrolou form´aln´ıch pravidel u dokument˚ u textov´ ych procesor˚ u Microsoft Word, OpenOffice a LibreOffice. C´ılem pr´ace je analyzovat moˇznosti kontroly v dokumentech vybran´ ych textov´ ych procesor˚ u, definovat mnoˇzinu kontrolovan´ ych pravidel a vytvoˇrit aplikaci, kter´a bude mnoˇzinu pravidel pro dan´e typy dokument˚ u kontrolovat. Pravidla kontrolovan´a aplikac´ı jsou definov´ana ve vstupn´ım XML souboru. Struktura XML souboru byla navrˇzena v r´amci diplomov´e pr´ace a je pops´ana pomoc´ı XSD sch´ematu. V´ ystupem programu je XML soubor obsahuj´ıc´ı v´ ysledky kontroly pravidel. Program byl otestov´an na sadˇe r˚ uzn´ ych dokument˚ u.
The Control of Rules in Documents of Chosen Word Processors The diploma thesis deals with the control of rules in Microsoft Word, OpenOffice, and LibreOffice documents. The goal of the thesis is to analyse the possibilities of the control of rules in the documents of chosen word processors, to define a set of the rules, and to develop an application that will control the defined set of rules in the documents. The input of the program is an XML file that includes the rules required by the user. The structure of the XML file was designed within the framework of the thesis and the structure was described by XSD schema. The output of the application is the XML file containing the results of the control of rules. The testing of the program was performed on a set of various documents.
Podˇ ekov´ an´ı ˇ ep´anu Caisovi za cenn´e R´ad bych podˇekoval vedouc´ımu diplomov´e pr´ace Ing. Stˇ rady, vˇecn´e pˇripom´ınky a za celkovou spolupr´aci pˇri realizaci pr´ace.
Obsah ´ 1 Uvod
1
2 Moˇ znosti kontroly form´ aln´ıch pravidel 2.1 Vybran´e textov´e procesory . . . . . . . 2.1.1 Microsoft Office Word . . . . . 2.1.2 Apache OpenOffice Writer . . . 2.1.3 LibreOffice Writer . . . . . . . . 2.2 Form´aty dokument˚ u . . . . . . . . . . 2.2.1 Form´at DOC . . . . . . . . . . 2.2.2 Form´at DOCX . . . . . . . . . 2.2.3 Form´at ODT . . . . . . . . . . 2.3 Knihovny pro zpracov´an´ı dokument˚ u . 2.3.1 Apache POI . . . . . . . . . . . 2.3.2 ODFDOM . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
2 2 2 3 4 5 5 5 9 12 12 14
3 Mnoˇ zina kontrolovan´ ych pravidel 3.1 Poˇcet slov . . . . . . . . . . . . . 3.2 Poˇcet stran . . . . . . . . . . . . 3.3 Velikost ˇra´dkov´an´ı . . . . . . . . 3.4 Okraje str´anky . . . . . . . . . . 3.5 Uveden´ı jm´ena . . . . . . . . . . 3.6 Uveden´ı data . . . . . . . . . . . 3.7 Pouˇzit´ y font . . . . . . . . . . . . 3.8 Pouˇzit´ı konkr´etn´ıho nadpisu . . . 3.9 Pouˇzit´ı odkaz˚ u na literaturu . . . 3.10 Pouˇzit´ı konkr´etn´ıho textu . . . . 3.11 Pouˇzit´ı ˇc´ıslov´an´ı stran . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
17 17 18 19 20 22 23 23 24 25 27 28
4 XML soubor pro zad´ an´ı pravidel 4.1 Struktura XML soubor˚ u . . . . 4.1.1 Vstupn´ı soubor . . . . . 4.1.2 V´ ystupn´ı soubor . . . . 4.2 XML parser . . . . . . . . . . . 4.2.1 Parsery . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
29 29 29 34 39 39
. . . . .
. . . . .
41 42 42 42 44
. . . . . . . . .
47 47 47 48 48 50 52 52 59 62
6 Testov´ an´ı 6.1 Testovac´ı mnoˇzina . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Nalezen´e probl´emy . . . . . . . . . . . . . . . . . . . . . . . . . .
64 64 64
7 Z´ avˇ er
67
Literatura
68
Seznam zkratek
70
4.3
4.2.2 Vybran´ y parser . . . . . . . Validace XML souboru . . . . . . . 4.3.1 Spr´avnˇe strukturovan´ y XML 4.3.2 W3C XML Schema . . . . . 4.3.3 XSD soubor . . . . . . . . .
5 N´ avrh a implementace programu 5.1 Poˇzadovan´e funkce programu . . 5.2 Program´atorsk´e prostˇredky . . . . 5.3 N´avrh ˇreˇsen´ı . . . . . . . . . . . . 5.3.1 D´ılˇc´ı ˇcinnosti vrstev . . . 5.3.2 Kl´ıˇcov´a rozhran´ı a tˇr´ıdy . 5.4 Implementace . . . . . . . . . . . 5.4.1 Aplikaˇcn´ı vrstva . . . . . . 5.4.2 Datov´a vrstva . . . . . . . 5.4.3 Argumenty programu . . .
Pˇ r´ılohy Uˇzivatelsk´a pˇr´ıruˇcka . . Spuˇstˇen´ı programu Vstupn´ı soubor . . Seznam obr´azk˚ u. . . . . Obsah CD . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . . . . . . . . . dokument . . . . . . . . . . . .
. . . . . . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . .
. . . . . . . . .
. . . . .
. . . . .
72 72 72 73 77 77
´ 1 Uvod Textov´e procesory patˇr´ı mezi velmi ˇcasto pouˇz´ıvan´e aplikace napˇr´ıˇc r˚ uzn´ ymi operaˇcn´ımi syst´emy. Mezi nejzn´amˇejˇs´ı patˇr´ı Microsoft Word, OpenOffice ˇci LibreOffice. Textov´e dokumenty ve form´atech doc, docx nebo odt vytvoˇren´e v tˇechto procesorech jsou pouˇz´ıv´any pro pˇrenos ˇci uchov´an´ı textov´ ych informac´ı a dat v pracovn´ım, studijn´ım i bˇeˇzn´em ˇzivotˇe. V´ yˇse zm´ınˇen´e textov´e procesory umoˇzn ˇuj´ı vytv´aˇret dokumenty s r˚ uznou strukturou, obsahem ˇci form´atov´an´ım. Textov´e dokumenty jsou ˇcasto vytv´aˇreny na z´akladˇe konkr´etn´ıho zad´an´ı, kter´e pˇr´ımo urˇcuje, jak m´a struktura, obsah a form´atov´an´ı dokumentu vypadat. Pˇr´ıkladem m˚ uˇze b´ yt zad´an´ı semestr´aln´ı pr´ace na vysok´e ˇskole, kde je student˚ um jasnˇe stanoveno, jak´e maj´ı pouˇz´ıt okraje str´anky, jak´ y font s jakou velikost´ı m´a b´ yt pouˇzit v textu, zda m´a b´ yt pouˇzito ˇc´ıslov´an´ı stran ˇci jak´e konkr´etn´ı kapitoly mus´ı dokument obsahovat a podobnˇe. Tyto form´aln´ı poˇzadavky je ˇcasto nutn´e manu´alnˇe kontrolovat, coˇz je ˇcasovˇe n´aroˇcn´e. Bylo by proto v´ yhodn´e m´ıt program, kter´ y by automatizovan´ ym procesem dok´azal tato pravidla kontrolovat. C´ılem pr´ace je prov´est anal´ yzu moˇznost´ı kontroly form´aln´ıch pravidel u vybran´ ych textov´ ych procesor˚ u, d´ale definovat mnoˇzinu pravidel, kter´a se budou zamˇeˇrovat na obsah, strukturu a form´atov´an´ı dokumentu, a vytvoˇrit aplikaci, jeˇz bude kontrolu nadefinovan´ ych pravidel prov´adˇet. Prvn´ım u ´kolem v r´amci diplomov´e pr´ace je sezn´amen´ı se s moˇznostmi kontroly form´aln´ıch pravidel. Je nutn´e analyzovat vlastnosti vybran´ ych procesor˚ u a d´ale na z´akladˇe anal´ yzy definovat mnoˇzinu form´aln´ıch pravidel, kter´a bude v´ ysledn´ y program kontrolovat. Vzhledem k tomu, ˇze vstupem aplikace m´a b´ yt XML soubor s definicemi jednotliv´ ych pravidel, bude v r´amci pr´ace navrˇzena struktura vstupn´ıho XML souboru. Jeho struktura bude pops´ana XSD sch´ematem. N´aslednˇe bude navrˇzen a implementov´an program, jehoˇz u ´kolem bude prov´adˇet kontrolu pravidel zadan´ ych pomoc´ı vstupn´ıho XML. Na z´avˇer bude vytvoˇren´a aplikace otestov´ana na sadˇe r˚ uzn´ ych dokument˚ u. V´ yvoj diplomov´e pr´ace byl ˇr´ızen pomoc´ı webov´e aplikace Redmine, kter´a je flexibiln´ım n´astrojem pro ˇr´ızen´ı projekt˚ u. Prostˇrednictv´ım tohoto n´astroje prob´ıhala velk´a ˇca´st komunikace mezi autorem a vedouc´ım pr´ace. Pro spr´avu a verzov´an´ı zdrojov´ ych k´od˚ u programu vytv´aˇren´eho v r´amci diplomov´e pr´ace byl pouˇzit syst´em Subversion (SVN).
1
2 Moˇznosti kontroly form´aln´ıch pravidel V t´eto kapitole bude pops´ano, jak´e jsou moˇznosti kontroly form´aln´ıch pravidel v dokumentech vybran´ ych textov´ ych procesor˚ u. Budou pˇredstaveny textov´e procesory, kter´e byly pro tuto diplomovou pr´aci vybr´any, a nejpouˇz´ıvanˇejˇs´ı form´aty dokument˚ u, s nimiˇz tyto procesory pracuj´ı. Rovnˇeˇz bude pops´an v´ ybˇer knihoven pro programovac´ı jazyk Java, kter´e um´ı dokumenty ve vybran´ ych form´atech zpracovat.
2.1
Vybran´ e textov´ e procesory
Jako textov´e procesory jsou oznaˇcov´any poˇc´ıtaˇcov´e programy, kter´e slouˇz´ı k vytv´aˇren´ı, u ´pravˇe, form´atov´an´ı a tisku textov´ ych dokument˚ u. Tato podkapitola pˇredstav´ı jednotliv´e textov´e procesory, s nimiˇz se v diplomov´e pr´aci pracuje. Pouˇzit´ı textov´ ych procesor˚ u uveden´ ych v t´eto ˇca´sti bylo pˇr´ımo urˇceno zad´an´ım diplomov´e pr´ace.
2.1.1
Microsoft Office Word
Jeden ze svˇetovˇe nejrozˇs´ıˇrenˇejˇs´ıch textov´ ych procesor˚ u je Microsoft Office Word (d´ale jen MS Word). Tento procesor je souˇca´st´ı kancel´aˇrsk´eho bal´ıku Microsoft Office firmy Microsoft, kter´ y kromˇe Wordu obsahuje n´asleduj´ıc´ı n´astroje: Excel – tabulkov´ y editor, PowerPoint – n´astroj pro vytv´ aˇren´ı prezentac´ı, Outlook – e-mailov´ y klient, Access – datab´azov´ y program, OneNote – n´astroj pro organizaci pozn´ amek, Publisher – aplikaci pro grafick´e publikov´an´ı informac´ı.
Historie Historie MS Word sah´a do roku 1983, kdy vznikl Word pro platformy DOS a Macintosh. Prvn´ı vyd´an´ı Wordu (Word 1.0) pro Windows pˇriˇslo v roce 1989. Tento program mˇel pouze dvˇe n´astrojov´e liˇsty. Prvn´ı verze cel´eho bal´ıku MS Office 2
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
3
pro operaˇcn´ı syst´emy Windows vznikla v roce 1990 jako Office 1.0, kter´ y obsahoval Word 1.1, Excel 2.0 a PowerPoint 2.0. V letech 1989 aˇz 2003 MS Word z hlediska vlastnost´ı a funkˇcnosti v´ yraznˇe rostl. Napˇr´ıklad v roce 1995 byl vyd´an MS Word 1995, kter´ y jiˇz mˇel devˇet n´astrojov´ ych liˇst a poprv´e obsahoval automatick´e funkce jako kontrola pravopisu ˇci automatick´e opravy. Zvyˇsov´an´ı poˇctu funkc´ı a vlastnost´ı si vybralo svou daˇ n na verzi Word 2003, kter´a mˇela 31 n´astrojov´ ych liˇst, 19 podoken u ´loh a r˚ uzn´e kontextov´e, zkracovac´ı, hierarchick´e a rozˇsiˇruj´ıc´ı se nab´ıdky. To vˇsechno ˇcinilo pro uˇzivatele program nepˇrehledn´ y. Proto se od verze MS Word 2007 v´ yvoj´aˇri snaˇz´ı o zjednoduˇsen´ı ovl´ad´an´ı produktu [1]. Po MS Word 2007 pˇriˇsla jeˇstˇe dvˇe vyd´an´ı, MS Word 2010 a MS Word 2013. Z´asadn´ı zmˇenou mezi verzemi MS Word 2003 a 2007 byla zmˇena form´atu ukl´ad´an´ı dokument˚ u. Do verze 2003 se pouˇz´ıval form´at doc. Jednalo se o bal´ık bin´arn´ıch soubor˚ u, ve kter´ ych byly uloˇzeny vˇsechny informace o dokumentu, napˇr´ıklad obsah nebo form´atov´an´ı dokumentu. Od verze 2007 zaˇcal b´ yt pouˇz´ıv´am nov´ y form´at docx. Ten je na rozd´ıl od doc bal´ıkem XML soubor˚ u, v nichˇz jsou uloˇzeny informace, kter´e byly dˇr´ıve uchov´av´any v bin´arn´ıch souborech [2]. Detailnˇejˇs´ı popis jednotliv´ ych form´at˚ u dokument˚ u je k dispozici v kapitole 2.2.
2.1.2
Apache OpenOffice Writer
OpenOffice Writer je souˇca´st´ı kancel´aˇrsk´eho bal´ıku Apache OpenOffice. Bal´ık vyv´ıj´ı The Apache Software Foundation a je vyd´av´an pod Apache 2.0 Licence, coˇz znamen´a, ˇze m˚ uˇze b´ yt zdarma pouˇz´ıv´an pro jak´ekoliv u ´ˇcely, soukrom´e, komerˇcn´ı, vzdˇel´avac´ı i administrativn´ı. Mezi uˇzivateli je OpenOffice Writer ˇsiroce rozˇs´ıˇren jako neplacen´a alternativa MS Word. Kromˇe programu Writer bal´ık obsahuje n´asleduj´ıc´ı n´astroje: Calc – tabulkov´ y n´astroj, Impress – program pro vytv´ aˇren´ı prezentac´ı, Draw – grafick´ y n´astroj, Base – datab´azov´ y program, Math – aplikaci pro pr´aci s matematick´ ymi rovnicemi.
Writer podporuje OpenDocument form´aty jako jsou odt, ott, oth a odm a rovnˇeˇz dokumenty ve form´atech MS Word doc a docx. Kromˇe nich je moˇzn´e v programu Writer pracovat tak´e s form´aty jako xml, sxw, rtf, txt, csv a dalˇs´ımi [3].
3
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
4
Historie OpenOffice existuje od roku 2000, kdy Sun Microsystems pˇrevzala od firmy StarOffice jej´ı kancel´aˇrsk´ y bal´ık StarOffice. Prvn´ı verze bal´ıku pod n´azvem OpenOffice.org byla vyd´ana v roce 2002 (OpenOffice.org 1.0). V roce 2010 Sun Microsystems pˇrevzala korporace Oracle. Nˇekteˇr´ı dosavadn´ı v´ yvoj´aˇri OpenOffice.org se ob´avali, ˇze Oracle kancel´aˇrsk´ y bal´ık zpoplatn´ı a zaloˇzili si vlastn´ı spoleˇcnost The Document Foundation, kter´a vyv´ıj´ı bal´ık LibreOffice, viz kapitola 2.1.3. V roce 2011 pˇrevzala kompletn´ı produkt OpenOffice.org spoleˇcnost Apache Software Foundation, jeˇz bal´ık vyv´ıj´ı pod n´azvem Apache OpenOffice dodnes. Nejnovˇejˇs´ı verz´ı kancel´aˇrsk´eho bal´ıku je Apache OpenOffice 4.1.1 z roku 2014 [3].
2.1.3
LibreOffice Writer
LibreOffice Writer je textov´ y editor, kter´ y je souˇca´st´ı kancel´aˇrsk´eho bal´ıku LibreOffice. Tento bal´ık vyv´ıj´ı spoleˇcnost The Document Foundation. Stejnˇe jako Apache OpenOffice je tento n´astroj dostupn´ y zdarma. Vzhledem k tomu, ˇze LibreOffice vych´az´ı z OpenOffice, obsahuje tento kancel´aˇrsk´ y bal´ık stejn´e n´astroje jako OpenOffice. Jedin´ ym program, kter´ y m´a LibreOffice nav´ıc, je n´astroj pro tvorbu graf˚ u s n´azvem Charts. LibreOffice Writer podporuje stejn´e form´aty jako OpenOffice Writer. Historie Jak bylo zm´ınˇeno v pˇredchoz´ı kapitole 2.1.2, spoleˇcnost The Document Foundation vznikla v roce 2010 oddˇelen´ım od OpenOffice. Prvn´ı vyd´an´ı bal´ıku LibreOffice 3.3 probˇehlo v roce 2011. N´asledovaly verze 3.4, 3.5 a 3.6. V roce 2013 byla vyd´ana varianta LibreOffice 4.0, na kterou nav´azala aktu´alnˇe nejnovˇejˇs´ı verze 4.1 [4].
4
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
2.2
5
Form´ aty dokument˚ u
V kapitole 2.1 byly pˇredstaveny textov´e procesory, se kter´ ymi se v diplomov´e pr´aci pracuje. V t´eto ˇca´sti pr´ace budou pops´any nejpouˇz´ıvanˇejˇs´ı form´aty textov´ ych dokument˚ u pˇredstaven´ ych procesor˚ u.
2.2.1
Form´ at DOC
Tento form´at je spojen s verzemi MS Word 1997, 2000, 2002 a 2003. Patˇr´ı do rodiny Office Binary File Formats, coˇz znamen´a, ˇze se jedn´a o bal´ık bin´arn´ıch soubor˚ u, ve kter´ ych jsou uchov´any ve formˇe bin´arn´ıch dat informace o dokumentu. Tento zp˚ usob uloˇzen´ı textov´eho dokumentu byl nahrazen ve verzi MS Word 2007 form´atem docx, kter´ y pouˇz´ıv´a Open XML File Formats a je pops´an v kapitole 2.2.2. Bin´arn´ı struktura dat znamen´a, ˇze jsou vyj´adˇrena jako skupiny hexadecim´aln´ıch ˇc´ısel, kter´e interpretaˇcn´ı program zpracuje a zobraz´ı pˇres sv´e uˇzivatelsk´e rozhran´ı. V n´asleduj´ıc´ım seznamu jsou uvedeny nˇekter´e z bin´arn´ıch proud˚ u (stream˚ u) au ´loˇziˇst’ (storage), kter´e m˚ uˇze dokument obsahovat [5]: Dokument m˚ uˇze obsahovat n´asleduj´ıc´ı WordDocument Stream – Mus´ı b´ yt v dokumentu pokaˇzd´e. Obsahuje text dokumentu a ostatn´ı informace odkazovan´e z dalˇs´ıch ˇca´st´ı souboru. Data Stream – Nem´ a ˇza´dnou pˇreddefinovanou strukturu. Obsahuje data odkazovan´e v ostatn´ıch ˇca´stech dokumentu. Custom XML Data Storage – Specifikuje jak uchovat kolekci XML fragment˚ u. Summary Information Stream – Obsahuje informace o dokumentu, napˇr´ıklad jm´eno autora, ˇcas posledn´ı u ´pravy a dalˇs´ı. Document Summary Information Stream – Obsahuje informace o obsahu dokumentu, napˇr´ıklad celkov´ y poˇcet ˇra´dek a poˇcet odstavc˚ u a dalˇs´ı. Macros Storage – Jsou v nˇem uloˇzena makra pouˇzit´a v dokumentu.
2.2.2
Form´ at DOCX
Form´at docx navazuje na doc od verze MS Word 2007. Patˇr´ı do rodiny Office Open XML File Formats, kter´a je n´asledovn´ıkem Office Binary File Formats. Dˇr´ıvˇejˇs´ı uloˇzen´ı informac´ı o dokumentu v bin´arn´ıch souborech bylo nahrazeno uloˇzen´ım do XML soubor˚ u. Soubor docx je tedy bal´ıkem XML soubor˚ u, kter´e obsahuj´ı vˇsechna data popisuj´ıc´ı dokument. Form´at doc z˚ ustal dostupn´ y pro ukl´ad´an´ı dokument˚ u i po zaveden´ı docx, ovˇsem nen´ı jiˇz pro uloˇzen´ı dokument˚ u v´ ychoz´ım typem. Podle [6] m´a Office Open XML File Formats n´asleduj´ıc´ı pˇr´ınosy: 5
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
6
Jednoduch´ e propojen´ı byznys informac´ı s dokumenty – umoˇzn ˇuje ’ vytvoˇren´ı dokument˚ u z rozliˇcn´ ych zdroj˚ u dat, zrychlen´ı shromaˇzd ov´an´ı dokument˚ u, data mining (dolov´an´ı dat) a znovupouˇzit´ı obsahu dokument˚ u. Otevˇ renost – Office XML Format je zaloˇzen na XML a ZIP technologi´ıch, takˇze je vˇseobecnˇe pˇr´ıstupn´ y. Pˇ renositelnost – s XML standardem je v´ ymˇena dat mezi byznys syst´emy a Office aplikacemi zjednoduˇsen´a. Je moˇzn´e zmˇenit informace v dokumentu bez MS Office aplikace, pouze za pouˇzit´ı standardn´ıch n´astroj˚ u pro manipulaci s XML. Robustnost – Office XML Format je navrˇzen tak, aby byl robustnˇejˇs´ı neˇz Binary File Format. T´ım by mˇela b´ yt omezena moˇznost ztr´aty dat pˇri poˇskozen´ı souboru. Efektivita – pouˇzit´ı komprese pomoc´ı ZIP technologie sniˇzuje velikost souboru aˇz o 75 % v porovn´an´ı s bin´arn´ım form´atem. Bezpeˇ cnost – dokumenty mohou b´ yt bezpeˇcnˇe sd´ıleny, protoˇze uˇzivatel m˚ uˇze ze souboru odstranit citliv´a data jako uˇzivatelsk´a jm´ena, koment´aˇre nebo cesty k soubor˚ um. D´ale maj´ı Word 2007, Excel 2007 a PowerPoint 2007 soubory v´ ychoz´ı nastaven´ı, kter´e urˇcuje, ˇze nemaj´ı spouˇstˇet vloˇzen´ y k´od. To je v´ yhodn´e napˇr´ıklad pokud uˇzivatel dostane jeden z tˇechto dokument˚ u jako pˇr´ılohu e-mailu. Nemus´ı se pak b´at, ˇze s jeho otevˇren´ım se spust´ı nˇejak´ y ˇskodliv´ y program. Zpˇ etn´ a kompatibilita – starˇs´ı typ soubor˚ u doc je plnˇe kompatibiln´ı s nov´ ym form´atem docx.
Dokument typu docx je tedy ZIP bal´ık, kter´ y m˚ uˇze obsahovat n´asleduj´ıc´ı soubory a adres´aˇre [7], [8]: Soubor [Content Types].xml – popisuje typ obsahu kaˇzd´e ˇc´asti dokumentu. Typ hlavn´ı ˇca´sti dokumentu vypad´a n´asledovnˇe:
Adres´ aˇ r rels – jsou v nˇem uloˇzeny vztahy mezi jednotliv´ ymi ˇc´astmi dokumentu. Soubor .rels – popisuje vztahy ve struktuˇre dokumentu. Adres´ aˇ r datastore – obsahuje data dokumentu uloˇzen´e v XML souborech.
6
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
7
Soubor item1.xml – obsahuje urˇcit´ a data pouˇzit´a v dokumentu, napˇr´ıklad poloˇzky literatury. Adres´ aˇ r docProps – obsahuje informace o aplikaci, ve kter´e byl dokument vytvoˇren. Soubor App.xml – obsahuje informace o specifick´ ych vlastnostech aplikace, ve kter´e byl dokument vytvoˇren. Soubor Core.xml – obsahuje bˇeˇzn´e informace o vlastnostech dokumentu, jako jsou ˇcas vytvoˇren´ı, jm´eno autora, jazyk nebo ˇcas posledn´ı modifikace.
Na obr´azku 2.1 je struktura uk´azkov´eho dokumentu form´atu docx.
Obr´azek 2.1: Hierarchick´a struktura uk´azkov´eho DOCX dokumentu [7]
V adres´aˇri word jsou XML soubory, kter´e urˇcuj´ı obsah a form´atov´an´ı cel´eho dokumentu. Sloˇzka word tedy odpov´ıd´a adres´aˇri datastore ze seznamu a m˚ uˇze obsahovat tyto soubory [7], [8]: Soubor document.xml – je v nˇem uloˇzeno tˇelo dokumentu. Zpravidla se jedn´a pˇredevˇs´ım o odstavce a tabulky. Soubor styles.xml – obsahuje definice vˇsech styl˚ u pouˇzit´ ych v dokumentu. Definice stylu obsahuje font, jeho velikost, velikost ˇra´dkov´an´ı, odkazy na pˇr´ıbuzn´e styly a dalˇs´ı informace.
7
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
8
Soubor listDefs.xml – obsahuje definice seznam˚ u. Soubor settings.xml – obsahuje nastaven´ı dokument˚ u. Soubor header.xml – obsahuje z´ ahlav´ı dokumentu. M˚ uˇze jich b´ yt v´ıce, odliˇsuj´ı se pak ˇc´ıslic´ı na konci n´azvu souboru, napˇr´ıklad header1.xml, header2.xml atd. Soubor footer.xml – obsahuje z´apat´ı dokumentu. M˚ uˇze jich b´ yt v´ıce, odliˇsuj´ı se pak ˇc´ıslic´ı na konci n´azvu souboru, napˇr´ıklad footer1.xml, footer2.xml atd. Soubor footnotes.xml – obsahuje pozn´ amky pod ˇcarou. Soubor endnotes.xml – obsahuje vysvˇetlivky. Soubor comments.xml – obsahuje koment´ aˇre k dokumentu. Soubor fontTable.xml – obsahuje definice vˇsech font˚ u pouˇzit´ ych v dokumentu. Soubor webSettings.xml – obsahuje nastaven´ı pro web. Je v nˇem definov´ano, jak m´a b´ yt vyˇreˇsena situace, kdyˇz je dokument uloˇzen jako HTML.
Adres´aˇr m˚ uˇze m´ıt v´ıce ˇca´st´ı, neˇz je uvedeno v seznamu, nicm´enˇe poloˇzky vyjmenovan´e v seznamu se ve sloˇzce vyskytuj´ı nejˇcastˇeji. document.xml Soubor document.xml v sobˇe uchov´av´a tˇelo dokumentu, b´ yv´a tedy zpravidla nejd˚ uleˇzitˇejˇs´ı, a proto zde bude v kr´atkosti pˇredstavena jeho struktura. Koˇrenov´ ym elementem souboru je w:document, kter´ y m´a potomka w:body, jeˇz reprezentuje tˇelo dokumentu. Tˇelo dokumentu obsahuje bud’ element w:p pro odstavec, nebo w:sectPr pro sekci, nebo w:tbl pro tabulku. Pˇr´ıklad souboru document.xml pro uk´azkov´ y docx, kter´ y obsahuje pouze text Hello World!“: ” <w:document> <w:body> <w:p w:rsidR="00681FD7" w:rsidRDefault="00CA6612"> <w:r> <w:t>Hello world! 8
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
9
<w:sectPr w:rsidR="00681FD7" w:rsidSect="001B6127"> <w:pgSz w:w="11906" w:h="16838"/> <w:pgMar w:top="1417" w:right="1417" w:bottom="1417" w:left="1417" w:header="708" w:footer="708" w:gutter="0"/> <w:cols w:space="708"/> <w:docGrid w:linePitch="360"/> Ze souboru byly odstranˇeny definice jmenn´ ych prostor˚ u z elementu w:document kv˚ uli vˇetˇs´ı pˇrehlednosti. Text odstavce b´ yv´a rozdˇelen do jednoho nebo v´ıce takzvan´ ych runs, kter´e reprezentuje element w:r. Tyto runs obsahuj´ı textov´e elementy w:t. V sekci jsou nadefinov´any rozmˇery str´anky v elementu w:pgSz a okraje str´anky v elementu w:pgMar.
2.2.3
Form´ at ODT
Form´at pro ukl´ad´an´ı textov´ ych dokument˚ u odt je souˇca´st´ı Open Document Format (d´ale jen ODF), kter´ y vyv´ıj´ı spoleˇcnost Organization for the Advancement of Structured Information Standards (d´ale jen OASIS). ODF je souborov´ y form´at pro dokumenty vytvoˇren´e kancel´aˇrsk´ ymi aplikacemi. ODF je zaloˇzen na XML. Informace o ODF dokumentu (obsah, form´atov´an´ı) jsou tedy uchov´av´any v XML souborech, kter´e jsou uloˇzeny v JAR archivu. JAR soubor je komprimovan´ y ZIP archiv, proto m˚ uˇze uˇzivatel pouˇz´ıt jak´ ykoliv standardn´ı n´astroj pro rozbalen´ı ZIP archivu a prohl´ednout si pˇr´ımo XML soubory s obsahem a form´atov´an´ım ODF dokumentu. Svˇetovˇe nejpouˇz´ıvanˇejˇs´ımi rozˇs´ıˇren´ımi ODF jsou n´asleduj´ıc´ı form´aty [10]: .odt – textov´e procesory, .ods – tabulkov´e procesory, .odp – prezentace, .odb – datab´aze, .odg – grafika, .odf – matematick´e rovnice.
Vˇsechna rozˇs´ıˇren´ı ODF maj´ı v JAR archivu n´asleduj´ıc´ı strukturu [9]: Soubor mimetype – obsahuje jeden ˇr´adek textu, kter´ y urˇcuje MIME (Multi-Purpose Internet Mail Extensions). Textov´ y dokument odt m´a n´asleduj´ıc´ı MIME typ: application/vnd.oasis.opendocument.text
9
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
10
Soubor content.xml – obsah dokumentu. Soubor styles.xml – obsahuje informace o stylech pouˇzit´ ych v dokumentu. Obsah a styl (prezentace) jsou oddˇeleny do dvou r˚ uzn´ ych soubor˚ u za u ´ˇcelem zv´ yˇsen´ı flexibility. Soubor meta.xml – meta-informace o obsahu dokumentu, napˇr´ıklad jm´eno autora, ˇcas posledn´ı u ´pravy, ˇcas vzniku atd. Soubor settings.xml – obsahuje specifick´e informace o aplikaci, ve kter´e dokument vznikl. U textov´eho dokumentu je to napˇr´ıklad stanoven´ı, jestli maj´ı b´ yt z´ahlav´ı a z´apat´ı zobrazena nebo ne. Adres´ aˇ r META-INF – obsahuje soubor manifest.xml.
– Soubor manifest.xml – jsou v nˇem meta-informace o JAR archivu. Obsahuje seznam vˇsech ostatn´ıch soubor˚ u z JAR archivu. Tento soubor mus´ı v JAR archivu b´ yt pro otevˇren´ı dokumentu v OpenOffice.org. Nen´ı to manifest pouˇz´ıvan´ y v programovac´ım jazyce Java. Adres´ aˇ r Pictures – obsahuje obr´azky pouˇzit´e v dokumentu. Nˇekter´e textov´e procesory tuto sloˇzku vytvoˇr´ı pouze v pˇr´ıpadˇe, kdy dokument obr´azky skuteˇcnˇe obsahuje, nˇekter´e ji naopak vytvoˇr´ı pokaˇzd´e. Adres´ aˇ r Thumbnails – obsahuje PNG soubor s n´ahledem dokumentu.
content.xml Soubor content.xml v sobˇe uchov´av´a obsah dokumentu, coˇz je zpravidla ta nejd˚ uleˇzitˇejˇs´ı ˇc´ast dokumentu, a proto zde bude pˇredstavena jeho struktura. U vˇsech typ˚ u ODF m´a content.xml n´asleduj´ıc´ı strukturu:
10
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
11
Uk´azka struktury souboru byla pˇrevzata z [9]. Koˇrenov´ ym elementem je office:document, v nˇemˇz jsou definov´any vˇsechny jmenn´e prostory, kter´e jsou pouˇzity v dokumentu. Potomek office:scripts se v souboru vyskytuje pouze v pˇr´ıpadˇe, ˇze byla v dokumentu pouˇzita makra. Potomek office:font-face-decls popisuje fonty pouˇzit´e v dokumentu. Stejn´a informace je k dispozici v souboru styles.xml. V elementu office:automatic-styles jsou definice automatick´ ych styl˚ u, kter´e obsahuj´ı odkazy na styly v souboru styles.xml. Posledn´ı potomkem je element w:body, jenˇz je povinn´ y a nejd˚ uleˇzitˇejˇs´ı, protoˇze obsahuje tˇelo dokumentu [9]. U odt dokument˚ u je prvn´ım potomkem body elementu office:text, kter´ y urˇcuje, ˇze se jedn´a o textov´ y dokument. Potomky tohoto textov´eho elementu b´ yvaj´ı nejˇcastˇeji text:p, jenˇz definuje odstavec, text:h, jenˇz definuje z´ahlav´ı, a table:table, kter´ y definuje tabulku.
11
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
2.3
12
Knihovny pro zpracov´ an´ı dokument˚ u
Pro realizaci programu, kter´ y bude kontrolovat form´aln´ı pravidla dle zad´an´ı, byl zvolen programovac´ı jazyk Java. Bylo tedy zapotˇreb´ı naj´ıt a vybrat knihovny pro tento jazyk, kter´e um´ı form´aty pˇredstaven´e v 2.2 naˇc´ıst a zpracovat. Bˇehem hled´an´ı a analyzov´an´ı knihoven se podaˇrilo nal´ezt jen jednu, kter´a by byla schopn´a zpracovat vˇsechny form´aty, ta ovˇsem byla placen´a. Ostatn´ı knihovny umˇely pracovat vˇzdy pouze s jedn´ım form´atem. Je to celkem pochopiteln´e vzhledem k rozd´ıl˚ um ve struktuˇre jednotliv´ ych form´at˚ u. Bylo tedy nutn´e naj´ıt zvl´aˇst’ knihovnu pro kaˇzd´ y form´at. Pˇri hled´an´ı knihoven jich bylo vyzkouˇseno ˇsest: Apache POI – zahrnuje dvˇe knihovny.
– HWPF – um´ı zpracovat doc dokumenty. – XWPF – um´ı zpracovat docx dokumenty. DOCX4J – um´ı zpracovat docx. ODFDOM – zpracov´ av´a OpenDocument form´at. Aspose.Words – dok´azala by zpracovat vˇsechny poˇzadovan´e form´ aty, ale je placen´a, coˇz se pro pouˇzit´ı v r´amci diplomov´e pr´ace nehod´ı. jOpenDocument – um´ı zpracovat OpenDocument form´ at.
Jiˇz po otestov´an´ı na nˇekolika z´akladn´ıch dokumentech bylo jasn´e, kter´e knihovny budou pro tento projekt vhodn´e. Ty budou pops´any v n´asleduj´ıc´ıch dvou kapitol´ach.
2.3.1
Apache POI
Cel´ y n´azev knihovny zn´ı Apache POI - the Java API for Microsoft Documents. Jak n´azev naznaˇcuje, knihovna obsahuje komponenty pro zpracov´an´ı vˇsech typ˚ u dokument˚ u Microsoft Office. Vyv´ıj´ı ji Apache Software Foundation [11]. Pro tuto diplomovou pr´aci byla knihovna Apache POI vybr´ana, protoˇze obsahuje dvˇe komponenty, kter´e um´ı zpracovat dokumenty z programu MS Word. Jedn´a se o komponenty HWPF pro doc dokumenty a XWPF pro docx dokumenty. V´ yhodou knihovny je, ˇze obˇe komponenty, aˇckoliv kaˇzd´a pracuje s jin´ ym form´atem dokumentu, maj´ı podobn´e API. Je tak snazˇs´ı pouˇz´ıvat dvˇe komponenty, kter´e maj´ı podobn´a API, neˇz pouˇz´ıvat u ´plnˇe odliˇsn´e knihovny. Dalˇs´ı v´ yhodou knihovny byly pˇrehledn´e n´avody pro pr´aci s komponentami a podrobn´a dokumentace k API. Nejnovˇejˇs´ı plnou verz´ı knihovny je Apache POI 3.11. V n´asleduj´ıc´ıch dvou ˇca´stech budou pops´any jednotliv´e komponenty knihovny pro zpracov´an´ı dokument˚ u z MS Word. 12
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
13
HWPF Z´akladn´ı tˇr´ıdy pro pr´aci s komponentou HWPF jsou: HWPFDocument – jedn´a se o hlavn´ı reprezentaci naˇcten´eho dokumentu. Je souˇca´st´ı bal´ıku org.apache.poi.hwpf. WordExtractor – poskytuje metody pro z´ akladn´ı pr˚ uchod textu dokumentu. Je souˇc´ast´ı bal´ıku org.apache.poi.hwpf.extractor. Jako parametr konstruktoru se zad´av´a objekt HWPFDocument, ze kter´eho si tˇr´ıda z´ısk´a potˇrebn´ y textov´ y obsah. Pouˇz´ıv´a se pro pr˚ uchod odstavc˚ u dokumentu. Range – hlavn´ı tˇr´ıda objektov´eho modelu HWPF. Je souˇc´ast´ı bal´ıku org. apache.poi.hwpf.usermodel. Z objektu HWPFDocument se z´ısk´a pomoc´ı metody getRange(). D´a se pˇres n´ı pˇristupovat k odstavc˚ um, tabulk´am, sekc´ım a cel´emu obsahu dokumentu. Rovnˇeˇz m˚ uˇze b´ yt pouˇzita pro vkl´ad´an´ı nov´eho textu do dokumentu.
D˚ uleˇzit´ ymi bal´ıky jsou org.apache.poi.hwpf.model a org.apache.poi.hwpf.usermodel, kter´e obsahuj´ı tˇr´ıdy pro reprezentaci d´ılˇc´ıch ˇc´ast´ı dokumentu. Tyto bal´ıky obsahuj´ı napˇr´ıklad tˇr´ıdu Paragraph reprezentuj´ıc´ı odstavec, Section reprezentuj´ıc´ı sekci, Table reprezentuj´ıc´ı tabulku, CharacterRun reprezentuj´ıc´ı ˇca´st textu odstavce ˇci StyleSheet reprezentuj´ıc´ı styly dokumentu. XWPF Z´akladn´ı tˇr´ıdy pro pr´aci s komponentou XWPF jsou: XWPFDocument – jedn´a se o hlavn´ı reprezentaci naˇcten´eho dokumentu. Je souˇca´st´ı bal´ıku org.apache.poi.xwpf.usermodel. CTDocument1 – jde o n´ızko´ urovˇ novou reprezentaci dokumentu. Jedn´a se o odkaz na koˇrenov´ y element souboru document.xml popsan´ y v 2.2.2. Objekt XWPFDocument vrac´ı instanci t´eto tˇr´ıdy metodou getDocument(). Nen´ı pˇr´ımo souˇc´ast´ı komponenty, patˇr´ı do bal´ıku org.openxmlformats.schemas. wordprocessingml.x2006.main. Pˇr´ıklad pouˇzit´ı t´eto tˇr´ıdy je uveden pod t´ımto seznamem. POIXMLProperties – obsahuje souhrnn´e informace o dokumentu, jako jsou poˇcet stran nebo poˇcet slov. Je souˇca´st´ı bal´ıku org.apache.poi.
Pˇr´ıklad z´ısk´an´ı informace o prav´em a lev´em okraji str´anky pomoc´ı CTDocument1:
13
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
14
CTDocument1 documentCt = xwpfDoc.getDocument(); CTBody body = documentCt.getBody(); CTSectPr section = body.getSectPr(); CTPageMar margin = section.getPgMar(); double left = margin.getLeft().doubleValue(); double right = margin.getRight().doubleValue(); Uveden´ y pˇr´ıklad pˇr´ımo kop´ıruje strukturu souboru document.xml uvedenou v kapitole 2.2.2. Nejd˚ uleˇzitˇejˇs´ım bal´ıkem komponenty je org.apache.poi.xwpf.usermodel. Ten obsahuje d˚ uleˇzit´e tˇr´ıdy pro reprezentaci d´ılˇc´ıch ˇc´ast´ı dokumentu. Jedn´a se napˇr´ıklad o tˇr´ıdu XWPFParagraph reprezentuj´ıc´ı odstavec, XWPFTable reprezentuj´ıc´ı tabulku, XWPFHeader reprezentuj´ıc´ı z´ahlav´ı ˇci XWPFFooter reprezentuj´ıc´ı z´apat´ı.
2.3.2
ODFDOM
Knihovna ODFDOM je souˇca´st´ı Apache ODF Toolkit a vyv´ıj´ı ji Apache Software Foundation. Existuje jej´ı vysoko´ urovˇ nov´a abstrakce nazvan´a Simple Java API for ODF (d´ale jen Simple API), kter´a bude v diplomov´e pr´aci pouˇzita z´aroveˇ n s ODFDOM. Tato knihovna byla pro realizaci diplomov´e pr´aci vybr´ana kv˚ uli pˇrehledn´emu API, dostupn´ ym vzorov´ ym pˇr´ıklad˚ um a podrobn´e dokumentaci. C´ılem ODFDOM je poskytnout jednoduch´e API pro ˇcten´ı, vytv´aˇren´ı a u ´pravu ODF dokument˚ u. Proto je API rozdˇeleno do dvou vrstev, jak je zn´azornˇeno na obr´azku 2.2.
Obr´azek 2.2: Vrstvy ODFDOM knihovny
14
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
15
Popis jednotliv´ ych vrstev knihovny [12]: ODF Package Layer – poskytuje pˇr´ıstup ke vˇsem zdroj˚ um v archivu ODF dokumentu, jako jsou XML soubory nebo obr´azky. Jeho u ´kolem je rozbalit (v pˇr´ıpadˇe naˇc´ıt´an´ı) ˇci zabalit (v pˇr´ıpad ukl´ad´an´ı) soubory do ZIP archivu, kter´ y reprezentuje ODF dokument. ODF XML Layer – poskytuje pˇr´ıstup ke vˇsem vlastnostem dokumentu, jako je form´atov´an´ı, obsah atd.
– ODF DOM API – n´ızko´ urovˇ nov´ y pˇr´ıstup. Pracuje pˇr´ımo s XML soubory z ODF archivu pomoc´ı W3C DOM API (Document Object Model). Pro kaˇzd´ y XML element a atribut, kter´ y se v ODF archivu vyskytuje, je definov´ana tˇr´ıda. Toto API kompletnˇe pokr´ yv´a celou ODF specifikaci. – ODF Document API – vysoko´ urovˇ nov´ y pˇr´ıstup. Jeho pouˇzit´ı by mˇelo b´ yt pˇrehlednˇejˇs´ı, protoˇze se snaˇz´ı oddˇelit uˇzivatele od detail˚ u XML implementace, se kter´ ymi se pˇr´ımo pracuje v ODF DOM API.
Simple API Tato komponenta je vysoko´ urovˇ novou abstrakc´ı knihovny ODFDOM. Nahrazuje vrstvu ODF Document API, m´a ˇsirˇs´ı moˇznosti vyuˇzit´ı. Jej´ı v´ yhodou je jednoduch´e pouˇzit´ı na z´akladn´ıch operac´ıch s dokumentem. Jelikoˇz jde o abstrakci ODFDOM, je moˇzn´e pouˇz´ıvat obˇe komponenty spoleˇcnˇe. Tam kde vysoko´ urovˇ nov´ y pˇr´ıstup Simple API nestaˇc´ı, d´a se pouˇz´ıt n´ızko´ urovˇ nov´ y pˇr´ıstup ODFDOM. D´ıky tomu je knihovna ODFDOM v kombinaci s komponentou Simple API velice uˇziteˇcn´ ym n´astrojem, s jehoˇz pomoc´ı se d´a z´ıskat t´emˇeˇr jak´akoliv informace o dokumentu nebo prov´est t´emˇeˇr jak´akoliv jeho u ´prava. Z´akladn´ı tˇr´ıdy pro pr´aci s knihovnou Simple API jsou: TextDocument – jedn´a se o z´ akladn´ı reprezentaci odt dokumentu. DocumentStatistic – uchov´av´ a informace o dokumentu, jako jsou poˇcet stran nebo poˇcet slov. OdfContentDom – tato tˇr´ıda patˇr´ı do ODF DOM API a reprezentuje stromovou strukturu souboru content.xml vytvoˇrenou pomoc´ı DOM. Objekt tˇr´ıdy TextDocument vrac´ı instanci t´eto tˇr´ıdy metodou getContentDom(). Pouˇz´ıv´a se v situac´ıch, kdy je potˇreba pouˇz´ıt n´ızko´ urovˇ nov´ y pˇr´ıstup. OdfStylesDom – tato tˇr´ıda patˇr´ı do ODF DOM API a reprezentuje stromovou strukturu souboru styles.xml vytvoˇrenou pomoc´ı DOM. Objekt tˇr´ıdy TextDocument vrac´ı instanci t´eto tˇr´ıdy metodou getStylesDom().
15
ˇ ´ ´ICH PRAVIDEL KAPITOLA 2. MOZNOSTI KONTROLY FORMALN
16
Pro pouˇzit´ı knihovny Simple API je zapotˇreb´ı naimportovat n´asleduj´ıc´ı tˇri JAR archivy: Simple ODF 0.6.6 – bal´ık se Simple API. ODFDOM 0.8.7 – bal´ık s ODFDOM. Apache Xerces 2.9.1 nebo vyˇ sˇ s´ı – bal´ık s knihovnou Xerces, kter´a um´ı zpracov´avat XML dokumenty.
16
3 Mnoˇzina kontrolovan´ych pravidel V t´eto kapitole bude pˇredstavena mnoˇzina form´aln´ıch pravidel, kter´a bude v´ ysledn´ y program kontrolovat. Form´aln´ı pravidla jsou takov´a pravidla, kter´a se zab´ yvaj´ı kontrolou obsahu, struktury a form´atov´an´ı dokumentu. Sestaven´ı mnoˇziny kontrolovan´ ych pravidel pˇredch´azela d˚ ukladn´a anal´ yza knihoven vybran´ ych v kapitole 2.3. Mnoˇzina pravidel totiˇz mus´ı b´ yt pro vˇsechny tˇri form´aty dokument˚ u shodn´a. Bylo tedy zapotˇreb´ı zanalyzovat, jak´e vlastnosti dokumentu se daj´ı jednotliv´ ymi knihovnami zjistit a otestovat. V´ ysledkem anal´ yzy a diskuze s vedouc´ım diplomov´e pr´ace o jeho poˇzadavc´ıch ohlednˇe kontroly pravidel bylo sestaven´ı fin´aln´ı mnoˇziny s jeden´acti form´aln´ımi pravidly, kter´a budou v t´eto kapitole spoleˇcnˇe s jejich parametry pˇredstavena. Rovnˇeˇz bude pops´ano, jak se budou pravidla pomoc´ı jednotliv´ ych knihoven kontrolovat. U nˇekter´ ych pravidel bude popis kontroly doplnˇen uk´azkov´ ym u ´sekem k´odu. U pravidel, kde uk´azka k´odu chyb´ı, je d˚ uvodem u ´spora m´ısta, protoˇze se jednalo o delˇs´ı ˇca´sti k´odu.
3.1
Poˇ cet slov
Pravidlo bude kontrolovat poˇcet slov v cel´em dokumentu. Parametr limit Celoˇc´ıseln´ y u ´daj, kter´ y je jedin´ ym parametrem tohoto pravidla. V r´amci kontroly pravidla bude porovn´an poˇcet slov v dokumentu se zadan´ ym limitem. Uˇzivatel bude programem informov´an, zdali doˇslo k pˇrekroˇcen´ı limitu ˇci byl splnˇen. Parametr mus´ı b´ yt zad´an pr´avˇe jednou. Kontrola u DOC Z hlavn´ı reprezentace doc dokumentu, objektu tˇr´ıdy HWPFDocument, se z´ısk´a instance tˇr´ıdy SummaryInformation, kter´a m´a v sobˇe uchovanou informaci o poˇctu ˇ ast k´odu, jeˇz zjiˇst’uje poˇcet slov dokumentu, je uvedena zde: slov. C´ SummaryInformation summary = hwpfDoc.getSummaryInformation(); int wordCount = summary.getWordCount();
17
ˇ ´ KAPITOLA 3. MNOZINA KONTROLOVANYCH PRAVIDEL
18
Kontrola u DOCX Z hlavn´ı reprezentace docx dokumentu, objektu tˇr´ıdy XWPFDocument, se z´ısk´a instance tˇr´ıdy POIXMLProperties, kter´a v sobˇe uchov´av´a objekt tˇr´ıdy Exˇ ast tendedProperties. Tento objekt v sobˇe m´a uloˇzenou informaci o poˇctu slov. C´ k´odu, jeˇz zjiˇst’uje poˇcet slov dokumentu, je uvedena zde: POIXMLProperties prop = xwpfDoc.getProperties(); int wordsCount = prop.getExtendedProperties().getWords();
Kontrola u ODT Z hlavn´ı reprezentace odt dokumentu, objektu tˇr´ıdy TextDocument, se z´ısk´a instance tˇr´ıdy Meta, kter´a v sobˇe uchov´av´a meta-informace o dokumentu. Z t´eto instance se z´ısk´a objekt tˇr´ıdy DocumentStatistic, jenˇz v sobˇe m´a uloˇzenou inforˇ ast k´odu, kter´a zjiˇst’uje poˇcet slov dokumentu, je uvedena maci o poˇctu slov. C´ zde: Meta meta = odtDoc.getOfficeMetadata(); DocumentStatistic stat = meta.getDocumentStatistic(); int wordCount = stat.getWordCount();
3.2
Poˇ cet stran
Pravidlo bude kontrolovat poˇcet stran cel´eho dokumentu. Parametr limit Celoˇc´ıseln´ yu ´daj, kter´ y je jedin´ ym parametrem tohoto pravidla. V r´amci kontroly pravidla bude porovn´an poˇcet stran dokumentu se zadan´ ym limitem. Uˇzivatel bude programem informov´an, zdali doˇslo k pˇrekroˇcen´ı limitu ˇci byl splnˇen. Parametr mus´ı b´ yt zad´an pr´avˇe jednou. Kontrola u DOC Z hlavn´ı reprezentace doc dokumentu, objektu tˇr´ıdy HWPFDocument, se z´ısk´a instance tˇr´ıdy SummaryInformation, kter´a m´a v sobˇe uchovanou informaci o poˇctu ˇ ast k´odu, jeˇz zjiˇst’uje poˇcet stran dokumentu, je uvedena zde: stran. C´
18
ˇ ´ KAPITOLA 3. MNOZINA KONTROLOVANYCH PRAVIDEL
19
SummaryInformation summary = hwpfDoc.getSummaryInformation(); int pageCount = summary.getPageCount();
Kontrola u DOCX Z hlavn´ı reprezentace docx dokumentu, objektu tˇr´ıdy XWPFDocument, se z´ısk´a instance tˇr´ıdy POIXMLProperties, kter´a v sobˇe uchov´av´a objekt tˇr´ıdy Exˇ ast tendedProperties. Tento objekt v sobˇe m´a uloˇzenou informaci o poˇctu stran. C´ k´odu, jeˇz zjiˇst’uje poˇcet stran dokumentu, je uvedena zde: POIXMLProperties prop = xwpfDoc.getProperties(); int pageCount = prop.getExtendedProperties().getPages();
Kontrola u ODT Z hlavn´ı reprezentace odt dokumentu, objektu tˇr´ıdy TextDocument, se z´ısk´a instance tˇr´ıdy Meta, kter´a v sobˇe uchov´av´a meta-informace o dokumentu. Z t´eto instance se z´ısk´a objekt tˇr´ıdy DocumentStatistic, jenˇz v sobˇe m´a uloˇzenou inforˇ ast k´odu, kter´a zjiˇst’uje poˇcet stran dokumentu, je uvedena maci o poˇctu stran. C´ zde: Meta meta = odtDoc.getOfficeMetadata(); DocumentStatistic stat = meta.getDocumentStatistic(); int pageCount = stat.getPageCount();
3.3
Velikost ˇ r´ adkov´ an´ı
Pravidlo bude kontrolovat velikost ˇra´dkov´an´ı. Kontrola ˇr´adkov´an´ı bude provedena pro kaˇzd´ y odstavec dokumentu. Parametr value Re´aln´e ˇc´ıslo, kter´e je jedin´ ym parametrem tohoto pravidla. V r´amci kontroly pravidla bude u kaˇzd´eho odstavce porovn´ano zjiˇstˇen´e ˇra´dkov´an´ı se zadan´ ym parametrem value. U kaˇzd´eho odstavce bude uˇzivatel informov´an, zdali zjiˇstˇen´e ˇra´dkov´an´ı zadan´ y parametr pˇrekroˇcilo ˇci nikoliv. Parametr mus´ı b´ yt zad´an pr´avˇe jednou.
19
ˇ ´ KAPITOLA 3. MNOZINA KONTROLOVANYCH PRAVIDEL
20
Kontrola u DOC Kaˇzd´ y odstavce reprezentuje objekt tˇr´ıdy Paragraph. Tato tˇr´ıda m´a metodu getLineSpacing(), kter´a vrac´ı ˇretˇezec s informacemi o ˇra´dkov´an´ı. Zpracov´an´ım tohoto ˇretˇezce se z´ısk´a hodnota ˇra´dkov´an´ı dan´eho odstavce. Kontrola u DOCX ˇ adkov´an´ı je zjiˇst’ov´ano pˇr´ımo z XML souboru document.xml. Pro kaˇzd´ R´ y odstavec se z´ısk´a jeho element s n´azvem w:p z XML souboru a je testov´ano, zdali se mezi potomky vyskytuje element w:spacing s atributem w:line. Pokud se tento element mezi potomky vyskytuje, je hodnota ˇr´adkov´an´ı naˇctena z nˇej. Pokud element mezi potomky nen´ı, je hodnota ˇra´dkov´an´ı z´ısk´ana ze stylu odstavce. Kontrola u ODT U kaˇzd´eho odstavce je zjiˇst’ov´ano, jak´e m´a nastaveny instance OdfStyleProperty, coˇz je tˇr´ıda uchov´avaj´ıc´ı informace o stylu odstavc˚ u. Pokud m´a odstavec nastaven OdfStyleProperty se jm´enem fo:line-height, je ˇr´adkov´an´ı rovno hodnotˇe t´eto instance.
3.4
Okraje str´ anky
Pravidlo bude kontrolovat okraje str´anky dokumentu. Kontrola bude vˇzdy provedena pro vˇsechny ˇctyˇri strany – horn´ı, doln´ı, prav´ y a lev´ y okraj. Pokud je dokument rozdˇelen na odd´ıly, kter´e maj´ı odliˇsn´e okraje stran, budou zkontrolov´any vˇsechny odd´ıly. Parametr value Re´aln´e ˇc´ıslo, kter´e je jedin´ ym parametrem tohoto pravidla. V r´amci kontroly pravidla bude u kaˇzd´eho okraje porovn´ana zjiˇstˇen´a hodnota se zadan´ ym parametrem value. U kaˇzd´e strany bude uˇzivatel informov´an, zdali okraj zadan´ y parametr pˇrekroˇcil ˇci nikoliv. Parametr mus´ı b´ yt zad´an pr´avˇe jednou. Kontrola u DOC Informace o okraj´ıch str´anky je uchov´ana v objektu tˇr´ıdy Section. K sekc´ım
20
ˇ ´ KAPITOLA 3. MNOZINA KONTROLOVANYCH PRAVIDEL
21
se pˇristupuje pˇres hlavn´ı tˇr´ıdu objektov´eho modelu knihovny HWPF, coˇz je tˇr´ıda Range. Objekt t´eto tˇr´ıdy se z´ısk´a z hlavn´ı reprezentace dokumentu, z tˇr´ıdy HWPFDocument. Pokud dokument obsahuje v´ıce objekt˚ u tˇr´ıdy Section, jsou zkontˇ rolov´any okraje ve vˇsech tˇechto objektech. C´ast k´odu, kter´a zjiˇst’uje okraje stran dokumentu, je uvedena zde: Range range = hwpfDoc.getRange(); Section sec = range.getSection(0); double left = sec.getMarginLeft(); double right = sec.getMarginRight(); double top = sec.getMarginTop(); double bottom = sec.getMarginBottom();
Kontrola u DOCX K informaci o okraj´ıch str´anky se pˇristupuje pˇres tˇr´ıdu CTDocument1, coˇz je odkaz na koˇrenov´ y element XML souboru document.xml. Z nˇej se z´ısk´a postupnˇe odkaz na tˇelo dokumentu, pot´e na sekci a z n´ı na okraje str´anky. Pokud dokument ˇ ast k´odu, kter´a zjiˇst’uje obsahuje v´ıce sekc´ı, jsou zkontrolov´any okraje ve vˇsech. C´ okraje stran dokumentu, je uvedena zde: CTDocument1 documentCt = xwpfDoc.getDocument(); CTBody body = documentCt.getBody(); CTSectPr section = body.getSectPr(); CTPageMar margin = section.getPgMar(); double left = margin.getLeft().doubleValue(); double right = margin.getRight().doubleValue(); double top = margin.getTop().doubleValue(); double bottom = margin.getBottom().doubleValue();
Kontrola u ODT Informace o okraj´ıch str´anky je uloˇzena v souboru styles.xml. Pˇristupuje se k n´ı tedy pˇres objekt tˇr´ıdy OdfStylesDom. V souboru se najde element style:pagelayout, jenˇz m´a potomka style:page-layout-properties. Pokud je v dokumentu v´ıce element˚ u style:page-layout jsou zkontrolov´any okraje pro vˇsechny tyto elementy. A tento element m´a atributy, kter´e reprezentuj´ı jednotliv´e okraje str´anky.
21
ˇ ´ KAPITOLA 3. MNOZINA KONTROLOVANYCH PRAVIDEL
3.5
22
Uveden´ı jm´ ena
Pravidlo bude kontrolovat, zdali bylo v z´apat´ı ˇci z´ahlav´ı dokumentu uveden´e konkr´etn´ı jm´eno ˇci v´ıce jmen. Parametr text Textov´ y parametr, kter´ ym uˇzivatel zad´a, jak´e jm´eno ˇci jm´ena m´a program v dokumentu hledat. U kaˇzd´eho jm´ena zadan´eho jako parametr bude uˇzivatel informov´an, zdali bylo v z´ahlav´ı nebo z´apat´ı nalezeno. Pravidlo mus´ı m´ıt zadan´ y alespoˇ n jeden parametr. Kontrola u DOC Z hlavn´ı reprezentace dokumentu, objektu tˇr´ıdy HWPFDocument, se metodou getHeaderStoryRange() z´ısk´a objekt tˇr´ıdy Range, kter´ y v sobˇe m´a informace o z´ahlav´ı i z´apat´ı dokumentu. Z nˇej se z´ısk´a textov´ y obsah z´ahlav´ı a z´apat´ı, a ten se porovn´av´a s hledan´ ymi jm´eny. Kontrola u DOCX Hlavn´ı reprezentace dokumentu, objekt tˇr´ıdy XWPFDocument, m´a metody getHeaderList() a getFooterList(), kter´e vrac´ı seznam objekt˚ u XWPFHeader a XWPFFooter, jeˇz reprezentuj´ı vˇsechna z´ahlav´ı a z´apat´ı dokumentu. Ze seznam˚ u se z´ısk´a textov´ y obsah z´ahlav´ı a z´apat´ı a ten se porovn´a s hledan´ ymi jm´eny. Kontrola u ODT Hlavn´ı reprezentace dokumentu, objekt tˇr´ıdy TextDocument, m´a metody getHeader() a getFooter(), kter´e vracej´ı instance tˇr´ıd Header a Footer, coˇz jsou reprezentace z´ahlav´ı a z´apat´ı dokumentu. Z tˇechto instanc´ı se z´ısk´a textov´ y obsah z´ahlav´ı a z´apat´ı a ten se porovn´a s hledan´ ymi jm´eny.
22
ˇ ´ KAPITOLA 3. MNOZINA KONTROLOVANYCH PRAVIDEL
3.6
23
Uveden´ı data
Pravidlo bude kontrolovat, zdali bylo v z´apat´ı ˇci z´ahlav´ı uvedeno datum. Uˇzivatel si urˇc´ı pomoc´ı parametru, jak´e form´aty data m´a pravidlo kontrolovat. Parametr format T´ımto parametrem uˇzivatel urˇc´ı, jak´e form´aty data m´a pravidlo hledat. Parametr m˚ uˇze m´ıt n´asleduj´ıc´ı hodnoty: dd.MM.yyyy, dd-MM-yyyy, dd/MM/yyyy, yyyy/MM/dd, yyyy-MM-dd,
kde dd urˇcuje dny, MM mˇes´ıce a yyyy roky. Parametr mus´ı b´ yt zad´an alespoˇ n jeden, maxim´alnˇe m˚ uˇze b´ yt zad´an aˇz pˇetkr´at, protoˇze poˇzadovan´ ych form´at˚ u data je pˇet. U kaˇzd´eho parametru bude uˇzivatel informov´an, zdali byl datum v tomto form´atu nalezen ˇci nikoliv. Rovnˇeˇz budou vyps´ana konkr´etn´ı nalezen´a data, kter´a zadan´e form´aty splˇ nuj´ı. Kontrola Kontrola uveden´ı data v z´ahlav´ı a z´apat´ı bude u jednotliv´ ych form´at˚ u dokument˚ u prob´ıhat stejnˇe, jako bylo pops´ano v kapitole 3.5.
3.7
Pouˇ zit´ y font
Pravidlo bude kontrolovat, jak´ y font byl pouˇzit v jednotliv´ ych odstavc´ıch. Rovnˇeˇz bude zjiˇst’ovat, jakou maj´ı jednotliv´e odstavce velikost fontu. Parametr requiredFont Jedn´a se o parametr, kter´ y reprezentuje poˇzadovan´ y font. Obsahuje dalˇs´ı dva parametry, name a size. Prvn´ı je ˇretˇezec a reprezentuje n´azev poˇzadovan´eho fontu a druh´ y je re´aln´e ˇc´ıslo, kter´e urˇcuje poˇzadovano velikost fontu. U kaˇzd´eho odstavce
23
ˇ ´ KAPITOLA 3. MNOZINA KONTROLOVANYCH PRAVIDEL
24
bude uˇzivatel programem informov´an, zdali pouˇzit´ y font a jeho velikost patˇr´ı mezi poˇzadovan´e ˇci nikoliv. Pravidlo mus´ı m´ıt zadan´ y alespoˇ n jeden tento parametr. Kontrola u DOC Text odstavce je uloˇzen v objektu tˇr´ıdy CharacterRun. Tento objekt m´a metody getFontSize() a getFontName(), kter´e vrac´ı velikost fontu a jeho n´azev. Kontrola u DOCX Text odstavce je uloˇzen v objektu tˇr´ıdy XWPFRun. Tento objekt m´a metody getFontSize() a getFontFamily(), kter´e vrac´ı velikost fontu a jeho n´azev. V pˇr´ıpadˇe, ˇze odstavec pˇreb´ır´a font a jeho velikost od stylu, kter´ y m´a nastaven´ y, vrac´ı metody 0, respektive null. V takov´em pˇr´ıpadˇe se font a velikost odstavce nastav´ı podle jeho stylu. Kontrola u ODT U kaˇzd´eho odstavce je zjiˇst’ov´ano, jak´e m´a nastaveny instance OdfStyleProperty, coˇz je tˇr´ıda uchov´avaj´ıc´ı informace o stylu odstavc˚ u. Pokud m´a odstavec nastaven OdfStyleProperty se jm´enem fo:font-size a style:font-name, jsou velikost fontu a jeho n´azev rovny hodnot´am tˇechto instanc´ı. Pokud tyto instance nem´a odstavec nastaveny, nastav´ı se font a jeho velikost podle stylu odstavce.
3.8
Pouˇ zit´ı konkr´ etn´ıho nadpisu
Pravidlo bude kontrolovat, zdali je v dokumentu pouˇzit nadpis ˇci nadpisy poˇzadovan´e uˇzivatelem. Parametr text Textov´ y parametr, kter´ ym uˇzivatel zad´a, jak´e nadpisy m´a program v dokumentu hledat. Uˇzivatele bude program u kaˇzd´eho hledan´eho nadpisu informovat, zdali se v dokumentu vyskytuje ˇci nikoliv. Pravidlo mus´ı m´ıt zadan´ y alespoˇ n jeden parametr.
24
ˇ ´ KAPITOLA 3. MNOZINA KONTROLOVANYCH PRAVIDEL
25
Kontrola u DOC U objektu odstavce Paragraph lze pomoc´ı metody getStyleIndex() z´ıskat index stylu, kter´ y m´a odstavec nastaven´ y. Z hlavn´ı reprezentace dokumentu, objektu tˇr´ıdy HWPFDocument, se metodou getStyleSheet() z´ısk´a objekt tˇr´ıdy StyleSheet, kter´ y zahrnuje vˇsechny styly pouˇzit´e v dokumentu. Mezi tˇemito styly se najde ten, jenˇz m´a shodn´ y index s indexem stylu odstavce, zjist´ı se jeho jm´eno a otestuje se, zdali jm´eno obsahuje slova Nadpis nebo Heading, kter´a reprezentuj´ı styly pro nadpisy. Pokud ano, jedn´a se o nadpis a jeho text m˚ uˇze b´ yt porovn´an s poˇzadovan´ ymi nadpisy. Kontrola u DOCX Z objektu odstavce Paragraph se d´a z´ıskat n´azev jeho stylu pomoc´ı metody getStyle(). N´azev stylu odstavce je pot´e zkontrolov´an stejnˇe jako je pops´ano u kontroly doc. Kontrola u ODT Z objektu odstavce Paragraph se d´a z´ıskat n´azev jeho stylu pomoc´ı metody getStyleName(). N´azev stylu je pot´e zkontrolov´an stejnˇe, jako je pops´ano u kontroly doc.
3.9
Pouˇ zit´ı odkaz˚ u na literaturu
Pravidlo bude kontrolovat, zda je v dokumentu vygenerovan´ y seznam pouˇzit´e literatury, a kolik tento seznam obsahuje poloˇzek. Tak´e bude kontrolovat, zdali je v dokumentu nadpis, kter´ y odpov´ıd´a uˇzivatelem poˇzadovan´emu n´azvu sekce s literaturou. Parametr text Textov´ y parametr, kter´ y m´a reprezentovat n´azev sekce s literaturou. Program tedy bude proch´azet nadpisy dokumentu a bude ovˇeˇrovat, zdali se mezi nimi nach´az´ı poˇzadovan´ y n´azev sekce. U kaˇzd´eho poˇzadovan´eho n´azvu bude uˇzivatel informov´an, zdali se v dokumentu nach´az´ı nebo ne. Pravidlo mus´ı m´ıt zadan´ y alespoˇ n jeden textov´ y parametr.
25
ˇ ´ KAPITOLA 3. MNOZINA KONTROLOVANYCH PRAVIDEL
26
Parametr limit Celoˇc´ıseln´ y parametr, kter´ y m˚ uˇze uˇzivatel zadat jen jednou. Jedn´a se o limit vygenerovan´ ych poˇct˚ u odkaz˚ u na literaturu. Zjiˇstˇen´ y poˇcet poloˇzek literatury program porovn´a s limitem a informuje uˇzivatele o tom, zdali byl limit dosaˇzen ˇci nikoliv. Kontrola u DOC Kontrola existence nadpisu s konkr´etn´ım n´azvem probˇehne stejnˇe jako je pops´ano v 3.8. Pro zjiˇstˇen´ı poˇctu poloˇzek v seznamu literatury se proch´az´ı jednotliv´e odstavce a kontroluje se jejich styl podobnˇe jako v 3.8. Pokud je n´azev stylu odstavce Bibliografie, je ˇc´ıtaˇc poloˇzek inkrementov´an, protoˇze se jedn´a o vygenerovan´ y odkaz na literaturu. Kontrola u DOCX V XML souboru document.xml je vygenerovan´ y seznam literatury uloˇzen v elementu sdt. Je tedy zapotˇreb´ı proch´azet vˇsechny potomky tohoto uzlu a naj´ıt potomka s n´azvem sekce s literaturou a tento n´azev pot´e otestovat s poˇzadovan´ ymi n´azvy. Poloˇzky literatury jsou uloˇzeny v tabulce. Je tedy zapotˇreb´ı tuto tabulku mezi potomky uzlu sdt naj´ıt a zjistit poˇcet jej´ıch ˇra´dk˚ u, kter´ y je roven poˇctu odkaz˚ u na literaturu. Kontrola u ODT Vygenerovan´ y seznam literatury je v dokumentu content.xml uloˇzen v elementu text:bibliography. Mezi jeho potomky je nutn´e nal´ezt element s n´azvem text:index. Ten m´a potomka text:index-title, kter´ y obsahuje n´azev sekce s literaturou a d´ale m´a potomky text:p reprezentuj´ıc´ı odstavce, kter´e obsahuj´ı jednotliv´e poloˇzky literatury. Poˇcet tˇechto odstavc˚ u je tedy roven poˇctu odkaz˚ u na literaturu.
26
ˇ ´ KAPITOLA 3. MNOZINA KONTROLOVANYCH PRAVIDEL
3.10
27
Pouˇ zit´ı konkr´ etn´ıho textu
Pravidlo bude kontrolovat, zdali se v dokumentu vyskytuje urˇcit´ yu ´sek ˇci u ´seky textu poˇzadovan´e uˇzivatelem. Parametr text Textov´ y parametr, kter´ ym uˇzivatel urˇc´ı, jak´ y konkr´etn´ı text m´a program v dokumentu hledat. U kaˇzd´eho hledan´eho u ´seku textu bude uˇzivatel informov´an, zdali se text v dokumentu vyskytuje ˇci nikoliv. Pravidlo mus´ı m´ıt zadan´ y alespoˇ n jeden parametr. Kontrola u DOC Text jednotliv´ ych odstavc˚ u se z´ısk´a pomoc´ı objektu tˇr´ıdy WordExtractor. Tato tˇr´ıda m´a metodu getParagraphText(), kter´a vrac´ı pole ˇretˇezc˚ u, kde jeden ˇretˇezec z pole je textov´ y obsah jednoho odstavce. Takto se z´ısk´a kompletn´ı textov´ y obsah dokumentu, jenˇz pak m˚ uˇze b´ yt porovn´av´an se zadan´ ymi parametry. Kontrola u DOCX Tˇr´ıda reprezentuj´ıc´ı odstavec Paragraph m´a metodu getText(), jeˇz vrac´ı textov´ y obsah odstavce. Pomoc´ı t´eto metody se z´ısk´a kompletn´ı textov´ y obsah dokumentu, kter´ y pak m˚ uˇze b´ yt porovn´av´an se zadan´ ymi parametry. Kontrola u ODT Tˇr´ıda reprezentuj´ıc´ı odstavec Paragraph m´a metodu getTextContent(), jeˇz vrac´ı textov´ y obsah dan´eho odstavce. Pomoc´ı t´eto metody se z´ısk´a kompletn´ı textov´ y obsah dokumentu, kter´ y pak m˚ uˇze b´ yt porovn´av´an se zadan´ ymi parametry.
27
ˇ ´ KAPITOLA 3. MNOZINA KONTROLOVANYCH PRAVIDEL
3.11
28
Pouˇ zit´ı ˇ c´ıslov´ an´ı stran
Pravidlo bude kontrolovat, zdali se v z´ahlav´ı nebo z´apat´ı dokumentu vyskytuje ˇc´ıslov´an´ı stran. Toto pravidlo nem´a ˇz´adn´ y parametr. Uˇzivatel bude program informov´an, zdali bylo ˇc´ıslov´an´ı v z´ahlav´ı nebo z´apat´ı nalezeno ˇci nikoliv. Kontrola u DOC a DOCX Kontrola obsahu z´ahlav´ı a z´apat´ı prob´ıh´a stejnˇe jako je pops´ano v kapitole 3.5. V textu z´ahlav´ı a z´apat´ı je hled´an ˇretˇezec PAGE \* MERGEFORMAT, kter´ y u obou form´at˚ u oznaˇcuje pouˇzit´ı ˇc´ıslov´an´ı str´anek. Kontrola u ODT V XML souboru je hled´an element text:page-number, kter´ y znaˇc´ı, ˇze v z´ahlav´ı nebo z´apat´ı bylo pouˇzito ˇc´ıslov´an´ı str´anek.
28
4 XML soubor pro zad´an´ı pravidel V kapitole 3 byla pˇredstavena mnoˇzina form´aln´ıch pravidel, kter´a bude fin´aln´ı program vytvoˇren´ y v r´amci t´eto diplomov´e pr´ace kontrolovat. Program nebude pokaˇzd´e kontrolovat vˇsechna pravidla, ale pouze ta, jejichˇz kontrolu bude uˇzivatel poˇzadovat. K zad´an´ı uˇzivatelem poˇzadovan´ ych pravidel a nastaven´ı jejich parametr˚ u bude slouˇzit XML soubor. Struktura XML souboru a zp˚ usob definov´an´ı jednotliv´ ych poˇzadovan´ ych pravidel budou pops´any v t´eto kapitole. V´ ystupem programu bude rovnˇeˇz XML soubor, kter´ y vznikne u ´pravou vstupn´ıho XML. Aby v´ ysledn´ y program vytvoˇren´ y v r´amci t´eto diplomov´e pr´ace mohl XML soubory zpracov´avat, bylo nutn´e naj´ıt vhodn´ y XML parser pro programovac´ı jazyk Java. Anal´ yze parser˚ u a v´ ybˇeru konkr´etn´ıho n´astroje se rovnˇeˇz vˇenuje tato kapitola. V t´eto kapitole bude tak´e pops´ana validace vstupn´ıho XML souboru prostˇrednictv´ım XML sch´ematu.
4.1
Struktura XML soubor˚ u
Program bude pracovat se dvˇema XML soubory. Jeden bude vstupn´ı a bude slouˇzit pro zad´av´an´ı pravidel. Druh´ y bude v´ ystupn´ı, program bude prostˇrednictv´ım tohoto souboru informovat uˇzivatele o v´ ysledc´ıch kontroly pravidel. V t´eto kapitole budou pˇredstaveny elementy pouˇzit´e ve vstupn´ım a v´ ystupn´ım XML souboru a jejich vz´ajemn´e propojen´ı. Hlavn´ımi elementy obou XML soubor˚ u jsou: rules – jedn´ a se o koˇrenov´ y element XML souboru. Zahrnuje vˇsechna zadan´a pravidla. Jeho potomci jsou elementy rule. rule – element reprezentuj´ıc´ı jednotliv´ a pravidla. Je vˇzdy potomkem koˇrenov´eho elementu rules. M´a vˇzdy jen jednoho potomka, kter´ y definuje, o jak´e konkr´etn´ı pravidlo se jedn´a.
4.1.1
Vstupn´ı soubor
V t´eto ˇc´asti bude pops´ano, jak se ve vstupn´ım XML souboru definuj´ı jednotliv´a pravidla v r´amci elementu rule. U kaˇzd´eho pravidla bude uveden n´azev elementu, kter´ y pravidlo deklaruje, elementy pro nastaven´ı parametr˚ u pravidla a konkr´etn´ı pˇr´ıklad definice pravidla.
29
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
30
Poˇ cet slov Element, kter´ y definuje toto pravidlo, se jmenuje words. M˚ uˇze m´ıt jednoho potomka, kter´ y definuje parametr pravidla. Toto pravidlo m´a celoˇc´ıseln´ y parametr, jenˇz reprezentuje element limit. Element mus´ı b´ yt uveden pr´avˇe jednou. Pˇr´ıklad definice pravidla:
<words> 1100
Poˇ cet stran Element, kter´ y definuje toto pravidlo, m´a jm´eno pages. Mus´ı m´ıt jednoho potomka, kter´ y definuje parametr pravidla. Jedn´a se o celoˇc´ıseln´ y parametr, jenˇz reprezentuje element limit. Element mus´ı b´ yt uveden pr´avˇe jednou. Pˇr´ıklad definice pravidla:
<pages> 3
Velikost ˇ r´ adkov´ an´ı Element, kter´ y definuje toto pravidlo, m´a jm´eno lines. Mus´ı m´ıt jednoho potomka, jenˇz definuje parametr pravidla. Jedn´a se o re´aln´e ˇc´ıslo, kter´e reprezentuje element s n´azvem value. Parametr mus´ı b´ yt uveden pr´avˇe jednou. Pˇr´ıklad definice pravidla:
1.1
30
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
31
Okraje str´ anky Element, kter´ y definuje toto pravidlo, se jmenuje margin. Mus´ı m´ıt jednoho potomka, jenˇz definuje parametr pravidla. Jedn´a se o re´aln´e ˇc´ıslo, kter´e reprezentuje element s n´azvem value. Parametr mus´ı b´ yt uveden pr´avˇe jednou. Pˇr´ıklad definice pravidla:
<margin> 1.5
Uveden´ı jm´ ena Element, jenˇz definuje toto pravidlo, m´a jm´eno name. M˚ uˇze m´ıt nˇekolik potomk˚ u, kteˇr´ı definuj´ı parametr pravidla. Jedn´a se o textov´e parametry, kter´e reprezentuje element s n´azvem text. Tento element obsahuje ˇretˇezec, jenˇz urˇcuje hodnotu jednoho parametru. Pravidlo mus´ı m´ıt vˇzdy alespoˇ n jeden parametr. Pˇr´ıklad definice pravidla:
Ondˇ rej Kupil´ ık Martin Majer Marek Puˇ cel´ ık
Uveden´ı data Element definuj´ıc´ı toto pravidlo, se jmenuje date. M˚ uˇze m´ıt nˇekolik potomk˚ u. Jedn´a se pokaˇzd´e o element format, jenˇz reprezentuje parametr pravidla. Element obsahuje jeden z pˇredem definovan´ ych ˇretˇezc˚ u, kter´e definuj´ı, jak´e form´aty data m´a pravidlo kontrolovat. Pravidlo mus´ı m´ıt vˇzdy alespoˇ n jeden parametr. Pˇr´ıklad definice pravidla:
dd/MM/yyyy 31
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
32
dd.MM.yyyy yyyy/MM/dd yyyy-MM-dd
Pouˇ zit´ı konkr´ etn´ıho textu Toto pravidlo definuje element textContent, jenˇz m˚ uˇze m´ıt nˇekolik potomk˚ u. Tito potomci mus´ı b´ yt elementy text, kter´e obsahuj´ı ˇretˇezec a reprezentuj´ı parametry pravidla. Pravidlo mus´ı obsahovat minim´alnˇe jeden textov´ y element. Pˇr´ıklad definice pravidla:
volejbal s dlouh´ ymi v´ ymˇ enami Vedlejˇ s´ ı ˇ cinnost´ ı ´ useku je d´ ale jeˇ stˇ e prodej olej˚ u zkusit spustit App.java a pokud se vypise neco jako
Pouˇ zit´ y font Kontrolu tohoto pravidla definuje element s n´azvem font, jehoˇz potomky jsou elementy requiredFont. Tento element mus´ı b´ yt zad´an alespoˇ n jednou a m´a vˇzdy dva potomky, elementy name a size. Prvn´ı obsahuje ˇretˇezec, kter´ y reprezentuje jm´eno poˇzadovan´eho fontu. Druh´ y obsahuje re´aln´e ˇc´ıslo, kter´e urˇcuje poˇzadovanou velikost fontu. Pˇr´ıklad definice pravidla:
<requiredFont> Times New Roman <size>12 <requiredFont> Calibri <size>11 32
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
33
<requiredFont> Times New Roman <size>13
Pouˇ zit´ı konkr´ etn´ıho nadpisu Element, kter´ y definuje toto pravidlo, se naz´ yv´a heading. Element m´a potomky, kteˇr´ı urˇcuj´ı parametr pravidla. Jedn´a se o textov´e parametry, kter´e reprezentuje element s n´azvem text. Tento element obsahuje ˇretˇezec, jenˇz urˇcuje hodnotu parametru. Pravidlo mus´ı m´ıt zadan´ y vˇzdy alespoˇ n jeden parametr. Pˇr´ıklad definice pravidla:
´ Uvod Toleranˇ cn´ ı mez Unik´ atn´ ı zemˇ episn´ y ´ utvar (popis) Uˇ zivatelsk´ a dokumentace
Pouˇ zit´ı odkaz˚ u na literaturu Toto pravidlo definuje element s n´azvem literature. Potomci elementu mohou b´ yt dvoj´ıho typu. Bud’ se jedn´a o elementy text, nebo limit. Prvn´ı reprezentuje textov´ y parametr pravidla. Mus´ı b´ yt zad´an alespoˇ n jeden. Element s n´azvem limit reprezentuje celoˇc´ıseln´ y parametr pravidla a mus´ı b´ yt zad´an pr´avˇe jednou. Pˇr´ıklad definice pravidla:
Literatura Reference Bibliografie 2 33
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
34
Pouˇ zit´ı ˇ c´ıslov´ an´ı stran Element, kter´ y toto pravidlo definuje, se jmenuje pageNumber. Jelikoˇz pravidlo nem´a ˇza´dn´ y parametr, jedn´a se o pr´azdn´ y element. Definice tohoto pravidla vypad´a n´asledovnˇe:
<pageNumber/>
4.1.2
V´ ystupn´ı soubor
Struktura v´ ystupn´ıho XML bude vych´azet ze vstupn´ıho souboru, v´ ystupn´ı dokument totiˇz vznikne jeho u ´pravou. Elementy definuj´ıc´ı pravidla a jejich parametry ve vstupn´ım souboru, z˚ ustanou zachov´any i ve v´ ystupu. Pouze budou tˇemto element˚ um pˇrid´any atributy nebo potomci podle v´ ysledk˚ u kontroly zadan´ ych pravidel. Vzhledem k tomu, ˇze struktura jednotliv´ ych pravidel je odliˇsn´a, liˇs´ı se i v´ ystupy jednotliv´ ych pravidel. V n´asleduj´ıc´ı ˇc´asti budou proto pops´any v´ ystupn´ı elementy pro vˇsechna pravidla. Poˇ cet slov Elementu words bude pˇrid´an ve v´ ystupn´ım souboru potomek count. Ten bude obsahovat poˇcet slov nalezen´ ych v kontrolovan´em dokumentu. D´ale pˇribude elementu limit atribut s n´azvem exceeded. Ten m´a hodnotu true v pˇr´ıpadˇe, ˇze poˇcet slov v dokumentu pˇrekroˇcil zadan´ y limit. Pokud k pˇrekroˇcen´ı nedoˇslo, m´a hodnotu false. Pˇr´ıklad v´ ystupu:
<words> 1100 3436
Poˇ cet stran V tomto pˇr´ıpadˇe probˇehne u ´prava elementu stejnˇe jako u pˇredchoz´ıho pravidla. Bude pˇrid´an potomek count s poˇctem stran dokumentu a podle toho, zdali tento poˇcet pˇrekroˇc´ı zadan´ y limit, bude atribut exceeded u elementu limit nastaven na true nebo false. Pˇr´ıklad v´ ystupu: 34
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
35
<pages> 3 1
Velikost ˇ r´ adkov´ an´ı Kontrolu velikosti ˇra´dkov´an´ı prov´ad´ı program u kaˇzd´eho odstavce dokumentu. Ve v´ ystupn´ım souboru bude tedy kaˇzd´ y odstavec reprezentov´an elementem paragraphLineSpacing, kter´ y je potomkem elementu lines. Obsahem elementu je velikost ˇra´dkov´an´ı dan´eho odstavce. D´ale m´a element dva atributy, excedeed a text. Prvn´ı z nich urˇcuje, zdali velikost ˇra´dkov´an´ı dan´eho odstavce pˇrekroˇcila zadan´ y limit ˇci nikoliv. Druh´ y atribut obsahuje prvn´ıch pˇet slov odstavce, aby bylo jasn´e, o kter´ y odstavec dokumentu se jedn´a.
1.1 <paragraphLineSpacing excedeed="true" text="M´ ate k dispozici cca 20...">1.15 <paragraphLineSpacing excedeed="true" text="Capital Market Line (CML)...">1.15 <paragraphLineSpacing excedeed="false" text="Aby se mohlo pˇ rej´ ıt k...">1.1
Okraje str´ anky Rodiˇcovsk´emu elementu margin budou pˇrid´ani potomci, elementy section, kter´e reprezentuj´ı jednotliv´e odd´ıly dokumentu. Element section m´a vˇzdy ˇctyˇri potomky, elementy left, right, top a bottom, kter´e reprezentuj´ı lev´ y, prav´ y, horn´ı a doln´ı okraj str´anky v dan´em odd´ılu. Kaˇzd´ y element obsahuje hodnotu okraje str´anky v centimetrech. Zdali velikost jednotliv´ ych okraj˚ u pˇrekroˇcila poˇzadovanou hodnotu, urˇcuje atribut exceeded, kter´ y maj´ı vˇsechny elementy. Pokud k pˇrekroˇcen´ı doˇslo, m´a atribut hodnotu true, pokud ne, je roven false. Pˇr´ıklad v´ ystupu:
<margin> 35
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
36
1.5 <section number="1"> 2.0 2.0 2.0 2.0 <section number="2"> 2.499 2.0 2.0 2.0
Uveden´ı jm´ ena Kaˇzd´emu hledan´emu jm´enu, kter´e reprezentuje element text, bude pˇrid´an atribut found. Pokud bylo jm´eno z´ahlav´ı dokumentu nalezeno, m´a atribut hodnotu true, pokud ne, je hodnota false. Pˇr´ıklad v´ ystupu:
Ondˇ rej Kupil´ ık Martin Majer Marek Puˇ cel´ ık
Uveden´ı data Ke kaˇzd´emu elementu format, jenˇz definuje poˇzadovan´ y form´at data je pˇrid´an atribut found, kter´ y m´a hodnotu true, pokud je datum v dan´em form´atu v z´ahlav´ı dokumentu nalezeno, jinak je roven hodnotˇe false. Nalezen´ y datum ve spr´avn´em form´atu je do v´ ystupu pˇrid´an jako hodnota elementu foundDate, kter´ y je potomkem elementu date. Pˇr´ıklad v´ ystupu:
36
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
37
dd/MM/yyyy dd.MM.yyyy yyyy/MM/dd yyyy-MM-dd 21.12.2015
Pouˇ zit´ı konkr´ etn´ıho textu Ke kaˇzd´emu elementu text reprezentuj´ıc´ımu hledan´ y text je pˇrid´an atribut found. Ten je roven true, pokud byl konkr´etn´ı text v dokumentu nalezen, jinak m´a hodnotu false. Pˇr´ıklad v´ ystupu:
volejbal s dlouh´ ymi v´ ymˇ enami Vedlejˇ sı ´ c ˇinnost´ ı u ´seku je d´ ale jeˇ stˇ e prodej olej˚ u zkusit spustit App.java a pokud se vypise neco jako
Pouˇ zit´ y font Kontrolu pouˇzit´eho fontu a jeho velikosti prov´ad´ı program pro kaˇzd´ y odstavec dokumentu. Jednotliv´e odstavce reprezentuj´ı elementy paragraphFont, kter´e jsou pˇrid´av´any jako potomci elementu font. Obsahuj´ı text sloˇzen´ y z velikosti fontu a jeho n´azvu. Maj´ı dva atributy – text obsahuje prvn´ıch pˇet slov odstavce a correct m´a hodnotu true, pokud patˇr´ı font a jeho velikost odstavce mezi poˇzadovan´e, jinak je rovny false. Pˇr´ıklad v´ ystupu:
<requiredFont> Times New Roman <size>12 <requiredFont> 37
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
38
Calibri <size>11 <requiredFont> Source Sans Pro Light <size>12 <paragraphFont correct="false" text="Popt´ avkov´ y dokument...">40.0 Source Sans Pro Semibold2 <paragraphFont correct="true" text="Zˇ CU je jedinou univerzitou s´ ıdl´ ıc´ ı...">12.0 Source Sans Pro Light <paragraphFont correct="false" text="Zpracovatel dokumentu...">15.9 Source Sans Pro Semibold <paragraphFont correct="true" text="Shrnut´ ı projektu...">11.0 Calibri
Pouˇ zit´ı konkr´ etn´ıho nadpisu Ke kaˇzd´emu elementu text reprezentuj´ıc´ımu hledan´ y nadpis je pˇrid´an atribut found. Ten je roven true, pokud byl nadpis v dokumentu nalezen, jinak m´a hodnotu false. Pˇr´ıklad v´ ystupu:
´ Uvod Toleranˇ cn´ ı mez Unik´ atn´ ı zemˇ episn´ y u ´tvar (popis) Uˇ zivatelsk´ a dokumentace
Pouˇ zit´ı odkaz˚ u na literaturu Element˚ um s n´azvem text, kter´e reprezentuj´ı moˇzn´e n´azvy sekce s literaturou, bude pˇrid´an atribut found. Ten bude m´ıt hodnotu true, pokud byl poˇzadovan´ y 38
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
39
n´azev v dokumentu nalezen, nebo bude roven false, pokud n´azev nalezen nebyl. Elementu literature je pˇrid´an potomek count, jenˇz obsahuje poˇcet poloˇzek seznamu literatury nalezen´eho v dokumentu. A elementu limit je pˇrid´an atribut reached, kter´ y m´a hodnotu true, pokud je poˇcet poloˇzek vˇetˇs´ı nebo roven zadan´emu limitu, v opaˇcn´em pˇr´ıpadˇe je roven false. Pˇr´ıklad v´ ystupu:
Literatura Reference Bibliografie 2 3
Pouˇ zit´ı ˇ c´ıslov´ an´ı stran Elementu pageNumber je pˇrid´an atribut found. Ten m´a hodnotu true, pokud m´a dokument oˇc´ıslovan´e str´anky, jinak je roven false. Pˇr´ıklad v´ ystupu:
<pageNumber found="true"/>
4.2
XML parser
V t´eto ˇc´asti diplomov´e pr´ace bude provedena anal´ yza n´astroj˚ u, pomoc´ı nichˇz se daj´ı v programovac´ım jazyce Java zpracov´avat XML soubory. Takov´eto n´astroje se naz´ yvaj´ı parsery, protoˇze prov´ad´ı takzvan´e parsov´an´ı XML dokumentu, tedy jeho rozdˇelen´ı na jednotliv´e ˇca´sti [13].
4.2.1
Parsery
V t´eto podkapitole budou struˇcnˇe zanalyzov´any dostupn´e XML parsery pro programovac´ı jazyk Java. Na z´akladˇe t´eto anal´ yzy bude vybr´an parser, kter´ y bude pouˇzit pˇri realizaci diplomov´e pr´ace. Podle zp˚ usobu zpracov´an´ı XML dokumentu se rozezn´avaj´ı dva pˇr´ıstupy [13]: Proudov´ eˇ cten´ı – parser postupnˇe ˇcte XML dokument a pro kaˇzdou uceleno ˇca´st vyvol´a ud´alost.
39
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
40
– Push parsery – ˇcten´ı XML prob´ıh´a automaticky, po pˇreˇcten´ı urˇcit´eho u ´seku dokumentu parser generuje ud´alosti, na kter´e program´ator reaguje. – Pull parsery – ˇcten´ı XML prob´ıh´a na ˇza´dost program´atora. Ten generuje ud´alosti a parser na nˇe reaguje t´ım, ˇze vr´at´ı poˇzadovan´ yu ´sek dokumentu. Pr´ ace se stromovou reprezentac´ı dokumentu – cel´ y XML dokument se naˇcte do stromov´e struktury v pamˇeti.
V n´asleduj´ıc´ı ˇc´asti budou ve struˇcnosti pˇredstaveny ˇctyˇri XML parsery pro jazyk Java. Autor pr´ace vyb´ıral pr´avˇe z tˇechto ˇctyˇr parser˚ u, jelikoˇz s nimi m´a osobn´ı zkuˇsenost z pˇredmˇetu KIV/JXT (Java a XML objektov´e technologie) a pr´ace s nimi je podrobnˇe pops´ana v [13]. SAX Cel´ y n´azev parseru je Simple API for XML. Jedn´a se o push parser, XML dokuˇ XML dokument odshora dol˚ ment tedy zpracov´av´a proudovˇe. Cte u, pro kaˇzdou ucelenou ˇca´st je vytvoˇrena ud´alost, ke kter´e mus´ı program´ator vytvoˇrit obsluhu. Tento parser je vhodn´e pouˇz´ıt v pˇr´ıpadˇe, ˇze se jedn´a o rozs´ahl´ y XML dokument a XML nem´a hlubok´e zanoˇren´ı element˚ u. V´ yhodou je rychlost zpracov´an´ı a n´ızk´a spotˇreba pamˇeti. Nev´ yhodou je sekvenˇcn´ı zpracov´an´ı, parser neumoˇzn ˇuje se pˇri pr˚ uchodu dokumentu vracet. Parser rovnˇeˇz nen´ı vhodn´ y pro vytv´aˇren´ı ˇci modifikaci dokument˚ u [13], [15], [16]. StAX Cel´ y n´azev parseru je Streaming API for XML. Jedn´a se o pull parser. Rozd´ıl oproti SAX je ten, ˇze dokument je ˇcten na ˇza´dost, pr˚ uchod dokumentu tak kontroluje program´ator. Dalˇs´ım rozd´ılem je moˇznost modifikace a vytv´aˇren´ı dokument˚ u. StAX je nevaliduj´ıc´ı parser, coˇz znamen´a, ˇze neum´ı kontrolovat strukturu XML dokumentu podle XSD a DTD soubor˚ u (viz kapitola 4.3.2). V´ yhodou tohoto parseru je vysok´a rychlost zpracov´an´ı, n´ızk´a pamˇet’ov´a n´aroˇcnost a jiˇz zm´ınˇen´a moˇznost vytv´aˇren´ı a modifikace XML dokument˚ u [13], [15], [16]. DOM Cel´ y n´azev je Document Object Model. Parser pracuje se stromovou reprezentac´ı dokumentu. Parser naˇcte cel´ y dokument do pamˇeti, kde vytvoˇr´ı jeho stromo-
40
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
41
vou objektovou reprezentaci, v n´ıˇz kaˇzd´emu elementu odpov´ıd´a jeden uzel stromu [13], [14]. Narozd´ıl od parseru SAX nen´ı dokument proch´azen od zaˇc´atku do konce, ale program´ator se m˚ uˇze v dokumentu pohybovat dle sv´e potˇreby. Je vhodn´ y ’ rovnˇeˇz pro modifikaci dokumentu. Nev´ yhodou je mal´a rychlost a velk´a pamˇet ov´a n´aroˇcnost naˇc´ıt´an´ı, coˇz m˚ uˇze b´ yt probl´emem u velk´ ych dokument˚ u [13], [14], [15], [16]. JAXB Cel´ y n´azev je Java Architecture for XML Binding. Vyuˇz´ıv´a XSD sch´ematu, ve kter´em je nadefinov´ana struktura XML dokumentu (viz kapitola 4.3.2). JAXB umoˇzn ˇuje vyuˇz´ıt informac´ı o XML dokumentu z XSD souboru k automatick´emu vygenerov´an´ı odpov´ıdaj´ıc´ıch tˇr´ıdy v Javˇe. Pˇri operac´ıch unmarshal (ˇcten´ı XML dokumentu) a marshal (z´apis XML dokumentu) se pot´e pracuje s objekty vygenerovan´ ych tˇr´ıd. Pouˇzit´ı tohoto n´astroje je vhodn´e v pˇr´ıpadech, kdy zn´ame dopˇredu sch´ema XML, potˇrebujeme XML naˇc´ıtat a ve velk´em rozsahu modifikovat, nebo XML dokument nen´ı pˇr´ıliˇs rozs´ahl´ y a informace v nˇem jsou hodnˇe strukturovan´e [13].
4.2.2
Vybran´ y parser
Pro vytvoˇren´ı programu, kter´ y bude splˇ novat zad´an´ı t´eto diplomov´e pr´ace, je zapotˇreb´ı pouˇzit´ı XML parseru, kter´ y bude m´ıt n´asleduj´ıc´ı vlastnosti: Moˇznost XML dokument ˇc´ıst i modifikovat. Vstupn´ı XML dokument s definic´ı pravidel totiˇz program modifikuje na v´ ystupn´ı soubor s v´ ysledky. Moˇznost validovat proti XSD sch´ematu. Takto validov´ an bude vstupn´ı XML dokument s definic´ı pravidel.
N´astroj SAX sice umoˇzn ˇuje XML dokument validovat proti XSD sch´ematu, ale nen´ı vhodn´ y pro modifikaci dokumentu. Parser StAX umoˇzn ˇuje u ´pravu XML, ale nen´ı validuj´ıc´ı, takˇze tak´e nesplˇ nuje jednu z podm´ınek. N´astroj JAXB obˇe podm´ınky splˇ nuje. Ale vzhledem k tomu, ˇze struktura vstupn´ıho dokumentu je pomˇernˇe jednoduch´a, nebylo pouˇzit´ı JAXB vyhodnoceno jako potˇrebn´e. Vybr´an byl tedy parser DOM, kter´ y splˇ nuje obˇe podm´ınky. To, ˇze je tento parser pomalejˇs´ı a pamˇet’ovˇe n´aroˇcnˇejˇs´ı, nen´ı vzhledem mal´emu rozsahu vstupn´ıho i v´ ystupn´ıho dokumentu v´ yznamn´e. Velkou v´ yhodou vybran´eho n´astroje je pomˇernˇe snadn´a modifikace vstupn´ıho dokumentu na v´ ystupn´ı.
41
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
4.3
42
Validace XML souboru
V t´eto kapitole budou pops´any moˇznosti kontroly struktury XML dokumentu.
4.3.1
Spr´ avnˇ e strukturovan´ y XML dokument
Nejniˇzˇs´ı u ´rovn´ı validace je kontrola, zdali je dokument spr´avnˇe strukturovan´y (wellformed). Takov´ y dokument splˇ nuje n´asleduj´ıc´ı pravidla syntaxe jazyka XML [13]. Mus´ı existovat pr´avˇe jeden koˇrenov´ y element. Kaˇzd´a poˇca´teˇcn´ı znaˇcka m´a odpov´ıdaj´ıc´ı ukonˇcovac´ı znaˇcku. Elementy se nesmˇej´ı navz´ ajem pˇrekr´ yvat (kˇr´ıˇzit). Hodnoty atribut˚ u musej´ı b´ yt uzavˇreny v uvozovk´ach nebo apostrofech. Elementy nesmˇej´ı m´ıt stejnˇe pojmenovan´e atributy. Koment´ aˇre nesmˇej´ı b´ yt vnoˇren´e a ani uvnitˇr znaˇcek. Ve znakov´ ych datech nejsou znaky < a &.
Tyto z´akladn´ı pravidla jsou kontrolov´ana kaˇzd´ ym XML parserem. Pokud je dokument splˇ nuje, je spr´avnˇe strukturovan´y. D´ale m˚ uˇze b´ yt dokument oznaˇcen za validn´ı. Struktura takov´eho dokumentu mus´ı splˇ novat v´ yˇse uveden´a pravidla a rovnˇeˇz mus´ı odpov´ıdat struktuˇre definovan´e XML sch´ematem viz kapitola 4.3.2 [14], [17].
4.3.2
W3C XML Schema
Sch´emata se pouˇz´ıvaj´ı pro form´aln´ı definici datov´ ych form´at˚ u zaloˇzen´ ych na XML. Tato definice je jednoznaˇcn´a a jasnˇe urˇcuje, jak mohou dokumenty vypadat. Pomoc´ı sch´ematu se stanovuje, jak´e elementy a atributy je moˇzn´e v XML pouˇz´ıt a jak´e jsou mezi nimi pˇri pouˇzit´ı vz´ajemn´e vztahy [13], [14], [18]. K popisu XML sch´emat se pouˇz´ıvaj´ı sch´emov´e jazyky, kter´ ych existuje nˇekolik – napˇr´ıklad DTD (Document Type Definition), W3C XML Schema, Relax NG nebo Schematron [14], [18]. V t´eto diplomov´e pr´aci bude pro validaci vstupn´ıho souboru s definic´ı pravidel pouˇzit jazyk W3C XML Schema. Pouˇzit´ı tohoto jazyka bylo pˇr´ımo stanoveno zad´an´ım diplomov´e pr´ace. Jazyk W3C XML Schema je rovnˇeˇz oznaˇcov´an zkratkou XSD (XML Schema Definition), coˇz je tak´e nejˇcastˇejˇs´ı pˇr´ıpona soubor˚ u se sch´ematy definovan´ ymi t´ımto jazykem. Autorem tohoto jazyka je konsorcium W3C. Tento jazyk dodrˇzuje konvenci XML. V n´asleduj´ıc´ı ˇc´asti kapitoly budou struˇcnˇe pˇredstaveny z´akladn´ı vlastnosti XSD. Jazyk se pouˇz´ıv´a k n´asleduj´ıc´ım definic´ım [19]: 42
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
43
Definice element˚ u a atribut˚ u, kter´e se mohou objevit v dokumentu. Urˇcen´ı, kter´e elementy jsou potomky. Stanoven´ı poˇrad´ı a poˇctu potomk˚ u. Stanoven´ı, zdali jsou elementy pr´ azdn´e ˇci mohou obsahovat text. Stanoven´ı datov´ ych typ˚ u element˚ u a atribut˚ u. Definice v´ ychoz´ıch a pevn´ ych hodnot pro elementy a atributy.
Koˇrenov´ ym elementem sch´ematu je xs:schema. Hlavn´ım principem a z´aroveˇ n velkou v´ yhodou XSD je moˇznost definov´an´ı vlastn´ıch datov´ ych typ˚ u. Ty mohou b´ yt dvoj´ıho typu [13], [20]: Jednoduch´ e – element xs:simpleType. Odvozuje se od z´akladn´ıch datov´ ych typ˚ u jako jsou string, date, decimal a dalˇs´ı. Sloˇ zen´ e – element xs:complexType. Sestavuje se z jednoduch´ ych datov´ ych typ˚ u.
K odvozen´ı jednoduch´eho datov´eho typu se nejˇcastˇeji pouˇz´ıv´a restrikce – element xs:restriction. Pomoc´ı restrikce lze mimo jin´e omezit d´elku ˇretˇezce, stanovit v´ yˇcet pˇr´ıpustn´ ych hodnot, omezit ˇc´ıseln´ y rozsah nebo omezit poˇcet desetinn´ ych m´ıst [13], [20]. Komplexn´ı datov´e typy se skl´adaj´ı z element˚ u a atribut˚ u. Elementy se definuj´ı pomoc´ı xs:element a atributy pomoc´ı xs:attribute. Pro kaˇzd´ y element v komplexn´ım typu lze urˇcit poˇrad´ı v´ yskytu a poˇcet opakov´an´ı. Pro urˇcen´ı poˇrad´ı lze elementy v komplexn´ım typu obalit pomoc´ı xs:sequence, xs:all nebo xs:choice. Pˇri pouˇzit´ı prvn´ı varianty mus´ı b´ yt dodrˇzeno poˇrad´ı element˚ u, v jak´em byly ve sch´ematu uvedeny. Druh´a varianta umoˇzn ˇuje uv´adˇet elementy v libovoln´em poˇrad´ı. Tˇret´ı moˇznost stanovuje, ˇze m˚ uˇze b´ yt uveden pouze jeden element˚ u definovan´ ych uvnitˇr xs:choice. Poˇcet v´ yskyt˚ u dan´eho elementu se stanovuje pomoc´ı atribut˚ u minOccurs a maxOccurs, kde prvn´ı atribut urˇcuje minim´aln´ı poˇcet v´ yskyt˚ u a druh´ y maxim´aln´ı poˇcet v´ yskyt˚ u [13], [20]. Z´akladn´ı pˇr´ıstupy k tvorbˇe sch´ematu jsou n´asleduj´ıc´ı [18], [20]: Matrj´ oˇ ska – analogie s ruskou panenkou. Definice vˇsech atribut˚ u a element˚ u jsou zanoˇreny do jednoho glob´aln´ıho elementu. Sal´ amov´ a koleˇ cka – opak pˇr´ıstupu matrj´oˇska. Vˇsechny elementy jsou definov´any jako glob´aln´ı. Sch´ema je sestaveno pomoc´ı referenc´ı (odkaz˚ u). Slep´ y Ben´ atˇ can – kaˇzd´ y element a atribut m´a definovan´ y datov´ y typ. Elementy jsou pak deklarov´any lok´alnˇe pomoc´ı tˇechto typ˚ u. Glob´alnˇe definovan´ y element je jen jeden, jedn´a se o koˇrenov´ y element dokumentu. Tato metoda je ve vˇetˇsinˇe pˇr´ıpad˚ u nejvhodnˇejˇs´ı volbou. Jej´ı nev´ yhodou je velikost sch´ematu a s t´ım spojen´a vˇetˇs´ı pracnost.
43
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
44
V t´eto kapitole byly struˇcnˇe pops´any pˇredevˇs´ım ty konstrukce jazyka XSD, kter´e budou pouˇzity v kapitole 4.3.3, pˇri vytv´aˇren´ı XSD souboru pro kontrolu vstupn´ıho souboru programu.
4.3.3
XSD soubor
V t´eto kapitole bude pops´an XSD soubor, jenˇz byl vytvoˇren v r´amci diplomov´e pr´ace a pomoc´ı nˇehoˇz je validov´an vstupn´ı soubor programu s definic´ı pravidel. Pro sestaven´ı sch´ematu byla zvolena metoda slep´eho Ben´atˇcana, kter´a byla pˇredstavena v kapitole 4.3.2. Tato metoda byla zvolena, protoˇze je nejpˇrehlednˇejˇs´ı a autor pr´ace ji pouˇz´ıval jiˇz v minulosti. V souladu s t´ımto pˇr´ıstupem byly nadefinov´any datov´e typy pro vˇsechny elementy pouˇzit´e ve vstupn´ım souboru. Jednoduch´e datov´e typy byly deklarov´any pro elementy, kter´e obsahuj´ı z´akladn´ı datov´e typy. Jedn´a se o elementy, jeˇz reprezentuj´ı parametry pravidel: formatType – obsahuje z´akladn´ı datov´ y typ string (textov´ y ˇretˇezec). Deklaruje v´ yˇcet hodnot, kter´e m˚ uˇze element format obsahovat. limitType – obsahuje z´ akladn´ı datov´ y typ nonNegativeInteger (nez´aporn´e cel´e ˇc´ıslo). Jin´a omezen´ı nem´a. textType – obsahuje z´ akladn´ı datov´ y typ string (textov´ y ˇretˇezec). Jin´a omezen´ı nem´a. valueType – obsahuje z´akladn´ı datov´ y typ float (re´aln´e ˇc´ıslo). Jin´a omezen´ı nem´a.
Pro elementy, kter´e do sebe maj´ı vnoˇren´e dalˇs´ı elementy, byly deklarov´any sloˇzen´e (komplexn´ı) datov´e typy. Jedn´a se o elementy, jeˇz reprezentuj´ı jednotliv´a pravidla: dateType – datov´ y typ elementu date, jenˇz reprezentuje pravidlo kontroluj´ıc´ı uveden´ı data. Datov´ y typ obsahuje konstrukci sequence, do kter´e je vloˇzen element format. Ten je datov´eho typu formatType a vyskytuje se v sekvenci minim´alnˇe jednou. fontType – datov´ y typ elementu font, kter´ y reprezentuje pravidlo pro kontrolu pouˇzit´eho fontu. Obsahuje konstrukci sequence, do n´ıˇz jsou vloˇzeny elementy requiredFont. Ty je datov´eho typu requiredFontType a mus´ı se v sekvenci vyskytovat alespoˇ n jednou. headingType – datov´ y typ elementu heading, jenˇz reprezentuje pravidlo pro kontrolu pouˇzit´ı konkr´etn´ıho nadpisu. Obsahuje konstrukci sequence, do kter´e je vloˇzen element text datov´eho typu textType. Element se v sekvenci vyskytuje minim´alnˇe jednou.
44
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
45
linesType – datov´ y typ elementu lines, kter´ y reprezentuje pravidlo pro kontrolu velikosti ˇra´dkov´an´ı. Obsahuje konstrukci sequence, do n´ıˇz je vloˇzen element value. Ten je datov´eho typu valueType a mus´ı b´ yt pouˇzit pr´avˇe jednou. literatureType – datov´ y typ elementu literature, kter´ y reprezentuje pravidlo kontroluj´ıc´ı pouˇzit´ı odkaz˚ u na literaturu. Je zde pouˇzito skl´ad´an´ı pomoc´ı sequence. Do sekvence jsou vloˇzeny elementy text datov´eho typu textType a limit typu limitType. Prvn´ı element se mus´ı v sekvenci vyskytovat minim´alnˇe jednou. Druh´ y element mus´ı b´ yt pouˇzit pr´avˇe jednou. Kv˚ uli pouˇzit´ı sequence mus´ı b´ yt dodrˇzeno poˇrad´ı element˚ u, nejdˇr´ıve jsou uvedeny vˇsechny text elementy, limit je uveden aˇz po nich. marginType – datov´ y typ elementu margin, kter´ y reprezentuje pravidlo pro kontrolu okraj˚ u str´anky. Obsahuje konstrukci sequence, do n´ıˇz je vloˇzen element value. Ten je datov´eho typu valueType a mus´ı b´ yt pouˇzit pr´avˇe jednou. nameType – datov´ y typ elementu name, jenˇz reprezentuje pravidlo kontroluj´ıc´ı pouˇzit´ı konkr´etn´ıho jm´ena v z´ahlav´ı dokumentu. Obsahuje konstrukci sequence, do kter´e je vloˇzen element text datov´eho typu textType. Element se v sekvenci vyskytuje minim´alnˇe jednou. pagesType – datov´ y typ elementu pages, kter´ y reprezentuje pravidlo kontroluj´ıc´ı poˇcet str´anek. Obsahuje konstrukci sequence, do n´ıˇz je vloˇzen element limit. Ten je datov´eho typu limitType a mus´ı b´ yt pouˇzit pr´avˇe jednou. textContentType – datov´ y typ elementu textContent, jenˇz reprezentuje pravidlo pro kontrolu pouˇzit´ı konkr´etn´ıho textu v dokumentu. Obsahuje konstrukci sequence, do kter´e je vloˇzen element text datov´eho typu textType. Element se v sekvenci vyskytuje minim´alnˇe jednou. requiredFontType – datov´ y typ elementu requiredFont, jenˇz je pouˇzit v r´amci fontType pro definici poˇzadovan´ ych font˚ u. Obsahuje konstrukci all, do kter´e jsou vloˇzeny elementy name typu textType a size typu valueType. Oba elementy mus´ı b´ yt pouˇzity pr´avˇe jednou a vzhledem k pouˇzit´ı all nez´aleˇz´ı na jejich poˇrad´ı. wordsType – datov´ y typ elementu words, jenˇz reprezentuje pravidlo kontroluj´ıc´ı poˇcet slov v dokumentu. Obsahuje konstrukci sequence, do kter´e je vloˇzen element limit. Ten je datov´eho typu limitType a mus´ı b´ yt pouˇzit pr´avˇe jednou.
Pro element rule, jenˇz obaluje kaˇzd´e pravidlo, byl vytvoˇren sloˇzen´ y datov´ y typ ruleType. Ten obsahuje konstrukci choice, ve kter´e jsou elementy odpov´ıdaj´ıc´ı jednotliv´ ym pravidl˚ um. Znamen´a to tedy, ˇze element rule vˇzdy obsahuje pouze 45
´ ´I PRAVIDEL KAPITOLA 4. XML SOUBOR PRO ZADAN
46
jednoho potomka, kter´ y reprezentuje jedno z pravidel. Definice datov´eho typu ruleType: <xs:complexType name="ruleType"> <xs:choice> <xs:element name="words" type="wordsType"/> <xs:element name="pages" type="pagesType"/> <xs:element name="lines" type="linesType"/> <xs:element name="margin" type="marginType"/> <xs:element name="name" type="nameType"/> <xs:element name="date" type="dateType"/> <xs:element name="font" type="fontType"/> <xs:element name="literature" type="literatureType"/> <xs:element name="heading" type="headingType"/> <xs:element name="textContent" type="textContentType"/> <xs:element name="pageNumber"/> Koˇrenov´ ym elementem dokumentu je rules. Pro tento element je definov´an sloˇzen´ y datov´ y typ rulesType, jenˇz obsahuje konstrukci sequence. Do n´ı je vloˇzen element rule typu ruleType, kter´ y je tedy potomkem koˇrenov´eho elementu a m˚ uˇze se v dokumentu vyskytovat maxim´alnˇe jeden´actkr´at. Koˇrenov´ y element m´a jako jedin´ y samostatnou deklaraci mimo datov´e typy: <xs:complexType name="rulesType"> <xs:sequence> <xs:element name ="rule" type="ruleType" minOccurs="1" maxOccurs="11"/> <xs:element name="rules" type="rulesType"/>
46
5 N´avrh a implementace programu Tato kapitola se zab´ yv´a vytvoˇren´ım programu, kter´ y bude kontrolovat nadefinovan´a pravidla v textov´ ych dokumentech. Nejdˇr´ıve budou pˇredstaveny poˇzadovan´e funkce programu, pot´e program´atorsk´e prostˇredky, kter´e autor pˇri realizaci aplikace pouˇzil. D´ale bude pops´an n´avrh a architektura programu a v posledn´ı ˇca´sti t´eto kapitoly bude pˇredstavena samotn´a implementace aplikace.
5.1
Poˇ zadovan´ e funkce programu
Pˇred sestaven´ım n´avrhu architektury ˇreˇsen´ı je vhodn´e shrnout, jak´e funkce m´a m´ıt program, kter´ y bude v´ ystupem t´eto diplomov´e pr´ace. Jedn´a se o n´asleduj´ıc´ı funkce: Naˇc´ıt´ an´ı a zpracov´an´ı textov´ ych dokument˚ u ve form´atu doc, docx, odt. Naˇcten´ı XML souboru, jehoˇz prostˇrednictv´ım uˇzivatel programu zad´ av´a, jak´a pravidla chce kontrolovat. Struktura XML souboru je pops´ana v kapitole 4.1.1. Validace vstupn´ıho XML souboru proti XSD souboru, kter´ y byl pˇredstaven v kapitole 4.3.3. Kontrola pravidel nadefinovan´ ych v kapitole 3. V´ ystup kontroly pravidel mus´ı b´ yt jednotn´ y pro vˇsechny tˇri form´aty textov´ ych dokument˚ u. Modifikace vstupn´ıho XML souboru na v´ ystupn´ı soubor, kter´ y bude obsahovat informace o v´ ysledc´ıch kontroly zadan´ ych pravidel.
5.2
Program´ atorsk´ e prostˇ redky
K vytvoˇren´ı programu byl pouˇzit programovac´ı jazyk Java, konkr´etnˇe verze Java SE 7. Tento jazyk byl k realizaci aplikace vybr´an vzhledem k tomu, ˇze autor pr´ace m´a s vytv´aˇren´ım aplikac´ı v Javˇe nejvˇetˇs´ı zkuˇsenosti v porovn´an´ı s ostatn´ımi programovac´ımi jazyky. ´ celem v´ Uˇ ysledn´eho programu by mˇela b´ yt kontrola textov´ ych dokument˚ u ve form´atech doc, docx a odt. Bylo tedy nutn´e nal´ezt knihovny pro programovac´ı jazyk Java, kter´e umˇej´ı dokumenty v tˇechto form´atech zpracov´avat. V´ ybˇer knihoven byl proveden v kapitole 2.3. Vybran´ ymi n´astroji jsou ODFDOM pro zpracov´an´ı odt a Apache POI, jenˇz zahrnuje knihovny HWPF pro zpracov´an´ı doc dokument˚ u a XWPF pro zpracov´an´ı docx. D´ale m´a program naˇc´ıtat a modifikovat XML soubor s definic´ı pravidel. Pro tyto u ´ˇcely bylo zapotˇreb´ı nal´ezt vhodn´ y XML parser pro programovac´ı jazyk Java. Anal´ yza parser˚ u byla provedena v kapitole 4.2 a vybran´ ym n´astrojem je DOM. 47
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
48
Program byl vytv´aˇren ve v´ yvojov´em prostˇred´ı Eclipse IDE for Java Developers, konkr´etnˇe ve verzi Luna 4.4.1.
5.3
N´ avrh ˇ reˇ sen´ı
Architektura programu se bude dˇelit na dvˇe vrstvy, datovou a aplikaˇcn´ı. Datov´a vrstva bude obstar´avat naˇc´ıt´an´ı, zpracov´an´ı a z´apis do soubor˚ u. Aplikaˇcn´ı vrstva bude cel´ y program spouˇstˇet a ˇr´ıdit jeho chod. Jej´ım hlavn´ım u ´kolem bude kontrola jednotliv´ ych pravidel.
5.3.1
D´ılˇ c´ı ˇ cinnosti vrstev
Pro u ´ˇcely n´avrhu architektury byl chod programu rozdˇelen na tˇrin´act d´ılˇc´ıch ˇcinnost´ı, kter´e byly podle sv´e podstaty rozdˇeleny mezi aplikaˇcn´ı a datovou vrstvu. Aktivity t´ ykaj´ıc´ı se pˇr´ımo pr´ace se soubory byly zaˇrazeny do datov´e vrstvy, obsluˇzn´e ˇcinnosti byly pˇriˇrazeny do aplikaˇcn´ı vrstvy. Rozdˇelen´ı aktivit je zn´azornˇeno na obr´azku 5.1.
Obr´azek 5.1: Rozdˇelen´ı ˇcinnost´ı programu mezi vrstvy architektury
Jednotliv´e ˇcinnosti uveden´e na obr´azku 5.1 jsou specifikov´any v n´asleduj´ıc´ım seznamu. Poˇrad´ı aktivit v seznamu odpov´ıd´a jejich poˇrad´ı v chodu programu: 1. Naˇ cten´ı spouˇ stˇ ec´ıho pˇ r´ıkazu – ˇcinnost aplikaˇcn´ı vrstvy. Naˇc´ıt´a ze zadan´eho pˇr´ıkazu parametry. 2. Kontrola parametr˚ u spouˇ stˇ ec´ıho pˇ r´ıkazu – ˇcinnost aplikaˇcn´ı vrstvy. Kontroluje naˇcten´e parametry, zdali byly zad´any ve spr´avn´em form´atu a se spr´avn´ ymi pˇrep´ınaˇci. Po dokonˇcen´ı t´eto aktivity zn´a program n´azev 48
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
49
a um´ıstˇen´ı kontrolovan´eho souboru, vstupn´ıho XML souboru s definic´ı pravidel a v´ ystupn´ıho XML souboru. D´ale tak´e ze zadan´ ych parametr˚ u zjist´ı, m´a-li prob´ıhat validace proti XSD. 3. Pˇ red´ an´ı parametr˚ u – pˇrenos informac´ı z aplikaˇcn´ı vrstvy do datov´e. Naˇcten´e parametry obsahuj´ı informace o vˇsech souborech, se kter´ ymi program pracuje, proto mus´ı doj´ıt k pˇred´an´ı tˇechto dat z aplikaˇcn´ı do datov´e vrstvy. 4. Naˇ cten´ı kontrolovan´ eho dokumentu – ˇcinnost datov´e vrstvy. V pˇredchoz´ı aktivitˇe z´ısk´a datov´a vrstva informaci o n´azvu a um´ıstˇen´ı kontrolovan´eho dokumentu, proto je dalˇs´ım krokem jeho naˇcten´ı. 5. Vytvoˇ ren´ı DocumentDefinition – ˇcinnost datov´e vrstvy. Tˇr´ıda DocumentDefinition je souˇc´ast´ı aplikaˇcn´ı vrstvy a je bl´ıˇze pops´ana v kapitole 5.3.2. K vytvoˇren´ı objektu t´eto tˇr´ıdy a jeho naplnˇen´ı vˇsak dojde v datov´e vrstvˇe, protoˇze pˇri naplnˇen´ı objektu se pracuje pˇr´ımo s kontrolovan´ ym dokumentem. Tento objekt pak obsahuje veˇsker´e, pro program potˇrebn´e informace o naˇcten´em dokumentu, jedn´a se tak o jeho reprezentaci. 6. Pˇ red´ an´ı DocumentDefinition – pˇrenos informac´ı z datov´e vrstvy do aplikaˇcn´ı. K naplnˇen´ı a vytvoˇren´ı reprezentace dokumentu, tedy objektu DocumentDefinition, dojde v datov´e vrstvˇe. D´ale tuto instanci uˇz zpracov´av´a aplikaˇcn´ı vrstva, kter´a ji potˇrebuje ke kontrole pravidel. Proto je objekt pˇred´an z datov´e vrstvy do aplikaˇcn´ı. 7. Naˇ cten´ı XML souboru s pravidly – ˇcinnost datov´e vrstvy. Pˇri pˇred´an´ı parametr˚ u z´ısk´a datov´a vrstva mimo jin´e informaci o n´azvu a um´ıstˇen´ı vstupn´ıho XML souboru s definic´ı pravidel. V tomto kroku datov´a vrstva vstupn´ı soubor naˇc´ıt´a. 8. Vytvoˇ ren´ı seznamu pravidel – ˇcinnost datov´e vrstvy. Krok, ve kter´em dojde k zpracov´an´ı naˇcten´eho vstupn´ıho XML souboru. Bude vytvoˇren seznam objekt˚ u rozhran´ı IRule (viz kapitola 5.3.2), kde kaˇzd´a poloˇzka seznamu bude reprezentovat jedno pravidlo naˇcten´e ze vstupn´ıho souboru. 9. Pˇ red´ an´ı pravidel – pˇrenos informac´ı z datov´e vrstvy do aplikaˇcn´ı. Seznam pravidel sestaven´ y v pˇredchoz´ı ˇcinnosti na z´akladˇe zpracov´an´ı vstupn´ıho souboru bude pˇred´an aplikaˇcn´ı vrstvˇe. Ta jej potˇrebuje pro proveden´ı kontroly jednotliv´ ych pravidel. 10. Kontrola jednotliv´ ych pravidel, vytvoˇ ren´ı ResultDefinition – ˇcinnost aplikaˇcn´ı vrstvy. Na z´akladˇe pˇredan´eho seznamu pravidel a reprezentace kontrolovan´eho dokumentu, objektu DocumentDefinition, provede aplikaˇcn´ı vrstva kontrolu jednotliv´ ych pravidel ze seznamu. V´ ysledky kontroly se ukl´adaj´ı do objektu tˇr´ıdy ResultDefinition (viz kapitola 5.3.2). 49
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
50
11. Pˇ red´ an´ı ResultDefinition – pˇrenos informac´ı z aplikaˇcn´ı vrstvy do datov´e. V´ ysledky kontroly jednotliv´ ych zadan´ ych pravidel je nutn´e pˇredat datov´e vrstvˇe, protoˇze ta bude vytv´aˇret v´ ystupn´ı XML soubor, v nˇemˇz budou v´ ysledky kontroly shrnuty. 12. Pˇ r´ıprava v´ ystupn´ıho XML – ˇcinnost datov´e vrstvy. Na z´akladˇe v´ ysledk˚ u kontroly pravidel, kter´e jsou reprezentov´any objektem tˇr´ıdy ResultDefinition a kter´e byly datov´e vrstvˇe pˇred´any v pˇredchoz´ım kroku, modifikuje vrstva vstupn´ı XML soubor. V´ ysledkem je v´ ystupn´ı XML soubor, jenˇz obsahuje vˇsechna p˚ uvodn´ı data a nav´ıc jsou do nˇej pˇrid´any elementy a atributy, kter´e uˇzivateli poskytnou informaci o v´ ysledc´ıch kontroly. 13. Uloˇ zen´ı v´ ystupn´ıho XML – ˇcinnost datov´e vrstvy. Vrstva uloˇz´ı v´ ystupn´ı XML soubor vytvoˇren´ y v pˇredchoz´ım kroku na poˇzadovan´e m´ısto. Um´ıstˇen´ı a n´azev souboru jsou datov´e vrstvˇe pˇred´any v kroku ˇc´ıslo 3. Jak byla provedena implementace jednotliv´ ych ˇcinnost´ı je pops´ano v kapitole 5.4.
5.3.2
Kl´ıˇ cov´ a rozhran´ı a tˇ r´ıdy
Za kl´ıˇcov´a rozhran´ı a tˇr´ıdy programu jsou povaˇzov´any ty, kter´e jsou pouˇz´ıv´any pro komunikaci mezi jednotliv´ ymi vrstvami architektury a ty, kter´e obstar´avaj´ı naˇc´ıt´an´ı a zpracov´an´ı kontrolovan´ ych dokument˚ u. C´ılem t´eto kapitoly nen´ı popsat implementaci tˇechto tˇr´ıd, to bude provedeno v kapitole 5.4, ale pˇredstavit princip n´avrhu ˇreˇsen´ı a u ´lohy jednotliv´ ych rozhran´ı a tˇr´ıd v navrˇzen´e architektuˇre. IDocumentLoader Rozhran´ı, kter´e patˇr´ı do datov´e vrstvy. Implementuj´ı ho tˇr´ıdy, jejichˇz u ´kolem bude naˇc´ıt´an´ı kontrolovan´eho dokumentu. Vzhledem k tomu, ˇze kontrolovan´e dokumenty mohou m´ıt tˇri r˚ uzn´e form´aty, p˚ ujde o tˇri tˇr´ıdy. Naˇc´ıt´an´ı jednotliv´ ych form´at˚ u kontrolovan´eho dokumentu prob´ıh´a odliˇsn´ ym zp˚ usobem, jsou pˇri nich ´ pouˇz´ıv´any r˚ uzn´e knihovny. Ukolem rozhran´ı je sjednotit pouˇz´ıv´an´ı tˇechto tˇr´ıd, kdy kaˇzd´a naˇc´ıt´a jin´ y form´at dokumentu odliˇsn´ ym zp˚ usobem, ale jejich pouˇzit´ı bude d´ıky implementaci stejn´eho rozhran´ı jednotn´e.
50
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
51
DocumentDefinition Tˇr´ıda, kter´a patˇr´ı do aplikaˇcn´ı vrstvy. Jedn´a se o reprezentaci kontrolovan´eho dokumentu. Obsahuje informace potˇrebn´e ke kontrole vˇsech nadefinovan´ ych pravidel (viz kapitola 3). Vytvoˇren´ı a naplnˇen´ı objektu m´a na starosti datov´a vrstva programu, protoˇze podkladem k tˇemto ˇcinnostem jsou data z kontrolovan´eho dokumentu. Tento objekt je pot´e pˇred´an aplikaˇcn´ı vrstvˇe, kter´a informace z nˇej pouˇz´ıv´a k proveden´ı kontroly jednotliv´ ych pravidel. ResultDefinition Tˇr´ıda, kter´a patˇr´ı do aplikaˇcn´ı vrstvy. Reprezentuje v´ ysledky kontroly pravidel. K vytvoˇren´ı a naplnˇen´ı objektu t´eto tˇr´ıdy doch´az´ı pˇri kontrole pravidel v aplikaˇcn´ı vrstvˇe. Tento objekt je pot´e pˇred´an datov´e vrstvˇe, kter´a informace z nˇej pouˇzije pˇri modifikaci vstupn´ıho XML souboru na v´ ystupn´ı. IDocumentManager Rozhran´ı, kter´e patˇr´ı do datov´e vrstvy. Tˇr´ıdy, kter´e toto rozhran´ı implementuj´ı, maj´ı za u ´kol vytvoˇrit a naplnit objekt tˇr´ıdy DocumentDefinition, tedy vytvoˇrit reprezentaci kontrolovan´eho dokumentu. Stejnˇe jako u tˇr´ıd implementuj´ıc´ıch rozhran´ı IDocumentLoader i zde prob´ıh´a vytvoˇren´ı reprezentace dokumentu pro jednotliv´e form´aty odliˇsn´ ym zp˚ usobem a za pouˇzit´ı r˚ uzn´ ych knihoven. Opˇet toto rozhran´ı implementuj´ı tˇri tˇr´ıdy, kaˇzd´a m´a na starosti jeden form´at dokumentu. C´ılem rozhran´ı je sjednotit pouˇz´ıv´an´ı tˇechto tˇr´ıd, aˇckoliv kaˇzd´a tˇr´ıda pracuje odliˇsn´ ym zp˚ usobem. IRule Rozhran´ı, kter´e patˇr´ı do aplikaˇcn´ı vrstvy. Zajiˇst’uje jednotn´e vol´an´ı metod, kter´e maj´ı na starosti kontrolu poˇzadovan´ ych pravidel. Implementuj´ı ho tˇr´ıdy reprezentuj´ıc´ı jednotliv´a pravidla. Objekty tˇechto tˇr´ıd jsou vytv´aˇreny v datov´e vrstvˇe pˇri zpracov´an´ı vstupn´ıho XML. Seznam tˇechto objekt˚ u je pot´e z datov´e vrstvy pˇred´an aplikaˇcn´ı vrstvˇe, kter´a prov´ad´ı kontrolu pravidel nad reprezentac´ı dokumentu, instanc´ı DocumentDefinition.
51
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
52
XMLLoader Tˇr´ıda, kter´a patˇr´ı do datov´e vrstvy. Jej´ım u ´kolem je zpracov´an´ı vstupn´ıho XML dokumentu tak, aby pro kaˇzd´e zadan´e pravidlo vznikl objekt odpov´ıdaj´ıc´ı tˇr´ıdy, jeˇz implementuje rozhran´ı IRule. Vytvoˇr´ı se tak seznam objekt˚ u IRule, kter´ y je n´aslednˇe pˇred´an aplikaˇcn´ı vrstvˇe.
5.4
Implementace
V t´eto kapitole bude pops´ana implementace ˇreˇsen´ı navrˇzen´eho v kapitole 5.1. Budou zde podrobnˇe rozebr´any jednotliv´e vrstvy architektury programu.
5.4.1
Aplikaˇ cn´ı vrstva
Aplikaˇcn´ı vrstva prov´ad´ı n´asleduj´ıc´ı ˇcinnosti: Spouˇst´ı program. Kontroluje zadan´e argumenty programu. Pˇred´av´ a datov´e vrstvˇe zpracovan´e argumenty. Pˇreb´ır´ a od datov´e vrstvy reprezentaci kontrolovan´eho dokumentu, objekt tˇr´ıdy DocumentDefinition, a seznam naˇcten´ ych pravidel. Pravidla kontroluje a v´ ysledky kontroly ukl´ad´a do objektu tˇr´ıdy ResultDefinition. Pˇred´av´ a objekt tˇr´ıdy ResultDefinition datov´e vrstvˇe. Vypisuje do konzole informativn´ı hl´ aˇsku o ukonˇcen´ı kontroly a uloˇzen´ı v´ ysledk˚ u do v´ ystupn´ıho souboru.
V dalˇs´ı ˇc´asti kapitoly budou pˇredstaveny jednotliv´e bal´ıky aplikaˇcn´ı vrstvy. U kaˇzd´eho bal´ıku budou uvedeny nejd˚ uleˇzitˇejˇs´ı tˇr´ıdy a rozhran´ı a jejich metody. Bal´ık main Obsahuje pouze tˇr´ıdu DPMain s metodou main, jeˇz cel´ y program spouˇst´ı. Jedinou aktivitou, kter´a se v metodˇe prov´ad´ı je vytvoˇren´ı objektu tˇr´ıdy ArgsParser, jemuˇz se pˇred´a pole argument˚ u programu.
52
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
53
Bal´ık control Obsahuje n´asleduj´ıc´ı tˇr´ıdy: ArgsParser – tˇr´ıda, jej´ımˇz u ´kolem je kontrola vstupn´ıch argument˚ u programu. M´a jednu metodu – controlParams. Ta je vol´ana z konstruktoru tˇr´ıdy a vrac´ı datov´ y typ boolean. Pokud jsou argumenty zad´any spr´avnˇe vrac´ı metoda true a informace naˇcten´e z argument˚ u jsou uloˇzeny do instance tˇr´ıdy InputParams, jinak vr´at´ı false. V pˇr´ıpadˇe, ˇze kontrola argument˚ u probˇehne spr´avnˇe, vytvoˇr´ı se v konstruktoru objekt tˇr´ıdy RuleController, kter´emu se pˇred´av´a instance tˇr´ıdy InputParams. InputParams – tˇr´ıda, kter´ a slouˇz´ı pouze k uchov´an´ı argument˚ u programu. Pro kaˇzd´ y atribut tˇr´ıdy jsou nastaveny odpov´ıdaj´ıc´ı getry a setry. RuleController – tˇr´ıda, kter´ a ˇr´ıd´ı bˇeh cel´eho programu. Kl´ıˇcov´ ymi metodami tˇr´ıdy jsou:
– findFileType – zjist´ı, jak´ y form´at m´a kontrolovan´ y dokument. Tuto informaci uloˇz´ı do lok´aln´ı promˇenn´e tˇr´ıdy s n´azvem fileType. – loadDocument – podle form´atu kontrolovan´eho dokumentu vytvoˇr´ı bud’ objekt tˇr´ıdy DOCManager, DOCXManager, nebo ODTManager. Z tohoto objektu je z´ısk´ana zavol´an´ım metody getDocumentDefinition instance tˇr´ıdy DocumentDefinition. Ta je uloˇzena do lok´aln´ı promˇenn´e tˇr´ıdy nazvan´e docDef. – controlRules – z´ısk´a z datov´e vrstvy seznam naˇcten´ ych pravidel. Pot´e seznam proch´az´ı a nad kaˇzd´ ym pravidlem zavol´a metody control a summary. Prvn´ı z nich provede kontrolu pravidla a druh´a uloˇz´ı v´ ysledky kontroly do objektu tˇr´ıdy ResultDefinition. Tento objekt uchov´avaj´ıc´ı v´ ysledky kontroly vˇsech pravidel bude n´aslednˇe pˇred´an datov´e vrstvˇe, konkr´etnˇe objektu tˇr´ıdy DOMOutput.
Bal´ık rules Tento bal´ık obsahuje tˇr´ıdy, kter´e reprezentuj´ı jednotliv´a pravidla nadefinovan´a v kapitole 3. Kaˇzd´a z tˇechto tˇr´ıd implementuje rozhran´ı IRule a z´aroveˇ n je potomkem tˇr´ıdy AbstractRule. Bal´ık obsahuje n´asleduj´ıc´ı tˇr´ıdy a rozhran´ı: AbstractRule – abstraktn´ı tˇr´ıda, jej´ımiˇz potomky jsou tˇr´ıdy implementuj´ıc´ı jednotliv´a pravidla. Tˇr´ıda m´a ˇctyˇri lok´aln´ı promˇenn´e, kter´e reprezentuj´ı moˇzn´e parametry pravidel. Ke kaˇzd´e promˇenn´e jsou nastaveny odpov´ıdaj´ıc´ı getry a setry.
53
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
54
IRule – rozhran´ı, kter´e implementuj´ı tˇr´ıdy reprezentuj´ıc´ı jednotliv´ a pravidla. Obsahuje celkem devˇet metod, z nichˇz nejz´asadnˇejˇs´ı jsou dvˇe:
– control – jedin´ ym parametrem metody je instance tˇr´ıdy DocumentDe´ finition. Ukolem t´eto metody je z´ıskat z DocumentDefinition informace potˇrebn´e pro dan´e pravidlo a prov´est tak kontrolu pravidla. – summary – m´a jeden parametr, instanci tˇr´ıdy ResultDefinition. Objekt stejn´e tˇr´ıdy je i n´avratovou hodnotou metody. Metoda do objektu, kter´ y m´a zadan´ y jako parametr, pˇrid´a informace o v´ ysledc´ıch kontroly a tento objekt n´aslednˇe vrac´ı. DateRule – prov´ad´ı kontrolu uveden´ı data v z´ahlav´ı a z´ apat´ı dokumentu. M´a tˇri lok´aln´ı promˇenn´e – objekt tˇr´ıdy DateUtil, seznam ˇretˇezc˚ u findingList a mapu findingMap, kde kl´ıˇce jsou poˇzadovan´e form´aty data a hodnota je datov´ y typ boolean, implicitnˇe nastaven´a na false. V metodˇe control jsou z instance tˇr´ıdy DocumentDefinition z´ısk´any vˇsechna z´ahlav´ı a z´apat´ı dokumentu a pomoc´ı DateUtil je kontrolov´ano, zdali v nich nen´ı uveden datum v jednom z poˇzadovan´ ych form´at˚ u. Pokud je takov´ y datum nalezen, je pˇrid´an do seznamu findingList a v mapˇe findingMap je odpov´ıdaj´ıc´ımu form´atu data nastavena hodnota true. V metodˇe summary je vytvoˇrena instance DateRuleResults, do n´ı jsou uloˇzeny findingList a findingMap a cel´a instance je vloˇzena do ResultDefinition. Font – tˇr´ıda, kter´ a reprezentuje poˇzadovan´ y font. Uchov´av´a v sobˇe jm´eno fontu a jeho velikost. FontRule – prov´ ad´ı kontrolu pouˇzit´eho fontu a jeho velikosti v jednotliv´ ych odstavc´ıch dokumentu. M´a ˇctyˇri lok´aln´ı promˇenn´e – seznam poˇzadovan´ ych font˚ u fonts a mapy fontMap, correctFontMap a sizeMap. U vˇsech map jsou kl´ıˇce ˇretˇezce, u correctFontMap jsou hodnoty datov´eho typu boolean, u fontMap jsou hodnotami ˇretˇezce a u sizeMap jde o datov´ y typ double. V metodˇe control je z objektu DocumentDefinition z´ısk´an seznam instanc´ı ParagraphDefinition reprezentuj´ıc´ıch odstavce dokumentu. Pˇri proch´azen´ı odstavc˚ u je do kaˇzd´e mapy pˇrid´an jako kl´ıˇc ˇretˇezec obsahuj´ıc´ı prvn´ıch pˇet slov odstavce. Do fontMap je jako hodnota vloˇzen n´azev fontu pouˇzit´eho v odstavci, do sizeMap velikost tohoto fontu a do correctFontMap se vloˇz´ı true, pokud nalezen´ y font a jeho velikost odpov´ıdaj´ı nˇekter´emu z poˇzadovan´ ych font˚ u, v opaˇcn´em pˇr´ıpadˇe je vloˇzena hodnota false. V metodˇe summary je vytvoˇren objekt FontResultDefinition, do kter´eho jsou vloˇzeny vˇsechny tˇri mapy. Cel´a instance je pot´e uloˇzena do ResultDefinition. HeadingRule – prov´ad´ı kontrolu pouˇzit´ı konkr´etn´ıho nadpisu v dokumentu. M´a jednu lok´aln´ı promˇennou – mapu findingMap, kde kl´ıˇce jsou hledan´e nadpisy a hodnotou je datov´ y typ boolean, implicitnˇe je nastaven´a
54
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
55
na false. V metodˇe control je z instance tˇr´ıdy DocumentDefinition z´ısk´an seznam vˇsech nadpis˚ u v dokumentu. V tomto seznamu jsou hled´any poˇzadovan´e nadpisy. Pokud je poˇzadovan´ y nadpis nalezen, je v mapˇe findingMap kl´ıˇci odpov´ıdaj´ıc´ımu tomuto nadpisu nastavena hodnota true. V metodˇe summary je pot´e v´ ysledn´a mapa uloˇzena do instance ResultDefinition. LinesRule – prov´ad´ı kontrolu velikosti ˇra´dkov´ an´ı jednotliv´ ych odstavc˚ u dokumentu. M´a dvˇe lok´aln´ı promˇenn´e – mapy paragraphMap, jej´ıˇz kl´ıˇc je datov´eho typu String a hodnota double, a excedeedMap, jej´ıˇz kl´ıˇc je datov´eho typu String a hodnota boolean. V metodˇe control je z instance DocumentDefinition z´ısk´an seznam objekt˚ u ParagraphDefinition, kter´e reprezentuj´ı odstavce dokumentu. Tento seznam je v metodˇe proch´azen a u kaˇzd´eho odstavce je do obou map pˇrid´an stejn´ y kl´ıˇc, prvn´ı ˇctyˇri slova odstavce. S t´ımto kl´ıˇcem je do paragraphMap pˇrid´ana jako hodnota velikost ˇra´dkov´an´ı dan´eho odstavce a do excedeedMap je vloˇzena hodnota true, pokud velikost ˇr´adkov´an´ı pˇrekroˇcila poˇzadovan´ y limit, nebo false, pokud je ˇra´dkov´an´ı menˇs´ı nebo rovno limitu. V metodˇe summary je vytvoˇrena instance LinesRuleResults, do n´ı jsou uloˇzeny obˇe mapy a cel´a instance je vloˇzena do ResultDefinition. LiteratureRule – prov´ ad´ı kontrolu pouˇzit´ı odkaz˚ u na literaturu v dokumentu. M´a dvˇe lok´aln´ı promˇenn´e – bibiCounts je datov´eho typu integer a findingMap je mapa, kde kl´ıˇce jsou hledan´e n´azvy sekce s literaturou a hodnota je datov´ y typ boolean, implicitnˇe nastaven´a na false. V metodˇe control je z instance DocumentDefinition z´ısk´an seznam vˇsech nadpis˚ u dokumentu, n´asledn´ y postup hled´an´ı poˇzadovan´ ych nadpis˚ u je stejn´ y jako v HeadingRule. Poˇcet odkaz˚ u na literaturu se z´ısk´a z DocumentDefinition a je uloˇzen do promˇenn´e bibiCounts. V metodˇe summary je vytvoˇrena instance LiteratureRuleResults. Do n´ı jsou uloˇzeny obˇe promˇenn´e a cel´a instance je vloˇzena do ResultDefinition. MarginRule – prov´ ad´ı kontrolu okraj˚ u str´anky. M´a jednu lok´aln´ı promˇennou – seznam margins, kter´ y obsahuje objekty MarginDefinition. V metodˇe control je seznam naplnˇen zavol´an´ım metody getMargins nad objektem tˇr´ıdy DocumentDefinition. V metodˇe summary jsou postupnˇe proch´azeny poloˇzky seznamu margins. Pro kaˇzd´ y objekt MarginDefinition se vytvoˇr´ı instance MarginRuleResults, do kter´e se nastav´ı jednotliv´e okraje z MarginDefinition a informace o pˇrekroˇcen´ı ˇci dodrˇzen´ı poˇzadovan´eho limitu. Kaˇzd´ y takov´ yto objekt je vloˇzen do seznamu a tento seznam instanc´ı MarginRuleResults je pˇrid´an do ResultDefinition. NameRule – prov´ ad´ı kontrolu pouˇzit´ı konkr´etn´ıch jmen v z´ahlav´ı a z´apat´ı dokumentu. M´a jednu lok´aln´ı promˇennou, mapu findingMap, kde kl´ıˇce jsou hledan´a jm´ena a hodnota je datov´eho typu boolean, implicitnˇe nastaven´a na false. V metodˇe control jsou z instance tˇr´ıdy DocumentDefinition z´ısk´any
55
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
56
seznamy se vˇsemi ˇretˇezci ze z´ahlav´ı a z´apat´ı dokumentu. Ty jsou postupnˇe proch´azeny a pokud se ˇretˇezec shoduje s poˇzadovan´ ym jm´enem, je kl´ıˇci odpov´ıdaj´ıc´ı dan´emu jm´enu ve findingMap nastavena hodnota true. V metodˇe summary je mapa vloˇzena do ResultDefinition. PageNumberRule – prov´ ad´ı kontrolu pouˇzit´ı ˇc´ıslov´an´ı str´anek. M´a jednu lok´aln´ı promˇennou s n´azvem pageNumbers, kter´a je datov´eho typu boolean. Hodnota promˇenn´e je nastavena v metodˇe control zavol´an´ım getru nad objektem DocumentDefinition, kter´ y vr´at´ı true, pokud dokument m´a oˇc´ıslovan´e str´anky, nebo false, pokud ne. V metodˇe summary je pageNumbers vloˇzena do ResultDefinition. PagesRule – prov´ad´ı kontrolu poˇctu stran dokumentu. M´ a jednu lok´aln´ı celoˇc´ıselnou promˇennou pageCount. Poˇcet stran je z´ısk´an v metodˇe control z objektu DocumentDefinition a je uloˇzen do promˇenn´e. V metodˇe summary je zjiˇstˇen´ y poˇcet stran porovn´an se zadan´ ym limitem. Promˇenn´a s poˇctem stran a informace o pˇrekroˇcen´ı ˇci dodrˇzen´ı limitu je vloˇzena do ResultDefinition. TextContentRule – prov´ad´ı kontrolu pouˇzit´ı konkr´etn´ıho textu v dokumentu. M´a dvˇe lok´aln´ı promˇenn´e – seznam firstWords, kter´ y obsahuje prvn´ı slova vˇsech hledan´ ych ˇretˇezc˚ u a mapu findingMap, kde kl´ıˇce jsou hledan´e ˇretˇezce a hodnota je datov´eho typu boolean a je implicitnˇe nastavena na false. V metodˇe control je z instance DocumentDefinition z´ısk´an seznam vˇsech odstavc˚ u dokumentu. U kaˇzd´eho odstavce je kontrolov´ano, jestli neobsahuje nˇekter´e ze slov ve firstWords. Pokud je takov´e slovo nalezeno, je zavol´ana metoda containWord, jeˇz zjiˇst’uje, zdali ˇretˇezce n´asleduj´ıc´ı po nalezen´em slovˇe d´avaj´ı dohromady hledan´ y text. Pokud tomu tak je, v mapˇe findingMap je odpov´ıdaj´ıc´ımu textu nastavena hodnota true. V metodˇe summary je mapa vloˇzena do ResultDefinition. WordsRule – prov´ad´ı kontrolu poˇctu slov v dokumentu. M´ a jednu lok´aln´ı celoˇc´ıselnou promˇennou wordsCount. Poˇcet slov je z´ısk´an v metodˇe control z objektu DocumentDefinition a je uloˇzen do promˇenn´e. V metodˇe summary je zjiˇstˇen´ y poˇcet slov porovn´an se zadan´ ym limitem. Promˇenn´a s poˇctem slov a informace o pˇrekroˇcen´ı ˇci dodrˇzen´ı limitu je vloˇzena do ResultDefinition.
56
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
57
Bal´ık definitions Tento bal´ık obsahuje tˇr´ıdy, kter´e v programu reprezentuj´ı kontrolovan´ y dokument. Jde o n´asleduj´ıc´ı tˇr´ıdy: DocumentDefinition – tˇr´ıda, kter´ a obsahuje objekty ostatn´ıch tˇr´ıd z tohoto bal´ıku. Jedn´a se o jednu z kl´ıˇcov´ ych tˇr´ıd cel´eho programu, pˇr´ımo se s n´ı pracuje pˇri kontrole pravidel. Jej´ı objekt totiˇz reprezentuje kontrolovan´ y dokument. Obsahuje informace o poˇctu stran, poˇctu slov, o pouˇzit´ı ˇc´ıslov´an´ı str´anek. D´ale m´a v sobˇe uloˇzen seznam ParagraphDefinition, kter´ y reprezentuje odstavce dokumentu, seznam HeadingDefinition reprezentuj´ıc´ı vˇsechny nadpisy, seznam MarginDefinition, jenˇz reprezentuje okraje str´anek dokumentu, a seznam StyleDefinition, coˇz jsou reprezentace styl˚ u pouˇzit´ ych v dokumentu. Tˇr´ıda DocumentDefinition jeˇstˇe obsahuje informaci o poˇctu nalezen´ ych odkaz˚ u na literaturu, objekt HeaderDefinition, kter´ y reprezentuje z´ahlav´ı dokumentu, a instanci FooterDefinition, v n´ıˇz jsou informace o z´apat´ı. Vytvoˇren´ım a naplnˇen´ım objektu t´eto tˇr´ıdy tak vznikne instance, kter´a obsahuje pro program vˇsechny potˇrebn´e informace o kontrolovan´em dokumentu. FooterDefinition – tˇr´ıda uchov´ avaj´ıc´ı informace o z´apat´ı dokumentu. M´a v sobˇe uloˇzen seznam datov´eho typu String, kter´ y obsahuje vˇsechny ˇretˇezce pouˇzit´e v z´apat´ı dokumentu. HeaderDefinition – tˇr´ıda uchov´ avaj´ıc´ı informace o z´ahlav´ı dokumentu. M´a v sobˇe uloˇzen seznam datov´eho typu String, kter´ y obsahuje vˇsechny ˇretˇezce pouˇzit´e v z´ahlav´ı dokumentu. HeadingDefinition – tˇr´ıda, kter´ a reprezentuje nadpis. Uchov´av´a text nadpisu, n´azev jeho fontu a velikost p´ısma. MarginDefinition – tˇr´ıda, kter´a uchov´av´ a informace o okraj´ıch dokumentu. Jsou v n´ı uloˇzeny rozmˇery prav´eho, lev´eho, horn´ıho i doln´ıho okraje str´anky v centimetrech. ParagraphDefinition – tˇr´ıda reprezentuj´ıc´ı odstavec. Je v n´ı uloˇzen text odstavce, poˇcet slov odstavce, velikost ˇra´dkov´an´ı odstavce, pouˇzit´e fonty a jejich velikosti. StyleDefinition – tˇr´ıda, kter´a uchov´av´ a informace o stylu pouˇzit´em v dokumentu. Je v n´ı uloˇzeno jm´eno stylu, pouˇzit´ y font a jeho velikosti, velikost ˇra´dkov´an´ı a odkazy na rodiˇcovsk´e styly.
57
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
58
Bal´ık results V tomto bal´ıku jsou uloˇzeny tˇr´ıdy, kter´e reprezentuj´ı v´ ysledky kontroly pravidel. Tyto tˇr´ıdy slouˇz´ı pouze k uchov´an´ı informac´ı o kontrole, jedin´ ymi metodami ve tˇr´ıd´ach jsou tak getry a setry k promˇenn´ ym tˇr´ıd. Vˇsechny tˇr´ıdy bal´ıku jsou uvedeny v n´asleduj´ıc´ım seznamu: CountResults – tˇr´ıda, kter´a uchov´ av´a v´ ysledky pravidel kontroluj´ıc´ıch poˇcet slov a str´anek dokumentu. M´a dvˇe lok´aln´ı promˇenn´e – celoˇc´ıselnou count a exceeded datov´eho typu boolean. Prvn´ı reprezentuje zjiˇstˇen´ y poˇcet a druh´a urˇcuje, zdali tento poˇcet pˇrekroˇcil poˇzadovan´ y limit ˇci nikoliv. DateRuleResults – tˇr´ıda, kter´ a reprezentuje v´ ysledky pravidla kontroluj´ıc´ıho pouˇzit´ı data. M´a dvˇe lok´aln´ı promˇenn´e – seznam ˇretˇezc˚ u findingList a mapu findingMap, kde kl´ıˇce jsou ˇretˇezce a hodnota je datov´eho typu boolean. V seznamu jsou uloˇzena nalezen´a data odpov´ıdaj´ıc´ı poˇzadovan´ ym form´at˚ um. V mapˇe jsou kl´ıˇce poˇzadovan´e form´aty a hodnoty jsou informace, zdali byl dan´ y form´at data v dokumentu pouˇzit ˇci nikoliv. FontRuleResults – tˇr´ıda, kter´a reprezentuje v´ ysledky pravidla pro kontrolu fontu pouˇzit´eho v jednotliv´ ych odstavc´ıch dokumentu. M´a tˇri lok´aln´ı promˇenn´e – mapy fontMap, correctFontMap a sizeMap. Vˇsechny mapy maj´ı jako kl´ıˇce ˇretˇezce, kter´e obsahuj´ı prvn´ıch pˇet slov odstavce. Hodnotami u fontMap jsou ˇretˇezce s n´azvem fontu a u sizeMap jsou to velikosti fontu. V correctFontMap jsou hodnoty rovny true, pokud nalezen´ y font a jeho velikost odpov´ıdaj´ı nˇekter´emu z poˇzadovan´ ych font˚ u, v opaˇcn´em pˇr´ıpadˇe jsou rovny false. LinesRuleResults – tˇr´ıda, kter´ a reprezentuje v´ ysledky pravidla pro kontrolu ˇra´dkov´an´ı odstavc˚ u. M´a dvˇe lok´aln´ı promˇenn´e – konkr´etnˇe mapy findingMap a exceededMap. Prvn´ı mapa obsahuje jako kl´ıˇce prvn´ı pˇet slov odstavce a jako hodnotu velikost ˇra´dkov´an´ı v dan´em odstavci. Ve druh´e mapˇe je kl´ıˇc stejn´ y jako u prvn´ı a hodnotou je datov´ y typ boolean. Hodnota je nastavena na true, pokud velikost ˇra´dkov´an´ı odstavce pˇrekroˇcila poˇzadovan´ y limit, jinak je false. LiteratureResults – tˇr´ıda, kter´a reprezentuje v´ ysledky pravidla kontroluj´ıc´ıho pouˇzit´ı odkaz˚ u na literaturu. M´a tˇri lok´aln´ı promˇenn´e – mapu findingMap, celoˇc´ıselnou promˇennou s n´azvem bibiCounts a reached datov´eho typu boolean. Kl´ıˇce mapy jsou ˇretˇezce s hledan´ ymi n´azvy sekce s literaturou a hodnota je datov´eho typu boolean. Je nastavena na true, pokud byl n´azev sekce nalezen, v opaˇcn´em pˇr´ıpadˇe je rovna false. Promˇenn´a bibiCounts uchov´av´a poˇcet poloˇzek seznamu literatury a reached je rovna true, pokud poˇcet poloˇzek dos´ahl poˇzadovan´eho limitu, jinak je hodnota nastavena na false.
58
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
59
MapResults – tˇr´ıda, jeˇz reprezentuje v´ ysledky pravidel, kter´e kontroluj´ı v´ yskyt konkr´etn´ıho jm´ena, textu a nadpisu v dokumentu. M´a jednu lok´aln´ı promˇennou, mapu findingMap. Kl´ıˇce mapy jsou hledan´e ˇretˇezce, hodnota je datov´eho typu boolean a je rovna true, pokud byl dan´ y ˇretˇezec nalezen, jinak je nastavena na false. MarginRuleResults – tˇr´ıda, kter´a reprezentuje v´ ysledky pravidla kontroluj´ıc´ıho okraje str´anky. Obsahuje osm promˇenn´ ych, pro kaˇzd´ y okraj str´anky m´a dvˇe promˇenn´e – jedna datov´eho typu double a druh´a boolean. V prvn´ı je uloˇzena velikost okraje, ve druh´e informace o tom, zdali velikost okraje pˇrekroˇcila poˇzadovan´ y limit ˇci nikoliv. ResultsDefinition – tˇr´ıda, kter´a shrnuje informace o v´ ysledc´ıch kontroly vˇsech zadan´ ych pravidel. Obsahuje objekty vˇsech ostatn´ıch tˇr´ıd z tohoto bal´ıku. Objekt t´eto tˇr´ıdy je v´ ystupem kontroly pravidel, aplikaˇcn´ı vrstva tento objekt pˇred´av´a datov´e, jeˇz na z´akladˇe informac´ı z nˇej modifikuje vstupn´ı soubor na v´ ystupn´ı.
Bal´ık util Tento bal´ık obsahuje pouze tˇr´ıdu DateUtil. Jej´ı objekt se pouˇz´ıv´a ve tˇr´ıdˇe DateRule, jeho u ´kolem je totiˇz zjistit, zdali jednotliv´a slova ze z´ahlav´ı a z´apat´ı dokumentu nejsou datem v poˇzadovan´em form´atu. Kl´ıˇcov´a je metoda controlDate, kter´a m´a jako parametr kontrolovan´ y ˇretˇezec. Jej´ı n´avratovou hodnotou je datov´ y typ boolean. Metoda vrac´ı true, pokud je kontrolovan´e slovo datem v poˇzadovan´em form´atu, jinak vrac´ı false.
5.4.2
Datov´ a vrstva
Datov´a vrstva prov´ad´ı n´asleduj´ıc´ı ˇcinnosti: Pˇreb´ır´ a od aplikaˇcn´ı vrstvy argumenty programu. Naˇc´ıt´ a kontrolovan´ y dokument. Zpracuje kontrolovan´ y dokument – vytvoˇr´ı a napln´ı objekt tˇr´ıdy DocumentDefinition. Pˇred´av´ a instanci DocumentDefinition aplikaˇcn´ı vrstvˇe. Naˇc´ıt´ a vstupn´ı XML soubor s definic´ı pravidel. Zpracuje vstupn´ı XML soubor – vytvoˇr´ı seznam objekt˚ u IRule, kter´e reprezentuj´ı jednotliv´a zadan´a pravidla.
59
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
60
Pˇred´av´ a aplikaˇcn´ı vrstvˇe seznam se zadan´ ymi pravidly. Pˇreb´ır´ a od aplikaˇcn´ı vrstvy v´ ysledky kontroly v objektu tˇr´ıdy ResultDefinition. Podle v´ ysledk˚ u kontroly modifikuje vstupn´ı XML soubor na v´ ystupn´ı. Uloˇz´ı v´ ystupn´ı XML soubor na poˇzadovan´e m´ısto.
V dalˇs´ı ˇca´sti kapitoly budou pˇredstaveny jednotliv´e bal´ıky datov´e vrstvy. U kaˇzd´eho bal´ıku budou uvedeny nejd˚ uleˇzitˇejˇs´ı tˇr´ıdy a rozhran´ı a jejich metody. Bal´ık documentLoader Bal´ık obsahuj´ıc´ı jednu abstraktn´ı tˇr´ıdu a dvˇe rozhran´ı: AbstractManager – abstraktn´ı tˇr´ıda, jej´ımiˇz potomky jsou tˇr´ıdy, kter´e obsluhuj´ı zpracov´an´ı kontrolovan´ ych dokument˚ u. Nejd˚ uleˇzitˇejˇs´ı promˇennou je objekt DocumentDefinition, jenˇz je v jednotliv´ ych potomc´ıch tˇr´ıdy naplnˇen informacemi o naˇcten´em dokumentu. IDocumentLoader – rozhran´ı, kter´e implementuj´ı tˇr´ıdy naˇc´ıtaj´ıc´ı kontrolovan´ y dokument. IDocumentManager – rozhran´ı, kter´e implementuj´ı tˇr´ıdy zpracov´ avaj´ıc´ı kontrolovan´ y dokument. Rozhran´ı m´a ˇsest metod, nejd˚ uleˇzitˇejˇs´ı je getDocumentDefinition, jeˇz vrac´ı vytvoˇrenou reprezentaci kontrolovan´eho dokumentu, objekt DocumentDefinition.
Bal´ık documentLoader.doc Bal´ık, kter´ y m´a na starosti naˇcten´ı a zpracov´an´ı dokumentu ve form´atu doc. Obsahuje dvˇe tˇr´ıdy: DOCInput – tˇr´ıda implementuj´ıc´ı rozhran´ı IDocumentLoader. Jej´ım c´ılem je naˇcten´ı dokumentu, tedy vytvoˇren´ı objektu tˇr´ıdy HWPFDocument, kter´a patˇr´ı do knihovny HWPF, jeˇz zpracov´av´a doc dokumenty. DOCManager – tˇr´ıda, kter´ a je potomkem AbstractManager a implementuje IDocumentManager. Zpracov´av´a objekt tˇr´ıdy HWPFDocument, kter´ y byl vytvoˇren tˇr´ıdou DOCInput. Naplˇ nuje objekt tˇr´ıdy DocumentDefinition informacemi, kter´e jsou podkladem pro kontrolu vˇsech pravidel. Jak konkr´etnˇe prob´ıh´a zpracov´an´ı knihovnou HWPF je pops´ano v kapitole 3, kde je u kaˇzd´eho pravidla uveden postup kontroly v odstavci Kontrola u DOC.
60
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
61
Bal´ık documentLoader.docx Bal´ık, jehoˇz u ´kolem je naˇcten´ı a zpracov´an´ı dokumentu ve form´atu docx. Obsahuje dvˇe tˇr´ıdy: DOCXInput – tˇr´ıda, kter´ a implementuje rozhran´ı IDocumentLoader. Jej´ım c´ılem je naˇcten´ı dokumentu, tedy vytvoˇren´ı objektu tˇr´ıdy XWPFDocument. Ta patˇr´ı do knihovny XWPF, jeˇz zpracov´av´a docx dokumenty. DOCXManager – tˇr´ıda, kter´ a je potomkem AbstractManager a implementuje IDocumentManager. Zpracov´av´a objekt tˇr´ıdy XWPFDocument, jenˇz byl vytvoˇren tˇr´ıdou DOCXInput. Naplˇ nuje objekt tˇr´ıdy DocumentDefinition informacemi, kter´e jsou podkladem pro kontrolu vˇsech pravidel. Jak konkr´etnˇe prob´ıh´a zpracov´an´ı knihovnou XWPF je pops´ano v kapitole 3, kde je u kaˇzd´eho pravidla uveden postup kontroly v odstavci Kontrola u DOCX.
Bal´ık documentLoader.odt ´ Ukolem tohoto bal´ıku je naˇcten´ı a zpracov´an´ı dokumentu ve form´atu odt. Obsahuje dvˇe tˇr´ıdy: ODTInput – tˇr´ıda implementuj´ıc´ı rozhran´ı IDocumentLoader. Jej´ım c´ılem je naˇcten´ı dokumentu, tedy vytvoˇren´ı objektu tˇr´ıdy TextDocument, kter´a patˇr´ı do knihovny ODFDOM, jeˇz zpracov´av´a odt dokumenty. ODTManager – tˇr´ıda, kter´a je potomkem AbstractManager a implementuje IDocumentManager. Zpracov´av´a objekt tˇr´ıdy TextDocument, jenˇz byl vytvoˇren tˇr´ıdou ODTInput. Naplˇ nuje objekt tˇr´ıdy DocumentDefinition informacemi, kter´e jsou podkladem pro kontrolu vˇsech pravidel. Jak konkr´etnˇe prob´ıh´a zpracov´an´ı knihovnou ODFDOM je pops´ano v kapitole 3, kde je u kaˇzd´eho pravidla uveden postup kontroly v odstavci Kontrola u ODT.
Bal´ık xml Bal´ık, kter´ y m´a na starosti veˇsker´e operace s XML soubory, kter´e se v programu prov´ad´ı. Obsahuje n´asleduj´ıc´ı tˇr´ıdy: DOMInput – tˇr´ıda, kter´ a naˇc´ıt´a vstupn´ı XML dokument prostˇrednictv´ım knihovny DOM. Pˇri naˇc´ıt´an´ı prov´ad´ı rovnˇeˇz validaci proti XSD souboru. Tˇr´ıda m´a dvˇe lok´aln´ı promˇenn´e – loader je objekt tˇr´ıdy XMLLoader a doc je objekt rozhran´ı Document. Prvn´ı z nich prov´ad´ı zpracov´an´ı naˇcten´eho
61
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
62
XML souboru, druh´a je reprezentac´ı XML dokumentu v knihovnˇe DOM – pr´avˇe do tohoto objektu je vstupn´ı soubor naˇcten. Naˇc´ıt´an´ı souboru prob´ıh´a v metodˇe read. Ta pomoc´ı prostˇredk˚ u knihovny DOM dokument naˇcte a n´aslednˇe nad n´ım zavol´a metodu xsdValidation, kter´a provede validaci proti XSD. Pokud XML soubor nen´ı vyhodnocen jako validn´ı, program vyhod´ı v´ yjimku a vyp´ıˇse jej´ı zpr´avu. Pokud validace probˇehne bez probl´em˚ u, je nad promˇennou loader zavol´ana metoda loadRules, jej´ımˇz parametrem je promˇenn´a doc s naˇcten´ ym XML. Tato metoda provede zpracov´an´ı pravidel zadan´ ych ve vstupn´ım souboru a vytvoˇr´ı seznam objekt˚ u IRule. DOMOutput – tˇr´ıda, kter´ a prov´ad´ı modifikaci vstupn´ıho XML souboru na v´ ystupn´ı. Tˇr´ıda m´a tˇri lok´aln´ı promˇenn´e – doc je objektem rozhran´ı Document, results je instance ResultDefiniton a outputFile je ˇretˇezec s n´azvem souboru. Promˇenn´a doc reprezentuje vstupn´ı soubor, results uchov´av´a v´ ysledky kontroly pravidel. Na z´akladˇe informac´ı z t´eto promˇenn´e prob´ıh´a u ´prava souboru. V metodˇe editDocument jsou proch´azeny elementy rule nalezen´e ve vstupn´ım souboru. Podle n´azvu potomka tohoto elementu je zjiˇstˇeno, o jak´e konkr´etn´ı pravidlo se jedn´a a na z´akladˇe toho je zavol´ana odpov´ıdaj´ıc´ı metoda, kter´a dan´ y element uprav´ı. Jak prob´ıh´a u ´prava jednotliv´ ych pravidel, je pops´ano v kapitole 4.1.2. Po proveden´ı modifikace je zavol´ana metoda createOutput, kter´a vytvoˇr´ı v´ ystupn´ı XML soubor a uloˇz´ı jej na poˇzadovan´e m´ısto. RuleSet – tˇr´ıda, kter´ a pouze uchov´av´a statick´e konstanty datov´eho typu String. V tˇechto konstant´ach jsou uloˇzeny n´azvy jednotliv´ ych element˚ u s pravidly. Jsou pouˇz´ıv´any ve tˇr´ıd´ach XMLLoader a DOMOutput. XMLLoader – tˇr´ıda, kter´ a zpracov´av´a vstupn´ı XML soubor. M´a jednu lok´aln´ı promˇennou ruleList, seznam objekt˚ u rozhran´ı IRule, jenˇz je v t´eto tˇr´ıdˇe naplnˇen na z´akladˇe dat ze vstupn´ıho souboru. Zpracov´an´ı XML ˇr´ıd´ı metoda loadRules, kter´a m´a jeden parametr, a to objekt rozhran´ı Document z knihovny DOM. V t´eto metodˇe jsou proch´azeny elementy rule z XML. Podle n´azvu potomka tohoto elementu je zavol´ana metoda vytv´aˇrej´ıc´ı objekt odpov´ıdaj´ıc´ı zadan´emu pravidlu. Kaˇzd´a z tˇechto metod vytvoˇr´ı objekt tˇr´ıdy, jeˇz implementuje rozhran´ı IRule, a vloˇz´ı jej do ruleList.
5.4.3
Argumenty programu
Program je distribuov´an ve form´atu jar. Spuˇstˇen´ı se prov´ad´ı z pˇr´ıkazov´e ˇra´dky pomoc´ı d´avkov´eho bat souboru. Program m˚ uˇze b´ yt spuˇstˇen se ˇctyˇrmi argumenty, z nichˇz jeden je povinn´ y a tˇri jsou voliteln´e. Kaˇzd´ y argument mus´ı b´ yt uveden pˇrep´ınaˇcem. Pˇrep´ınaˇce parametr˚ u programu jsou vyps´any v n´asleduj´ıc´ım seznamu: 62
´ KAPITOLA 5. NAVRH A IMPLEMENTACE PROGRAMU
63
-f – mus´ı b´ yt pouˇzit pˇri kaˇzd´em spuˇstˇen´ı, uv´ad´ı povinn´ y parametr, kter´ ym je um´ıstˇen´ı a n´azev kontrolovan´eho souboru. -i – jeho pouˇzit´ı je nepovinn´e, uv´ad´ı totiˇz voliteln´ y parametr, kter´ ym je um´ıstˇen´ı a n´azev vstupn´ıho XML souboru s pravidly. Pokud argument nen´ı uveden, zpracuje program pravidla nadefinovan´a v uk´azkov´em souboru rules.xml, kter´ y je pˇr´ımo uloˇzen v jar bal´ıku s programem ve sloˇzce resources. -o – jeho pouˇzit´ı je nepovinn´e, uv´ad´ı totiˇz voliteln´ y parametr, kter´ ym je um´ıstˇen´ı a n´azev v´ ystupn´ıho XML souboru. V pˇr´ıpadˇe, ˇze argument nen´ı uveden, je soubor s v´ ysledky uloˇzen pod n´azvem output.xml do adres´aˇre, z nˇehoˇz je program spouˇstˇen. -noxsd – voliteln´ y parametr. Je jako jedin´ y pouˇz´ıv´an samostatnˇe. Pokud ho uˇzivatel pouˇzije, nebude pˇri naˇc´ıt´an´ı vstupn´ıho XML provedena validace proti XSD sch´ematu. V pˇr´ıpadˇe, ˇze uˇzivatel tento pˇrep´ınaˇc nepouˇzije, je validace provedena proti XSD souboru popsan´emu v kapitole 4.3.3. Ten je pˇr´ımo uloˇzen v jar bal´ıku s programem ve sloˇzce resources pod n´azvem rules.xsd.
63
6 Testov´an´ı Z´avˇereˇcnou ˇc´ast´ı diplomov´e pr´ace bylo dle zad´an´ı otestov´an´ı vytvoˇren´eho programu na sadˇe r˚ uzn´ ych dokument˚ u. Testovac´ı mnoˇzina dokument˚ u a pr˚ ubˇeh samotn´eho testov´an´ı je pops´an v t´eto kapitole.
6.1
Testovac´ı mnoˇ zina
Jeˇstˇe pˇred sestaven´ım mnoˇziny testovac´ıch dokument˚ u byly stanoveny podm´ınky, kter´e mus´ı dokumenty v t´eto sadˇe splˇ novat: V mnoˇzinˇe mus´ı b´ yt zastoupeny soubory vytvoˇren´e ve vˇsech tˇrech textov´ ych procesorech pˇredstaven´ ych v kapitole 2.1. Mus´ı se tedy jednat o soubory ve form´atech doc, docx nebo odt. Kaˇzd´ y form´at by mˇel v mnoˇzinˇe m´ıt pˇribliˇznˇe stejn´e zastoupen´ı. Mnoˇzina mus´ı obsahovat minim´ alnˇe 50 dokument˚ u. Dokumenty v sadˇe mus´ı b´ yt z r˚ uzn´ ych zdroj˚ u, od r˚ uzn´ ych autor˚ u.
Dokumenty pro testov´an´ı byly z´ısk´any z mnoha r˚ uzn´ ych zdroj˚ u a sv´ ym obsahem a strukturou pokr´ yvaj´ı ˇsirok´e spektrum pouˇzit´ı textov´ ych procesor˚ u (semestr´aln´ı, bakal´aˇrsk´e, diplomov´e pr´ace atd.) V´ ysledn´a mnoˇzina dokument˚ u obsahuje 75 dokument˚ u, pˇriˇcemˇz docx m´a zastoupen´ı 31 dokument˚ u, doc 23 dokument˚ u a odt 21 dokument˚ u. Vˇsechny soubory mnoˇziny jsou na pˇriloˇzen´em CD v adres´aˇri test files.
6.2
Nalezen´ e probl´ emy
Vytvoˇren´ y program byl postupnˇe spouˇstˇen nad vˇsemi dokumenty z testovac´ı mnoˇziny pˇredstaven´e v kapitole 6.1. U kaˇzd´eho dokumentu byla otestov´ana vˇsechna pravidla nadefinovan´a v kapitole 3. U kaˇzd´eho testovan´eho dokumentu byl obsah vstupn´ıho XML upravov´an tak, aby byl na kaˇzd´em dokumentu program otestov´an s r˚ uzn´ ymi konfiguracemi pravidel. Po kaˇzd´em spuˇstˇen´ı programu nad testovan´ ym dokumentem byl manu´alnˇe zkontrolov´an v´ ystupn´ı XML soubor. Aˇckoliv se autor snaˇzil program testovat pr˚ ubˇeˇznˇe po kaˇzd´e vˇetˇs´ı u ´pravˇe k´odu, byly bˇehem testov´an´ı nalezeny situace, kdy program na zadan´e vstupy nereagoval spr´avnˇe. Probl´emy, na kter´e autor pr´ace pˇri testov´an´ı narazil jsou pops´any v n´asleduj´ıc´ı ˇca´sti kapitoly. Vzhledem k tomu, ˇze kaˇzd´ y form´at dokumentu je zpracov´av´an odliˇsnˇe, t´ ykala se nalezen´a chyba v programu zpravidla jen jednoho
64
´ ´I KAPITOLA 6. TESTOVAN
65
form´atu dokumentu. Proto jsou probl´emy rozˇclenˇeny do tˇrech kategori´ı podle form´at˚ u dokumentu. Chyby u DOC Dokument˚ u ve form´atu doc bylo testov´ano dvacet tˇri. Pˇri testov´an´ı tˇechto dokument˚ u byly nalezeny n´asleduj´ıc´ı nedostatky: Program pˇri kontrole pouˇzit´ı ˇc´ıslov´an´ı str´ anek nepoznal, kdyˇz byly str´anky ˇc´ıslov´any ˇr´ımsky. U kontroly pouˇzit´ı data a jmen v z´ ahlav´ı a z´apat´ı program ˇspatnˇe rozpozn´aval data a jm´ena, za kter´ ymi n´asledoval konec ˇr´adky. Program nepˇresnˇe zjiˇst’oval ˇr´adkov´an´ı, kter´e mˇelo nastavenou pˇresnou ˇs´ıˇrku v bodech. Program vypisoval okraje str´anky pouze prvn´ıho odd´ılu dokumentu. Pokud byl dokument rozdˇelen na v´ıce odd´ıl˚ u s r˚ uzn´ ymi okraji stran, program okraje dalˇs´ıch odd´ıl˚ u nevypsal. Tato chyba se vyskytovala u vˇsech form´at˚ u dokumentu.
Vˇsechny nalezen´e chyby programu byly opraveny. Sadu testovac´ıch dokument˚ u form´atu doc zpracoval program pro proveden´ı oprav spr´avnˇe. Chyby u DOCX Dokument˚ u ve form´atu docx bylo testov´ano tˇricet jedna. Pˇri testov´an´ı tˇechto dokument˚ u byly nalezeny n´asleduj´ıc´ı nedostatky: Pˇri kontrole pouˇzit´ı ˇc´ıslov´ an´ı stran program nepoznal, kdyˇz byly str´anky ˇc´ıslov´any ˇr´ımsky. Program ˇspatnˇe vyhodnocoval font a jeho velikost, pokud nebyly explicitnˇe urˇceny pro styl, ale byly pˇreb´ır´any z rodiˇcovsk´eho stylu. Pˇri hled´an´ı jmen a dat v z´ahlav´ı zp˚ usobovalo probl´emy pouˇzit´ı tabul´atoru mezi jednotliv´ ymi jm´eny ˇci daty. Poˇc´ıt´ an´ı poloˇzek seznamu literatury nefungovalo pˇresnˇe. Pokud odstavec nemˇel pˇr´ımo nastaven´e ˇr´adkov´ an´ı, ale jeho hodnotu pˇreb´ıral z pouˇzit´eho stylu, program takov´e ˇr´adkov´an´ı nedok´azal spr´avnˇe zpracovat.
65
´ ´I KAPITOLA 6. TESTOVAN
66
Vˇsechny nalezen´e chyby programu byly opraveny. Sada testovac´ıch dokument˚ u form´atu docx byla pro proveden´ı oprav zpracov´ana programem spr´avnˇe. Chyby u ODT Dokument˚ u ve form´atu odt bylo testov´ano dvacet jedna. Pˇri testov´an´ı tˇechto dokument˚ u byly nalezeny n´asleduj´ıc´ı nedostatky: Kontrola pouˇzit´ı jm´ena a data v z´ ahlav´ı a z´apat´ı neprob´ıhala po slovech, ale po ˇra´dc´ıch. Pokud byla dvˇe jm´ena nebo data na jednom ˇra´dku, program naˇsel jen jedno. Dvˇe mezery v textu po sobˇe byly spojov´ any do elementu text:s, kter´ y nedok´azala knihovna ODFDOM zpracovat. Program nenaˇc´ıtal text v poloˇzk´ach seznam˚ u. Knihovna ODFDOM totiˇz seznamy nezpracov´av´a jako odstavce.
Vˇsechny nalezen´e chyby programu byly opraveny. Sada testovac´ıch dokument˚ u form´atu odt byla po odstranˇen´ı nedostatk˚ u zpracov´ana programem spr´avnˇe.
66
7 Z´avˇer Pˇri realizaci diplomov´e pr´ace byly splnˇeny vˇsechny body zad´an´ı. Hlavn´ım v´ ystupem pr´ace je aplikace, kter´a byla vytvoˇrena v programovac´ım jazyce Java a kter´a kontroluje form´aln´ı pravidla v dokumentech textov´ ych procesor˚ u Microsoft Word, OpenOffice a LibreOffice. Diplomov´a pr´ace je rozˇclenˇena do sedmi kapitol. Samotnou realizac´ı pr´ace se zab´ yvaj´ı kapitoly 2 aˇz 6, ve kter´ ych jsou postupnˇe pops´ana ˇreˇsen´ı jednotliv´ ych bod˚ u zad´an´ı. V teoretick´e ˇc´asti pr´ace byla provedena anal´ yza moˇznost´ı kontroly form´aln´ıch pravidel u dokument˚ u vybran´ ych textov´ ych procesor˚ u. V r´amci anal´ yzy byly pˇredstaveny jednotliv´e procesory a form´aty jejich dokument˚ u. D´ale byly analyzov´any knihovny pro jazyk Java, kter´e umˇej´ı tyto dokument zpracov´avat. V r´amci praktick´e ˇc´asti diplomov´e pr´ace byl navrˇzen a implementov´an program, kter´ y se zab´ yv´a kontrolou form´aln´ıch pravidel v dokumentech vybran´ ych textov´ ych procesor˚ u. V prvn´ı f´azi byla nadefinov´ana jednotliv´a form´aln´ı pravidla, kter´a bude v´ ysledn´a aplikace kontrolovat. Celkem bylo nadefinov´ano jeden´act pravidel. Vstupem aplikace je XML soubor, jenˇz obsahuje definice form´aln´ıch pravidel, kter´a poˇzaduje uˇzivatel zkontrolovat. Navrˇzen´ı vhodn´e struktury XML souboru a jej´ı popis pomoc´ı XSD sch´ematu bylo dalˇs´ı f´az´ı praktick´e ˇca´sti pr´ace. V z´avˇereˇcn´e f´azi byl sestaven n´avrh programu a na jeho z´akladˇe byla realizov´ana samotn´a implementace. Pˇri navrhov´an´ı aplikace byly jednotliv´e ˇcinnosti programu rozdˇeleny mezi aplikaˇcn´ı a datovou vrstvu. Aplikace byla navrˇzena tak, aby ji bylo moˇzn´e snadno rozˇs´ıˇrit o kontrolu nov´ ych pravidel. V´ ysledn´ y program byl otestov´an na sadˇe sedmdes´ati pˇeti dokument˚ u z r˚ uzn´ ych zdroj˚ u. Veˇsker´e nedostatky nalezen´e v r´amci testov´an´ı byly opraveny. Program by bylo moˇzn´e d´ale rozˇs´ıˇrit o grafick´e uˇzivatelsk´e rozhran´ı, kter´e by usnadnilo jeho spouˇstˇen´ı. Uˇzivatelsk´e rozhran´ı by mohlo tak´e obsahovat funkcionalitu pro jednoduch´e vytv´aˇren´ı vstupn´ıho XML souboru s definicemi pravidel, kde by si uˇzivatel mohl nadefinovat poˇzadovan´a pravidla, aniˇz by musel manu´alnˇe vytv´aˇret XML. N´avrh aplikace byl proveden tak, aby byla snadno rozˇsiˇriteln´a o kontrolu nov´ ych pravidel, vylepˇsen´ım tak m˚ uˇze b´ yt pˇrid´an´ı kontroly dalˇs´ıch pravidel.
67
Literatura [1] MURRAY, K. – MILLHOLLON, M. – MELTON, B. Mistrovstv´ı v Microsoft Office Word 2007. 1. vyd´an´ı. Computer Press, 2008. ISBN 978-80-251-2051-4. [2] BUKOVJAN, A. OpenXML dokument Wordu 2007 a jeho vnitˇrn´ı struktura. Plzeˇ n, 2011. 57 s. Bakal´aˇrsk´a pr´ace na Pedagogick´e fakultˇe Z´apadoˇcesk´e univerzity na katedˇre v´ ypoˇcetn´ı a didaktick´e techniky. Vedouc´ı bakal´aˇrsk´e pr´ace Mgr. Tom´aˇs Jakeˇs. [3] Apache OpenOffice About. URL:
[cit. 19.4.2015]. [4] THE DOCUMENT FOUNDATION. LibreOffice 4.0 Getting Started Guide. 2013. Dostupn´e z:
[5] [MS-DOC]: Word (.doc) Binary File Format. URL:
. [cit. 20.4.2015]. [6] Introducing the Office (2007) Open XML File Formats. URL: [cit. 20.4.2015]. [7] Walkthrough: Word 2007 XML Format. URL: . [cit. 20.4.2015]. [8] Office Open XML – Anatomy of an OOXML WordProcessingML File. URL: [cit. 21.4.2015]. [9] EISENBERG, D. J. OASIS OpenDocument Essentials. Lulu Enterprises Incorporated, 2006. 303 s. ISBN 9781411668324. Dostupn´e z: https://books.google.cz/books?id=-AasoVVqNU8C 68
[10] What is the Open Document Format (ODF)? – Definition from Techopedia. URL: . [cit. 21.4.2015]. [11] Apache POI - the Java API for Microsoft Documents. URL: . [cit. 22.4.2015]. [12] ODFDOM - the Open Document API. URL: . [cit. 22.4.2015]. ˇ e Budˇejovice: [13] HEROUT, Pavel Java a XML. Prvn´ı vyd´an´ı. Cesk´ nakladatelstv´ı KOPP, 2007. ISBN 978-80-7232-307-4. [14] KOSEK, Jiˇr´ı XML pro kaˇzd´eho: podrobn´y pr˚ uvodce. Prvn´ı vyd´an´ı. Praha: Grada Publishing, 2000. ISBN 80-7169-860-1. [15] Java XML Tutorial. URL: . [cit. 1.6.2015]. [16] Java & XML Tool Overview — tutorials.jenkov.com. URL: . [cit. 1.6.2015]. [17] XML Document Types. URL: . [cit. 2.6.2015]. [18] BALON, M. Gener´ator XML soubor˚ u ˇr´ızen´y XSD sch´ematem. Plzeˇ n, 2014. 80 s. Diplomov´a pr´ace na Fakultˇe aplikovan´ ych vˇed Z´apadoˇcesk´e univerzity na katedˇre informatiky a v´ ypoˇcetn´ı techniky. Vedouc´ı diplomov´e pr´ace doc. Ing. Pavel Herout Ph.D. [19] XML Schema Tutorial. URL: . [cit. 2.6.2015]. [20] XML sch´emata [online]. 2014. URL: . [cit. 2.6.2015].
69
Seznam zkratek MS
Microsoft
DOS
Diskov´ y operaˇcn´ı syst´em
DOC
Bin´arn´ı form´at dokumentu programu Microsoft Word
DOCX
Na XML zaloˇzen´ y form´at dokumentu programu Microsoft Word
ODT
Open Document Format pro textov´e procesory
XML
Extensible Markup Language
SXW
StarOffice Writer Document
RTF
Rich Text Format
TXT
Textov´ y soubor
CSV
Comma-separated values
ZIP
Souborov´ y form´at pro kompresi a komprimaci dat
HTML
HyperText Markup Language
OASIS
Organization for the Advancement of Structured Information Standards
ODF
OASIS Open Document Format
JAR
Java Archive
MIME
Multi-Purpose Internet Mail Extensions
PNG
Portable Network Graphics
API
Application Programming Interface
DOM
´ Ustav pro informace ve vzdˇel´av´an´ı
Apache POI
The Java API for Microsoft Documents
HWPF
Souˇc´ast Apache POI pro form´at DOC
XWPF
Souˇc´ast Apache POI pro form´at DOCX
70
ODFDOM
The Open Document API
SAX
Simple API for XML
StAX
Streaming API for XML
DOM
Document Object Model
JAXB
Java Architecture for XML Binding
XSD
XML Schema Definition
W3C
World Wide Web Consortium
DTD
Document Type Denition
BAT
Form´at d´avkov´eho souboru pro Microsoft Windows
SVN
Subversion
71
Pˇ r´ılohy Uˇ zivatelsk´ a pˇ r´ıruˇ cka Tato pˇr´ıloha obsahuje n´avod pro uˇzivatele k pouˇz´ıv´an´ı programu.
Spuˇ stˇ en´ı programu Jedn´a se o konzolov´ y program, je tedy spouˇstˇen z pˇr´ıkazov´e ˇr´adky. Program je y soubor uloˇzen v jar bal´ıku s n´azvem DP Kupilik.ja a je k nˇemu vytvoˇren d´avkov´ run.bat. Spuˇstˇen´ı programu se prov´ad´ı z pˇr´ıkazov´e ˇr´adky prostˇrednictv´ım d´avkov´eho souboru. Je zapotˇreb´ı m´ıt d´avkov´ y soubor ve stejn´em adres´aˇri jako jar s aplikac´ı. Program m˚ uˇze m´ıt aˇz ˇctyˇri argumenty, kter´e se uv´ad´ı pomoc´ı pˇrep´ınaˇc˚ u: -f – mus´ı b´ yt pouˇzit pˇri kaˇzd´em spuˇstˇen´ı, uv´ad´ı povinn´ y parametr, kter´ ym je um´ıstˇen´ı a n´azev kontrolovan´eho souboru. -i – jeho pouˇzit´ı je nepovinn´e, uv´ad´ı totiˇz voliteln´ y parametr, kter´ ym je um´ıstˇen´ı a n´azev vstupn´ıho XML souboru s pravidly. Pokud argument nen´ı uveden, zpracuje program pravidla nadefinovan´a v uk´azkov´em XML souboru, kter´ y je pˇr´ımo uloˇzen v jar bal´ıku. -o – jeho pouˇzit´ı je nepovinn´e, uv´ad´ı totiˇz voliteln´ y parametr, kter´ ym je um´ıstˇen´ı a n´azev v´ ystupn´ıho XML souboru. V pˇr´ıpadˇe, ˇze argument nen´ı uveden, je soubor s v´ ysledky uloˇzen pod n´azvem sf output.xml do adres´aˇre, ze kter´eho je program spouˇstˇen. -noxsd – voliteln´ y parametr. Je jako jedin´ y pouˇz´ıv´an samostatnˇe. Pokud ho uˇzivatel pouˇzije, nebude pˇri naˇc´ıt´an´ı vstupn´ıho XML provedena validace proti XSD sch´ematu. V pˇr´ıpadˇe, ˇze uˇzivatel tento pˇrep´ınaˇc nepouˇzije, je validace proti XSD provedena. XSD sch´ema je pˇr´ımo uloˇzeno v jar bal´ıku.
Pˇr´ıklad spuˇstˇen´ı programu, kdy se kontroluje dokument s n´azvem example.doc, pravidla jsou nadefinovan´a v souboru myRules.xml, v´ ystup je uloˇzen do output.xml a je provedena validace proti XSD: run.bat -f example.doc -i myRules.xml 72
Pˇr´ıklad spuˇstˇen´ı programu, kdy se kontroluje dokument s n´azvem example.doc, pravidla jsou nadefinovan´a ve v´ ychoz´ım souboru rules.xml v bal´ıku jar, v´ ystup je uloˇzen do myOutput.xml a nen´ı provedena validace proti XSD: run.bat -f example.doc -o myOutput.xml -noxsd Pokud budou argumenty programu zad´any ˇspatnˇe, kontrola pravidel nebude spuˇstˇena a program vyp´ıˇse informaci o chybnˇe zadan´em pˇr´ıkazu. Program je pot´e nutn´e spustit znovu se spr´avn´ ymi parametry.
Vstupn´ı soubor Jeˇstˇe pˇred spuˇstˇen´ım programu je zapotˇreb´ı si pˇripravit vstupn´ı soubor. Jedn´a se o XML soubor, jehoˇz prostˇrednictv´ım uˇzivatel urˇcuje, jak´a pravidla chce nad dokumentem textov´eho procesoru zkontrolovat. Struktura vstupn´ıho XML souboru je detailnˇe pops´ana v kapitole 4.1.1. Zde je uveden pˇr´ıklad XML vstupu, kter´ y obsahuje definice vˇsech pravidel, kter´e program um´ı zkontrolovat. U kaˇzd´e definice pravidla je uveden koment´aˇr, kter´ y vysvˇetluje, co dan´a definice znamen´a: <words> 1100 <pages> 3 73
1.1 <margin> 1.5 Ondˇ rej Kupil´ ık Martin Majer Marek Puˇ cel´ ık dd/MM/yyyy dd.MM.yyyy dd-MM-yyyy yyyy/MM/dd yyyy-MM-dd <requiredFont> Times New Roman <size>12 74
<requiredFont> Calibri <size>11 <requiredFont> Source Sans Pro Light <size>12 Literatura Reference Bibliografie 2 ´ Uvod Toleranˇ cn´ ı mez Unik´ atn´ ı zemˇ episn´ y ´ utvar (popis) Uˇ zivatelsk´ a dokumentace Lorem ipsum Ahoj nazdar Hledan´ y text 75
<pageNumber/>
76
Seznam obr´ azk˚ u ˇ ıslo C´
Jm´ eno
Strana
2.1
Hierarchick´a struktura uk´azkov´eho DOCX dokumentu
7
2.2
Vrstvy ODFDOM knihovny
14
5.1
Rozdˇelen´ı ˇcinnost´ı programu mezi vrstvy architektury
48
Obsah CD Pˇriloˇzen´e CD obsahuje tyto adres´aˇre: src – obsahuje soubory se vˇsemi zdrojov´ ymi k´ody aplikace. jar – obsahuje soubor DP Kupilik.jar, coˇz je spustiteln´a verze programu. D´ale je v nˇem d´avkov´ y soubor run.bat, pomoc´ı nˇehoˇz se program spouˇst´ı, a soubor READ ME.txt s n´avodem ke spuˇstˇen´ı.
ace. text – v souboru DP Kupilik.pdf je uloˇzena fin´aln´ı verze diplomov´e pr´ V adres´aˇri text src se nach´az´ı zdrojov´e soubory textu, kter´e byly vytvoˇreny v programu TeX. test files – obsahuje vˇsechny dokumenty z testovac´ı mnoˇziny.
77