Professional Documents
Culture Documents
!"#$%&'()+,-./012345<yA|
MASARYKOVA UNIVERZITA V BRNĚ
FAKULTA INFORMATIKY
BAKALÁŘSKÁ PRÁCE
Vladimı́r Schreiner
Brno, 2004
Prohlášenı́
Prohlašuji, že tato bakalářská práce je mým původnı́m autorským dı́lem, které jsem vypracoval
samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracovánı́ použı́val nebo
z nich čerpal, v práci řádně cituji s uvedenı́m úplného odkazu na přı́slušný zdroj.
ii
Shrnutı́
iii
Klı́čová slova
iv
Obsah
1 DocBook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1 Elektronické dokumenty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Vznik DocBooku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Transformace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1 XSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 XSL Transformace (XSLT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2.1 Model průběhu XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2.2 Možnosti XSLT šalbony . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.3 XSLT modes v DocBooku . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.4 Datový model XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.5 Výrazy nad XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.5.1 Výrazy XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2.6 Výstup XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.7 XSLT v praxi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2.7.1 Model funkce XSLT procesoru . . . . . . . . . . . . . . . . . . . . 15
2.2.7.2 Implementace XSLT procesorů . . . . . . . . . . . . . . . . . . . . 17
2.3 Rozlišovánı́ entit a XML Catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4 Formátovánı́ a formátovacı́ objekty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.5 Konkrétnı́ možnosti vizualizace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.5.1 HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5.2 XHTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5.3 HTML Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5.4 PDF a PS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5.4.1 FO definované v XSL . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5.4.2 FO systému LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3 Perzistence transformačnı́ch vstupů a výstupů . . . . . . . . . . . . . . . . . . . . . . . 22
3.1 XML:DB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2 XML:DB v praxi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.1 XML:DB API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.2 HTTP komunikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.3 XML:RPC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4 Aplikace DOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.1 Model aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.1.1 Tasklist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.1.2 Task . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.1.3 Instruction (Instrukce) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.1.4 DOPTransformer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.5 Postprocesor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.6 IODescriptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.7 Instruction Manager (Správce instrukcı́) . . . . . . . . . . . . . . . . . . . . 27
4.1.8 IOManager (Správce V/V) . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.9 Transformer Manager (Správce transformátorů) . . . . . . . . . . . . . . . 27
4.2 Koncepce V/V operacı́ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.3 Maven . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3.1 Klı́čové rysy Mavenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3.1.1 Project Object Model . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3.1.2 Závislosti a repositories . . . . . . . . . . . . . . . . . . . . . . . . 29
4.3.1.3 Plug-iny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1
4.3.2 Práce s Mavenem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3.3 POM - Deskriptor projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5 Závěr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Bibliografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2
Předmluva
Informačnı́ boom, charakterizujı́cı́ přinejmenšı́m poslednı́ dvě dekády, s sebou přinášı́ obrov-
skou a neustále rostoucı́ masu softwaru. Nedı́lnou částı́ takovýchto produktů je jejich doku-
mentace, která se měnı́ alespoň stejně dynamicky. Produkovat a distribuovat ji v papı́rové po-
době by bylo nejen nákladné a náročné, ale předevšı́m nesmyslné. Situace tedy otevı́rá prostor
dokumentům elektronickým. Oproti konvenčnı́m metodám vzniká při jejich použitı́ zásadnı́
problém: Jakým způsobem zobrazit informace o obsahu a vzhledu do binárnı́ soustavy použı́-
vané počı́tači? Odpovědı́ na tuto otázku je nepřeberné množstvı́ navzájem většinou naprosto
nekompatibilnı́ch formátů - tato situace ovšem nutně způsobuje určitý informačnı́ chaos. Cesta
ven vede jedině přes striktnı́ dodržovánı́ nadefinovaných standardů a doporučenı́.
Masově rozšı́řeným a respektovaným doporučenı́m je Extensible Markup Language (XML),
definovaný konsorciem W3C1 . XML se sice netýká přı́mo dokumentačnı́ch systémů (jeho mož-
nosti jsou mnohem širšı́), ovšem jednou z nejúspěšnějšı́ch oblastı́ jeho použitı́ se stal DocBook.
Práce si dává za cı́l poskytnout obecný náhled na problematiku elektronických dokumentů
a zdůraznit přednosti modelů postavených na XML, tedy předevšı́m DocBooku, v kontrastu
s proprietálnı́mi, komerčně protlačovanými formáty. Prvnı́ část přibližuje čtenáři koncepci XSL,
masově uznávané rodiny doporučenı́ konsorcia W3C, která definuje transformace nad XML
dokumenty. S pomocı́ XSL lze elegantně a pohodlně prezentovat DocBookové dokumenty širo-
kým spektrem vizuálnı́ch podob. Druhá část se potom zabývá možnostmi efektivnı́ho ukládánı́
a sdı́lenı́ XML dat, jakožto nedı́lné součásti praktického použitı́ každého formátu. Do centra
pozornosti stavı́ technologii XML:DB.
Praktickou součástı́ práce je aplikace DOP, jež se snažı́ být univerzálnı́m a rozšiřitelným
nástrojem využı́vajı́cı́m popsané technologie k transformacı́m DocBookových dokumentů ze
škály možných vstupů do množiny formátů sloužı́cı́ch k různým prezentačnı́m účelům. Jejı́ ze-
vrubný popis poskytuje poslednı́ část práce. Detailnějšı́ a vı́ce prakticky orientované informace
potom nabı́zı́ www stránka aplikace2 .
1. http://w3c.org/TR/2004/REC-xml-20040204/
2. http://www.fi.muni.cz/˜xschrein/dop
3
Kapitola 1
DocBook
Nutnost použı́vánı́ elektronických dokumentů vznikla jako reakce na dynamický vývoj ob-
lasti informačnı́ch technologiı́. Hlavnı́ výhodou takového dokumentu je, že respektuje mnohdy
jepičı́ život své platnosti a nezatěžuje okolı́, na rozdı́l od dokumentů papı́rových, velkým množ-
stvı́m zdrojů. Takový dokument lze poměrně efektivně a rychle měnit. Nesporným negativnı́m
důsledkem plynoucı́m z předchozı́ch pozitiv je pak, napřı́klad v kontrastu s knihou, minimálnı́
trvanlivost kulturnı́ hodnoty.
Základnı́mi vlastnostmi, které by dobrý dokumentačnı́ systém měl splňovat, jsou:
• nadčasovost
DocBook vznikl roku 1991 iniciativou HaL Computer Systems a nakladatelstvı́ O’Reilly. Origi-
nálnı́m záměrem bylo vytvořit jednotné SGML značkovánı́ pro výměnu unixových dokumen-
tacı́. V roce 1994 přebı́rá kontrolu nad jeho sestavovánı́m skupina Davenport Group, původně
zřı́zená nakladatelstvı́m O’Reilly. To už se DocBook předevšı́m kvůli rostoucı́mu DTD dostává
do podvědomı́ většı́ho množstvı́ uživatelů a velkých společnostı́ (mezi zakládajı́cı́mi členy
4
1.2. VZNIK DOCBOOKU
Davenport Group figurujı́ lidé z Novellu, Fujitsu, Hewlett-Packard aj.). DocBook začı́ná být
použı́ván pro generovánı́ tisknutelných výstupů.
Davenport Group zaniká roku 1998, iniciativa je předána výboru DocBook Technical Com-
mittee organizace OASIS, který se této činnosti věnuje dodnes. Portuje značkovánı́ i do XML
a vyvı́jı́ obě formy paralelně. V současné době je DocBook definován pomocı́ DTD pro XML
a SGML. K dispozici jsou ovšem i neoficiálnı́ verze pro RELAX NG a XML Schema. Přestože
je DocBook vhodný předevšı́m pro dokumentace k softwarovým a hardwarovým produktům,
jeho flexibilita umožňuje nasazenı́ při tvorbě téměř jakékoliv publikace.
5
Kapitola 2
Transformace
XML je doporučenı́m, které vzniklo z iniciativy konsorcia W3C1 . Dá se proto předpokládat, že
z produkce stejné instituce by mělo vzniknout i rozšı́řenı́ definujı́cı́ transformovatelnost, v kon-
textu DocBooku speciálně možnost realizace vizuálnı́ch (publikovatelných) podob dokumentu.
Tato myšlenka se jevı́ jako správná - rozšı́řenı́ se jmenuje XSL (Extensible Stylesheet Language).
2.1 XSL
Jazyk XSL měl být původně pouze jakýmsi staršı́m a chytřejšı́m sourozencem CSS, postu-
pem času se ale vyvinul v mimořádně silný prostředek, který nabı́zı́ formátovánı́ prezentace
(tedy funčnı́ ekvivalent CSS) pouze jako zlomek celkové funkčnosti. Svou koncepcı́ umožňuje
dokonale odstı́nit datový obsah původnı́ struktury od prezentačnı́ složky, přičemž jediným
1. http://www.w3c.org
6
2.2. XSL TRANSFORMACE (XSLT)
• zjednodušit použitı́
2. http://www.w3c.org/TR/xslt
7
2.2. XSL TRANSFORMACE (XSLT)
POZNÁMKA
Zatı́mco XSLT procesory pro XSLT ver. 1.0 jsou pohodlně dostupné pro
velkou většinu modernı́ch programovacı́ch jazyků (a to i jako open source),
u XSLT ver. 2.0 tomu tak zdaleka nenı́. Důvod lze hledat jednak v možnosti
změn v XSLT 2.0, které je stále ve stadiu working draft, přı́padně v relativně
značném nárůstu velikosti tohoto dokumentu oproti verzi 1.0, což se zcela
jistě odrážı́ v komplikovanosti implementacı́.
Zásadnı́mi pojmy oblasti XSLT jsou source tree (XML strom reprezentujı́cı́ zdrojový do-
kument), result tree (výsledný XML strom) a stylesheet (styl definujı́cı́ přepisovacı́ pravidla
přı́slušné transformace).
odkazujı́ na nějaký dalšı́ uzel, je pro něj nalezeno odpovı́dajı́cı́ přepisovacı́ pravidlo, je pro něj
instanciována a paralelnı́m způsobem zpracována nová šablona.
Z popsaného principu vyplývá, že ne všechny uzly, pro které existujı́ přepisovacı́ pravidla,
musı́ být za pomoci těchto pravidel transformovány. K přepisu je mimo existenci pravidla nutný
ještě odkaz (tedy předánı́ řı́zenı́) z některého zpracovávaného elementu. Drobným háčkem XSLT
je, že pokud šablona explicitně neuvádı́ pravidlo pro zpracovánı́ kořenového elementu, použije
se automaticky:
<xsl:template match=”/”>
<xsl:apply-templates/>
</xsl:template>
<article>
<section id=”sekce_1”>
<title>Sekce</title>
<para>
Odstavec 1
</para>
</section>
</article>
8
2.2. XSL TRANSFORMACE (XSLT)
<xsl:template match=”section”>
<div>
<xsl:text>[id sekce = </xsl:text>
<xsl:value-of select=”@id”/>
<xsl:text>]</xsl:text>
</div>
</xsl:template>
<xsl:template match=”title”>
<b> <xsl:value-of select=”./text()”/> </b>
</xsl:template>
<xsl:template match=”para”>
<p>
<xsl:value-of select=”text()”/>
</p>
</xsl:template>
</xsl:stylesheet>
Prvnı́m krokem při zpracovánı́ je výběr přepisovacı́ho pravidla pro kořenový element struk-
tury (v tomto přı́padě article), takové pravidlo však očividně neexistuje. Použije se tedy
zmı́něný rys, jenž při absenci přepisovacı́ho pravidla pro kořenový element automaticky zpra-
covává jeho děti. Jediným přı́mým potomkem kořenového elementu je section, pro něž
přepisovacı́ pravidlo existuje. Šablona je tedy instanciována a přı́slušné přepisovacı́ pravidlo je
vyhodnoceno. Během vyhodnocovánı́ jsou literály, jež nejsou instrukcemi, ponechávány jako
výstup (v tomto přı́padě pouze <div> a </div>), elementy xsl:text majı́ de facto stejný
efekt. Element xsl:value-of je nahrazen hodnotou atributu id elementu section. V tomto
mı́stě zpracovánı́ končı́, jelikož žádný dalšı́ přı́mý potomek kořenového elementu neexistuje a
element section nepředal řı́zenı́ žádnému ze svých potomků. Výstupem je tedy:
<div>
[id sekce = sekce_1]
</div>
Z XSLT šablony je ale zřejmé, že kromě přepisovacı́ho pravidla pro section existujı́ i dalšı́
pro elementy para a title. Aby je bylo možné použı́t, je nutné upravit pravou stranu pravidla
pro vzor section do následujı́cı́ podoby:
<xsl:template match=”section”>
<div>
<xsl:text>[id sekce = </xsl:text>
<xsl:value-of select=”@id”/>
<xsl:text>]</xsl:text>
<xsl:apply-templates/>
</div>
</xsl:template>
9
2.2. XSL TRANSFORMACE (XSLT)
current node list jej přidává kořenový element jako svého přı́mého potomka) i uzly title a
para. Výsledný dokument vypadá takto:
<div>
[id sekce = sekce_1]
<b>Sekce</b>
<p>
Odstavec 1
</p>
</div>
10
2.2. XSL TRANSFORMACE (XSLT)
5. Element třı́děnı́
6. Elementy pro definici proměnných - Oba dva elementy majı́ kromě „přepisovatelnosti“
všechny vlastnosti stejné. Platı́ v kontextu, ve kterém byly zavedeny, a jeho potomcı́ch;
po opuštěnı́ tohoto rozsahu zanikajı́.
• xsl:param - Definuje parametr. Jeho hodnota může být během zpracovánı́ měněna.
• xsl:variable - Definuje proměnnou. Jejı́ hodnota je neměnná. Tento pro proměnnou
poněkud netypický rys je důsledkem snahy autorů XSLT o dodrženı́ funkcionál-
nı́ho paradigmatu, které reaguje na situace primárně podle přepisovacı́ch pravidel,
ne podle aktuálnı́ho stavu proměnných.
11
2.2. XSL TRANSFORMACE (XSLT)
zpracovánı́ je provedeno pomocı́ pravidel, jejichž mód odpovı́dá. Naopak, pokud element
xsl:apply-templates žádný mód nedefinuje, použijı́ se pravidla bez uvedeného módu.
Touto metodou je možné použı́t jednu šablonu pro vı́ce účelů bez nutnosti nějakých zákroků
razantnějšı́ho charakteru.
• string value - řetězec popisujı́cı́ každý uzel. Některé typy uzlů tuto hodnotu přı́mo
obsahujı́, u jiných je počı́tána ze string-value jejı́ch potomků.
• expanded name - dvoudı́lný popisovač uzlu sestávajı́cı́ z lokálnı́ části (local part) a uri
jmenného prostoru (namespace URI), které může být prázdné.
• document order - na každém uzlu stromu je definováno pořadı́, které odpovı́dá po-
řadı́ výskytu prvnı́ho znaku tohoto uzlu v původnı́m XML. Toto uspořádánı́ zajišt’uje
korektnı́ reprezenzaci dokumentu.
• parent - každý uzel mimo kořenový má přiřazeného právě jednoho rodiče.
• root node - uzel reprezentujı́cı́ kořen stromové struktury. V ose jeho potomků nalezneme
mimo jiné i instrukce pro zpracovánı́ (Processing instructions) a komentáře (Comments),
které jsou definovány před začátkem a po konci těla dokumentu.
• element node - uzel, který existuje pro každý element původnı́ho dokumentu. Element
node může být identifikován v rámci dokumentu jedinečným ID, které odpovı́dá hod-
notě atributu typu ID pro přı́slušný element.
• attribute node - reprezentuje atribut elementu. Zajı́mavé je, že attribute node má ro-
diče (parent) v elementu, v rámci něhož je definován, kdežto element svoje atributy
reprezentované pomocı́ attribute nodes jako potomky (descendants) nedefinuje.
• processing instruction node - tı́mto typem uzlu jsou reprezentovány všechny instrukce
pro zpracovánı́ (processing instruction) mimo deklaraci typu dokumentu a deklaraci
XML, XSLT je ignoruje.
12
2.2. XSL TRANSFORMACE (XSLT)
4. http://www.w3c.org/TR/xpath
13
2.2. XSL TRANSFORMACE (XSLT)
• parent - obsahuje rodiče kontextového uzlu, pokud tento uzel rodiče má
• preceding - osa seskupujı́cı́ všechny dřı́ve definované uzly mimo přı́slušnı́ky osy ances-
tor, attribute nodes a namespace nodes
Druhou složkou navigačnı́ho kroku jsou node testy (node tests). Node testem je de facto kvalifi-
kované jméno (jméno včetně jmenného prostoru) uzlu(ů), který má být z přı́slušné osy vybrán.
Klı́čovým kritériem výběru je také typ tohoto uzlu. Pro každou osu je totiž definován typ jejich
prvků (principal node type), který se musı́ shodovat s typem vybı́raného elementu. Typy jsou
vzhledem k osám následujı́cı́:
Mı́sto kvalifikovaného jména je navı́c možné použı́t symbol *, což znamená výběr všech dostup-
ných uzlů odpovı́dajı́cı́ho typu kontextového uzlu. Ekvivalentně se dajı́ použı́t funkce text,
comment, processing-instruction s eventuálnı́m parametrem reprezentujı́cı́m jméno in-
strukce pro zpracovánı́ a node pro výběr všech dostupných uzlů daného typu.
Poslednı́ možnostı́ filtrovánı́ výsledku jsou predikáty. Predikátem může být jakýkoliv výraz
jazyka XPath ve své nejobecnějšı́ podobě. Pokud je návratovou hodnotou logická hodnota, je
chovánı́ intuitivnı́. Jedná-li se o čı́slo, pak je výraz platný pokud čı́slo odpovı́dá pořadı́ uzlu
v kontextu. Ostatnı́ typy návratových hodnot jsou zobrazovány na dvouprvkovou množinu
s true/false pomocı́ XPath funkce boolean().
Množina uzlů, kterou navigačnı́ krok produkuje jako výstup, je sestavena tak, že jsou
nejdřı́ve vybrány uzly na přı́slušné ose, poté jsou odstraněny ty, které neprojdou node testy.
Poslednı́m kritériem výběru je iterativnı́ filtrovánı́ přes predikáty.
Uvedená koncepce syntaxe je sice puntičkářsky přesná, pro běžné použitı́ ovšem mı́rně
neohrabaná. Proto byla do syntaxe jazyka XPath zavedena jistá zjednodušenı́:
• osa child je považována za implicitnı́, proto při navigaci v této ose může být jejı́ název
vynechán
• při navigaci v ose attribute lze namı́sto attribute:: použı́t pouze symbol @
• použitı́ // reprezentuje množinu všech uzlů struktury, nahrazuje tedy neohrabaný výraz
/descendant-or-self::node()/
• symbol .. nahrazuje odkaz na rodiče kontextového uzlu, jež v původnı́ syntaxi repre-
zentuje výraz parent::node()
Pro ilustraci použitı́ location paths a zjednodušené syntaxe je uvedeno několik přı́kladů:
výběr druhého odstavce (v DocBooku reprezentovaného elementem para) kontextového
uzlu původnı́ a zjednodušenou sytaxı́
child::para[position()=1]
para[position()=1]
14
2.2. XSL TRANSFORMACE (XSLT)
child::chapter[child::title=’Introduction’]
chapter[@title=’Introduction’]
výběr přı́mých potomků jménem chapter, kteřı́ majı́ přı́mého potomka title
child::chapter[child::title]
chapter[title]
• encoding - Nabı́zı́ možnost změnit kódovánı́, povolené hodnoty atributu (tedy znakové
sady) jsou implementačně specifické
• standalone - Pokud je atribut nastaven na yes, vložı́ XSLT procesor do dokumentu jeho
deklaraci
15
2.2. XSL TRANSFORMACE (XSLT)
16
2.3. ROZLIŠOVÁNÍ ENTIT A XML CATALOGS
třebné informace z pamět’ové reprezentace cı́lové stromové struktury a konstruuje z nich vý-
sledný výstupnı́ datový proud. Jako taková může brát ohled na formát výstupu, použı́t např.
jiné rysy pro HTML a XML výstup.
• Xalan
- vyvı́jen nadacı́ Apache
- verze pro Javu a C++
- implementuje XSLT 1.0, XPath 1.0
- open-source
• Saxon
- javová aplikace
- open source
- XSLT 1.0, 2.0 (verze 2.0 nekomerčnı́ bez podpory XML Schema)
- XPath 1.0, 2.0 (verze 2.0 nekomerčnı́ bez podpory XML Schema)
• Sablotron
- implementován v C++
- wrappery pro použitı́ v mnoha skriptovacı́ch jazycı́ch (Perl, PHP, Ruby, ...)
- XSLT 1.0
- XPath 1.0
- open-source
• XT
- javová implementace
- nekompletnı́ XSLT 1.0
- rychlá implementace
• libxslt
- knihovna jazyka C, možnost použitı́ z přı́kazové řádky (xsltproc)
- zakomponovaná podpora XML Catalogs
- XSLT 1.0
- XPath 1.0
Koncepce XML dovoluje autorům a návrhářům těchto struktur zachovávat modularitu refe-
rencovánı́m externı́ch entit, předevšı́m definic DTD. Touto metodou je docı́leno univerzálnosti
použitı́. Komplikace nastává v situaci, kdy referencovaný zdroj nenı́ kvůli nefunkčnosti nebo
nedostupnosti přenosového média k dispozici. Nepřı́jemná může být také nutnost čı́st celý
externı́ dokument znovu při každém použitı́ aplikace (např. XML validátoru).
Možným řešenı́m tohoto problému je referencovánı́ pomocı́ symbolických jmen namı́sto
adresace. XML definuje možnost použitı́ veřejných identifikátorů (public identifiers), jinou
možnostı́ jsou URN (Universal Resource Names) - podmnožina URI. Obě alternativy jsou
postaveny na koncepci jedinečného identifikátoru zdroje, který neřı́ká nic o fyzickém umı́stěnı́
konkrétnı́ho souboru.
17
2.4. FORMÁTOVÁNÍ A FORMÁTOVACÍ OBJEKTY
K přiřazenı́ adresy takovémuto jménu sloužı́ entity resolver. Zažitým a nejčastěji použitým
je entity resolver OASIS Catalogs vyvı́jený OASIS Entity Resolution Technical Committee5 .
Ten, pokud je korektně svázán s XML parserem, nahrazuje reference na entity těmi, které jsou
nadefinovány v jeho konfiguračnı́ch souborech - katalozı́ch. Katalog obsahuje jednak definici
chovánı́ resolveru při vyhledávánı́ v něm, klı́čovou složkou je pak množina záznamů mapu-
jı́cı́ch veřejné identifikátory a URN na přı́slušná URI. Touto cestou mohou být centralizovaně
nastavovány zdroje externı́ch entit.
V současné době pracuje tento výbor na sestavenı́ standardnı́ho formátu. Prozatı́m jsou
použı́vány následujı́cı́:
• OASIS TR9401 Catalogs - formát s podobnou strukturou jako XML Catalogs, ovšem bez
přı́slušného značkovánı́ na čistě textové bázi. Následuje sémanticky stejná konstrukce
jako u XML Catalogs, podobnost se značnovaným dokumentem je zřejmá:
PUBLIC ”-//OASIS//DTD DocBook XML V4.3//EN” ”docbookx.dtd”
Druhou fázı́ modelu XSL je generovánı́ konkrétnı́ch vizuálnı́ch výstupů na základě formáto-
vacı́ch objektů. V tomto stadiu se proces dostává z oblasti sémantického značkovánı́ spı́še do
oblasti typografie, popis je transformován v prezentaci.
Pojem formátovacı́ objekt je poměrně ošidným, může nabývat mnoha různých podob.
Obecně se ale jedná o typografickou abstrakci popisujı́cı́ formát svého obsahu. Přestože exis-
tuje definice standardnı́ch formátovacı́ch objektů, je samozřejmě možné použı́t formát vlastnı́.
Vše záležı́ na stylu použitém při XSLT transformaci. Jako přı́klady je možné uvést LATEXový
zdrojový kód (jeho značky nejsou navı́c ani formátu XML), přı́padně HTML, které se poně-
kud nezdravě vyvinulo do značkovánı́ popisujı́cı́ho jak strukturu, tak vzhled. Formátovacı́m
procesorem HTML je potom prohlı́žeč.
Standardnı́ návrh formátovánı́ a struktury formátovacı́ch objektů popisuje přı́mo dopo-
ručenı́ W3C týkajı́cı́ se XSL6 . Výsledku je dosaženo konstrukcı́ stromu oblastı́ (area tree) -
kompletnı́ho popisu geometrického rozvrženı́ budoucı́ho dokumentu. Area tree je konstruo-
ván na základě stromu formátovacı́ch objektů, který vzniká XSLT transformacı́ a je sestaven
z elementů definovaných jmenným prostorem xsl7 . Struktura area tree nenı́ konstruována jed-
noprůchodově, vzniká upřesňovánı́m informacı́ na základě zpracovaného obsahu.
Naprosto zásadnı́m rysem, který stavı́ DocBook do pozice velmoci na mapě dokumentačnı́ch
systémů, je kardinalita množiny generovatelných výstupů. To, že samotný dokument nespe-
cifikuje nic o formátovánı́ budoucı́ vizuálnı́ podoby, umožňuje odstı́nit veškerou formátovacı́
5. www.oasis-open.org/committees/entity/
6. http://www.w3.org/TR/xsl
7. http://www.w3.org/1999/XSL/Format
18
2.5. KONKRÉTNÍ MOŽNOSTI VIZUALIZACE
aktivitu od logické struktury dokumentu. Tato sekce poskytne náhled na konkrétnı́ řešenı́ trans-
formacı́ DocBookových dokumentů do vizuálnı́ch podob v závislosti na výstupnı́m formátu.
Klı́čovou sekcı́ transformace DocBookového dokumentu je, jak již bylo zmı́něno, XSLT
transformace do patřičných formátovacı́ch objektů. Použitý styl tedy do značné mı́ry definuje,
jakým směrem se bude transformace ubı́rat. Kvalitnı́ a dobře přizpůsobitelnou sadu XSLT
stylů vyvı́jı́ sám autor DocBooku Norman Walsh. Pomocı́ těchto stylů je možné produkovat:
standardnı́ FO, HTML, XHTML, HTML help, Java help. Využitı́ těchto stylů bude popisovat
prvnı́ část této sekce.
2.5.1 HTML
HTML (HyperText Markup Language) je konkrétnı́m přı́padem úspěšné aplikace značkovacı́ho
jazyka, přestože v době svého vzniku vládl ještě rodič XML, totiž SGML. Původnı́ koncepcı́
bylo vytvořit formát pro psanı́ technických dokumentacı́. Přidánı́m podpory hypertextu a
multimediálnı́ch rozšı́řenı́ motivovalo řadu prodejců softwaru k učebnicovému zneužı́vánı́
tohoto formátu. Striktně formálnı́ a do značné mı́ry puritánské konsorcium W3C tento fakt
těžce nese a reaguje novými, přı́snějšı́mi doporučenı́mi. Bez ohledu na to jde o formát, který
byl rozmachem Internetu katapultován do pozic, o jakých by se mu dřı́ve ani nezdálo. Jeho
rozšı́řenı́ je dáno předevšı́m následujı́cı́mi aspekty:
• HTML klient (prohlı́žeč) je aplikacı́, která je dostupná prakticky pro všechny platformy.
Autor HTML dokumentu si může být jistý téměř „univerzálnı́“ čitelnostı́.
• HTML dokumnety neobsahujı́ přı́liš mnoho metadat, tj. vzhledem ke svému obsahu
nejsou přı́liš velké
Jelikož je HTML pouze aplikacı́ XML, postačuje pro transformaci patřičná XSLT šablona.
HTML tagy výsledného dokumentu jsou totiž formátovacı́mi objekty, pomocı́ kterých prohlı́-
žeč renderuje zobrazovaný obsah. K HTML transformacı́m sloužı́ styl html/docbook.xsl
(relativně vzhledem ke kořenovému adresáři instalace balı́ku).
V situacı́ch jako prezentace může přijı́t vhod i styl html/chunk.xsl - ten zajistı́ mimo
transformace do HTML i patřičné rozdělenı́ do vzájemně odkazovatelných souborů. Použitı́ to-
hoto stylu je nepřı́jemné v tom, že na rozdı́l od šablon produkujı́cı́ch pouze jeden soubor ukládá
svůj výstup do aktuálnı́ho adresáře, ne tam, kam jej naviguje výstupnı́ parametr procesoru.
Generovaným výstupům lze samozřejmě přiřadit kaskádové styly, přičemž lze využı́t toho,
že Walshovy styly generujı́ u některých html tagů atribut class, jehož hodnotou je název Doc-
Bookové struktury, z nı́ž byl pořı́zen. Obdržený výsledek bude kromě syntaktické korektnosti
oslňovat i pohledným designem.
2.5.2 XHTML
XHTML (Extensible HyperText Markup Language) je dalšı́ aktivitou W3C8 ; Souvisı́ se snahou
konsorcia přiblı́žit HTML jeho kořenům, kterými je značkovánı́ bez ústupků postavené na XML
(původně SGML). XHTML je HTML 4 modifikované tak, aby dodržovalo doporučenı́ XML. Od
této aktivity si W3C slibuje předevšı́m kompatibilitu s XML nástroji.
Transformace do XHTML je realizovatelná použitı́m stylu xhtml/docbook.xsl a xhtml/
chunk.xsl s významem obdobným jako u HTML transformacı́.
8. http://w3c.org/TR/xhtml1
19
2.5. KONKRÉTNÍ MOŽNOSTI VIZUALIZACE
2.5.4 PDF a PS
Nejelegantnějšı́m demonstracı́ možnostı́ DocBooku je zcela jistě transformace do tisknutelné
formy. Pohled na dokonale vysázený a zalámaný dokument na chvilku navodı́ utopickou vizi
světa prostého sazečů zı́skavšı́ch svoji kvalifikaci několikaminutovou instalacı́ kancelářského
balı́ku. Uvádı́m dvě cesty, kterými se dá kýžená iluze navodit.
9. http://msdn.microsoft.com/library/tools/htmlhelp/chm/HH1Start.htm
10. http://xml.apache.org/fop/
11. http://www.renderx.net/Content/tools/xep.html
12. http://db2latex.sourceforge.net/
20
2.5. KONKRÉTNÍ MOŽNOSTI VIZUALIZACE
následujı́cı́mi vlastnostmi:
+ Dokonalý výsledný efekt dosažený použitı́m „nadčasového“ sázecı́ho systému
+ Možnost modifikovat vygenerovaný LATEXový zdrojový kód
+ Všechny komponenty transformačnı́ho procesu jsou k dispozici v plné kvalitě zdarma
- Nutná částečná znalost LATEXu
- Nutná instalace LATEXu (oproti javovým aplikacı́m ne úplně triviálnı́ záležitost)
- Přı́stup poměrně vzdálený XML problematice
Tento přı́stup lze považovat za „labužnický“, lze s nı́m dosáhnout nejlepšı́ch výsledků, které
jsou částečně kompenzovány vyvinutým úsilı́m při seznamovánı́ se s problematikou.
21
Kapitola 3
3.1 XML:DB
S cı́lem navrhnout koncepci databáze šité na mı́ru formátu XML přišla v roce 2000 iniciativa
XML:DB1 . Jejı́mi aktivitami jsou předevšı́m:
• diskuze o všech zásadnı́ch problémech databázı́ nad XML, z nich vznikajı́ přı́slušná
doporučenı́
• návrh databázového aplikačnı́ho rozhranı́
• návrh jazyka XUpdate pro modifikace XML dat
• jazyk SiXDML (Simple XML Data Manipulation Language), který má být jakýmsi ekvi-
valentem SQL známým z relačnı́ch databázı́. Navı́c definuje vlastnı́ API, které má být
modernějšı́ a vı́ce sofostikovanou alternativou standardnı́ho XML:DB API
• do budoucna je navržena i možnost zařadit do koncepce databáze i Access Control Listy
Iniciativa dále definuje tři možné modely XML databázı́:
• Nativnı́ (Native XML Database - NXD): Tato databáze je postavena na myšlence XML do-
kumentu jako elementárnı́ zpracovávané jednotky (paralela řádku u relačnı́ databáze).
Dále vyžaduje definici nějakého modelu, pomocı́ kterého data v dokumentu identifikuje
(elementy, atributy, PCDATA). Důležitou myšlenkou je odstı́něnı́ od konkrétnı́ imple-
mentace databázového enginu, data můžou být např. mapována na relačnı́ databázi
nebo filesystem.
• Připravenou (XML Enabled Database - XEDB): Koncepce vycházejı́cı́ z myšlenky kon-
verznı́ vrstvy nad libovolnou databázı́. Tato vrstva mapuje XML dokumenty na data
specifická pro danou databázi, v opačném směru z těchto dat konstruuje nový XML
dokument. Z popsaného postupu plyne, že výstupnı́ dokument nemusı́ být shodný
s dokumentem na vstupu. Tato koncepce poskytuje prostor autorů produktů třetı́ strany
(3rd party tools) vyvı́jet nadstavby nad robustnı́mi databázemi.
• Hybridnı́ (Hybrid XML Database - HXD): Databáze přichylujı́cı́ se k jednomu z před-
chozı́ch modelů v závislosti na požadavcı́ch klienta.
1. http://xmldb-org.sourceforge.net/index.html
22
3.2. XML:DB V PRAXI
Jako aplikačnı́ rozhranı́ připravené přı́mo autory XML:DB by mělo být preferovanou metodou
pro komunikaci s databázı́. Jejı́ použitı́ zaručuje předevšı́m kompatibilitu, jakožto základnı́
prvek pro psanı́ flexibilnı́ch aplikacı́. Základnı́mi stavebnı́mi kameny tohoto komunikačnı́ho
modelu jsou ovladače databáze (Drivers), kolekce (Collections), zdroje (Resources) a služby
(Services), přičemž celý systém funguje v klientské aplikaci následovně:
Aplikace musı́ nejdřı́ve vytvořit instanci databázového ovladače. Jedná se o implementaci
rozhranı́ org.xmldb.api.base.Database dodanou výrobcem přı́slušné databáze . Tato
instance je předána třı́dě DatabaseManager, která zajišt’uje správu a distribuci ovladačů
vzhledem k definovaným identifikátorům.
Uživatalská aplikace nynı́ může žádat DatabaseManager o poskytnutı́ kolekce pro přı́-
slušné URI. URI má strukturu xmldb:id databáze://adresa hostitele/databáze/kolekce, při-
čemž id databáze sloužı́ DatabaseManageru k identifikaci databázového ovladače. Kolekce je
potom přı́stupovým bodem pro samotnou komunikaci.
//Zı́skánı́ kolekce
Collection col =
DatabaseManager.getCollection(”xmldb:exist://localhost/exist/”);
Samotný dokument (tj. zdroj - resource) zı́skává aplikace z přı́slušné kolekce tak, že jej iden-
tifikuje pomocı́ cesty XML stromu, jejž databáze uchovává. Zdroj obecně může být nejen texto-
vého typu XMLResource, ale i binárnı́ho BinaryResource. Vzhledem k tomu, že předpoklá-
dáme práci s textovými DocBookovými dokumenty, můžeme přetypovat na XMLResource.
Druhou možnostı́ je požádat o zcela novou množinu uzlů výrazem jazyka XQuery/XPath.
Schopnost dotazovánı́ obecně nenı́ nutnou součástı́ všech implementacı́ XML:DB API, eXist ji
však nabı́zı́. Je službou (Service), na jejı́ž dostupnost se má klientská aplikace možnost zeptat a
přizpůsobit tak své chovánı́.
2. http://exist.sourceforge.net/
23
3.2. XML:DB V PRAXI
//vykonánı́ dotazu
ResourceSet result = service.query( queryString);
while(i.hasMoreResources()) {
Resource r = i.nextResource();
System.out.println((String)r.getContent());
}
• POST nabı́zı́ možnost být univerzálně použit pro libovolnou situaci, která je popsána
strukturou v těle požadavku
3.2.3 XML:RPC
Model XML:RPC3 vznikl jako specifikace umožňujı́cı́ aplikacı́m běžı́cı́m v různých prostředı́ch
a na různých operačnı́ch systémech komunikovat přes protokol HTTP s využitı́m XML. Ko-
munikace probı́há tak, že aplikace v roli klienta vytvořı́ XML dokument s předem definovanou
strukturou obsahujı́cı́ jméno volané vzdálené procedury společně s jejı́mi parametry, zašle jej
jako HTTP POST request serveru; procedura je patřičně vyhodnocena a opět jako XML zaslána
zpět klientovi.
EXist obsahuje široké spektrum vzdáleně volatelných procedur, které jsou definovány roz-
hranı́m org.exist.xmlrpc.RpcAPI. Vše, co potřebuje klientská aplikace, je implementace
XML:RPC. Následujı́cı́ ilustračnı́ přı́klad zı́skávánı́ jednoduchého dokumentu pomocı́ javové
XML:RPC implementace instituce Apache4 .
// nastavenı́ implicitnı́ho kódovánı́ komunikace
org.apache.xmlrpc.XmlRpc.setEncoding(”UTF-8”);
3. http://www.xmlrpc.com/
4. http://ws.apache.org/xmlrpc/
24
3.2. XML:DB V PRAXI
Obecně lze XML:RPC řešenı́ považovat za skvěle uplatnitelné vzhledem ke své interope-
rabilitě. Toto tvrzenı́ podporuje i fakt, že model XML:RPC využı́vá i eXistová implementace
XML:DB API.
25
Kapitola 4
Aplikace DOP
Aplikace DOP vznikla jako elektronická komponenta tohoto textu prakticky ilustrujı́cı́ popsaný
model transformacı́ DocBooku. Jejı́m hlavnı́m cı́lem je portabilita, rozšiřitelnost, schopnost
poskytnout pohodlné uživatelské rozhranı́ i možnost dávkového ovládánı́.
Celá aplikace je tedy demonstracı́ transformačnı́ho modelu XSL. Je komletně javová, XSLT
zajišt’uje transformačnı́ engine Saxon. Oproti standardnı́m konzolovým rozhranı́m XSLT pro-
cesorů integruje možnost využitı́ širšı́ palety použitelných vstupů a výstupů: soubor, množinu
souborů specifikovanou pomocı́ wildcards, URL a XML:DB zdroj. Přestože výchozı́m uživatel-
ským rozhranı́m je swingové GUI, nabı́zı́ se uživateli možnost použitı́ z přı́kazové řádky. Dı́ky
použitému systému lze generovat dávky, jež lze poté spouštět pomocı́ dávkového rozhranı́. Pro
parsovánı́ XML zdrojů je použı́ván parser Xerces2 (předevšı́m pro svou schopnost validovat
vstup), integrována je i podpora XML Catalogs.
4.1.1 Tasklist
Navzdory svému názvu nenı́ pouze seznamem objektů Task. Integruje v sobě předevšı́m en-
gine, který zajišt’uje shromážděnı́ všech potřebných informacı́ pro realizaci XSLT transformace
a na jejich základě transformaci realizuje. Navı́c umožňuje okolnı́m komponentám registraci
posluchače událostı́ typu DOPEvent, DOPListeneru. Do tohoto posluchače jsou zaznamená-
vány události souvisejı́cı́ s manipulacı́ obsahu Tasklistu stejně jako události při jeho zpracovánı́
(transformaci).
4.1.2 Task
Je v kontextu DOPu jakousi jednotkou zpracovánı́ - popisuje transformaci jednoho vstupu (který
může ovšem obsahovat vı́ce konkrétnı́ch dokumentů) na základě jedné instrukce. Obsahuje
předevšı́m reference na objekty popisujı́cı́ vstup, výstup a instrukci.
Komponenta popisujı́cı́ XSL transformaci. XSLT je reprezentována URL přı́slušné stylové ša-
blony, pomocı́ které bude transformace prováděna. Volitelnou součástı́ je pak definice URL
postprocesoru; jejı́ volitelnost vyplývá z možného přenesenı́ tohoto kroku na prohlı́žeč cı́lo-
vého formátu (přı́pad HTML). Instrukce navı́c eviduje seznamy parametrů XSLT transformace,
které ji ovlivňujı́ v duchu rozhranı́ TRaX, seznam výstupnı́ch parametrů předávaných transfor-
mátoru (Výstup XSLT) a eventuálně seznam parametrů postprocesoru.
26
4.1. MODEL APLIKACE
4.1.4 DOPTransformer
4.1.5 Postprocesor
Komponenta, která se snažı́ vyřešit ošidný problém platformně nezávislé realizace zpracovánı́
formátovacı́ch objektů. Problémem je totiž široké spektrum možných procesorů formátovacı́ch
objektů v kontrastu s XSLT, které může být provedeno jednı́m XSLT procesorem. DOP řešı́
situaci použitı́m Antu - tato utilita umožňuje ze svých platformně nezávislých skriptů volat
libovolnou posloupnost operacı́, zvláště tedy spouštět procesor formátovacı́ch objketů. DOP
spouštı́ postprocesor volánı́m posloupnosti antových třı́d s URL přı́slušného popisovače. DOP
předává Antu následujı́cı́ parametry:
• to - soubor, do kterého má být prezentace provedena, ten je poté zpracováván výstup-
nı́mi rutinami DOPu
4.1.6 IODescriptor
Obecná třı́da evidujı́cı́ informace nutné pro vytvořenı́ konkrétnı́ instance vstupnı́ nebo výstupnı́
procedury. Tento prostřednı́k mezi uživatelem a konkrétnı́ instancı́ vstupnı́ nebo výstupnı́ třı́dy
byl zaveden hlavně kvůli možnosti průhledněji zobrazit informace o přı́slušném zdroji do
souboru s definicemi. Obsahuje klı́č identifikujı́cı́ třı́du realizujı́cı́ operaci a seznam parametrů
pro korektnı́ funkčnost třı́dy (např. cestu k souboru, přı́stupové jméno do databáze, ...)
Informace o instrukcı́ch, které jsou jinak pouze popisovači bez jakékoli funkčnosti, jsou aplikacı́
DOP při jejı́m spuštěnı́ načı́tány z konfiguračnı́ho souboru. Tyto informace shromažd’uje a
poskytuje ostatnı́m komponentám třı́da Instruction Manager.
Podobnou funkci jako Instruction Manager má i IOManager. Koexistuje ve dvou instan-
cı́ch - pro vstup a výstup. Mimo evidenci popisovačů V/V, objektů IODescriptor, představuje
prostředek pro instancializaci konkrétnı́ch vstupně/výstupnı́ch třı́d.
Model funkce XSLT procesoru zmiňuje netriviálnı́ dávku systémového času, který je potřebný
pro přı́pravu funkceschopného transformátoru. Aplikace DOP zohledňuje tento aspekt třı́dou
Transformer Manager. Ta reaguje na žádosti okolnı́ch komponent a pro klı́če (kterými jsou
URL) vytvářı́ objekty DOPTransformer. Ty ovšem nejsou po použitı́ zahazovány, ale evido-
vány. Dalšı́ dotaz na shodné URL je proto vyhodnocen nepoměrně rychleji. Tento rys uživatel
27
4.2. KONCEPCE V/V OPERACÍ
ocenı́ předevšı́m při dávkovém zpracovánı́ vı́ce zdrojů jednou šablonou nebo při zpracovánı́
opakovaném v rámci jednoho běhu aplikace.
Aplikace po svém spuštěnı́ parsuje konfiguračnı́ XML soubor a pomocı́ událostı́ SAX kon-
struuje obsah InstructionManageru a IOManagerů. Uživatel potom pomocı́ přı́slušného
rozhranı́ vytvořı́ novou instanci Tasklistu, na základě evidovaných instrukcı́ a specifiková-
nı́m parametrů vstupů a výstupů jej naplňuje Tasky.
K transformaci dojde spuštěnı́m metody process. Iterativně jsou procházeny všechny
Tasky. Zpracovánı́ Tasku začı́ná otevřenı́m zdroje a cı́le, následně je volán TransformerManager
s URL referencujı́cı́m přı́slušnou XSLT šablonu. Jelikož TransformerManager nenı́ připra-
ven pro vı́cevláknové použitı́, je možné, že nenı́ v danou chvı́li k dispozici. V tomto přı́-
padě aplikace čeká po dobu definovanou v konfiguračnı́m souboru a pokusı́ se přistoupit
k TransformerManageru znovu. Na úspěšně zapůjčený DOPTransformer reaguje Tasklist
jeho konfiguracı́ pomocı́ parametrů a vlastnostı́ výstupu. Úspěšná konfigurace je poslednı́m
krokem před spuštěnı́m samotné XSLT transformace. Ta může být spouštěna vı́cenásobně vzhle-
dem k možnosti vı́ce vstupnı́ch dokumentů (např. v důsledku použitı́ wildcards). Následuje
transformace. Předepisuje-li instrukce, podle nı́ž se transformuje, postprocesing je podle popsa-
ného modelu spuštěn Ant. Pro komunikaci s nı́m použı́vá DOP dočasné soubory, filesystémové
cesty k nim, upravené podle syntaxe použitého operačnı́ho systému, předává DOP antovému
skriptu proměnnými from a to.
Výsledek transformace je předán výstupnı́ třı́dě ke zpracovánı́, TransformerManageru je
vrácen DOPTransformer. Konstrukcı́ půjčovánı́ a navracenı́ je na úrovni TransformerManageru
zaručen nejen unikátnı́ přı́stup, tj. eliminace nežádoucı́ho vı́cevláknového přı́stupu, ale i mož-
nosti konfigurace DOPTransformeru bez obav o zásah do konfigurace použı́vané jiným vlák-
nem. Použité Tasklisty nemusı́ být záležitostı́ jednoho spušntěnı́. Aplikace obsahuje konstrukce
pro perzistentnı́ ukládánı́ Tasklistů do XML souborů lokálnı́ho filesystému.
<input classname=”dop.io.XMLDBResourceObtainer”>
<name>XMLDB</name>
<methodname_parameters>
<methodname_parameter name=”uri”
description=”URI databaze” necessary=”yes”/>
<methodname_parameter name=”username”
description=”uziv. jmeno” necessary=”no”/>
<methodname_parameter name=”password”
description=”heslo” necessary=”no”/>
<methodname_parameter name=”xpath”
description=”XPath cesta v DB” necessary=”no”/>
28
4.3. MAVEN
<methodname_parameter name=”databaseImplClass”
description=”ovladac databaze” necessary=”yes”/>
</methodname_parameters>
</input>
Výstupnı́ třı́dy majı́ ještě jeden specifický rys. Vzhledem k popsané možnosti vı́ce vstupů
může být problém s jejich ukládánı́m. Rozhranı́ definované nad výstupnı́mi třı́dami proto
definujı́ metody multipleOutputSupport a initMultipleSupport, umožňujı́cı́ korektně
uložit vı́ce dokumentů v závislosti na jednom popsaném zdroji.
4.3 Maven
Nedı́lnou součástı́ vývoje aplikace DOP byl nástroj Maven1 . Jeho zevrubný popis považuji za
nutnou součást tohoto textu.
Maven, relativně nová akvizice projektu Jakarta, je nástrojem pro správu javových pro-
jektů. Poslánı́m této utility je předevšı́m automatizace děnı́ „okolo“ vyvı́jené aplikace, tedy
generovánı́ build skriptů, dokumentace, laděnı́, návaznostı́ na okolı́, atd. Tedy činnostı́, které
jsou stereotypnı́ a tudı́ž automatizovatelné. Maven přicházı́ s myšlenkou použitı́ jednoho sou-
boru pro kompletnı́ popis projektu. Nad tı́mto souborem operuje množina plug-inů zajišt’ujı́cı́
samotnou fukcionalitu.
1. http://maven.apache.org/
29
4.3. MAVEN
uživateli ruce, poskytuje možnost nenačı́tat balı́k z archivu, ale použı́t mı́sto něj běžný diskový
soubor specifikovaný cestou. Tato vlastnost je nazvána JAR overriding a zapı́ná se direktivou
maven.jar.override=on v konfiguračnı́m souboru.
4.3.1.3 Plug-iny
Maven je sám o sobě jen malé jádro zajišt’ujı́cı́ základnı́ funkcionalitu. To je obklopeno plug-iny,
které se starajı́ o vykonávánı́ přı́slušných akcı́. Plug-iny jsou skripty enginu Jelly - skripto-
vacı́ho jazyka s XML syntaxı́ interpretujı́cı́ho své skripty na základě Javy a javových kniho-
ven nad použitými elementy. Implicitnı́ sada plug-inů se nacházı́ v adresáři specifikovaném
proměnnou maven.plugin.unpacked.dir (typicky $HOME/.maven/plugins). Maven se
použitı́m této nadstavby stává elegantně rozšı́řitelnou záležitostı́.
• extend - Mavenovský projekt je schopný dědit svoje vlastnosti po rodičı́ch. Projekt, je-
hož project.xml (resp. ceta k němu, může být relativnı́ i absolutnı́) odpovı́dá hodnotě
v tomto elementu je zdrojem implicitnı́ch vlastnostı́.
• package - Tato hodnota se použije jako jméno balı́ku (package) při generovánı́ Javadocu.
30
4.3. MAVEN
• build - Jak již bylo řečeno, soubor project.xml popisuje opravdu všechny potřebné
informace o projetu. Zvlášt’ tedy nechybı́ informace o tom, jak projet sestavit. Element
build navı́c specifikuje jak sestavit testovacı́ třı́dy a jak vytvářet výsledný balı́k.
31
Kapitola 5
Závěr
Problém velkého množstvı́ formátů elektronických dokumentů lze řešit jedině konvergencı́
k striktně definovaným standardům a doporučenı́m. Za základnı́ identifikačnı́ znak kvalitnı́ho
formátu lze potom považovat předevšı́m dostupnost, nadčasovost a jeho snadnou editovatel-
nost. Řešenı́ otázky hledánı́ toho optimálnı́ho nabı́zı́ DocBook.
Jako model postavený na XML disponuje téměř univerzálnı́ čitelnostı́, svou flexibilitou
pokrývá poměrně širokou oblast použitı́. Pozitivem je i to, že plně odstiňuje logickou strukturu
od přı́padné prezentace. Generovat nějakou vizuálnı́ podobu z logické struktury totiž v zásadě
nenı́ problémem, při cestě opačným směrem se ale můžeme setkat s řadou komplikacı́. Tohoto
faktu využı́vá i transformačnı́ model XML, totiž XSL, dalšı́ standardnı́ a silně rozšı́řený koncept.
Jiným kladem modelu značkovaných dokumentů je jejich katalogizovatelnost. Touto cestou
lze vytvářet obrovské stromové struktury, v nichž lze efektivně vyhledávat. Konkrétnı́m přı́-
kladem takovéto aplikace je XML:DB, databáze, jejı́ž elemetárnı́ strukturou jsou namı́sto řádků
či objektů XML dokumenty.
Kvality mnoha formátů zastiňuje jejich neotevřenost, závislost na platformě či aplikaci.
Charakter XML, jakožto nadmnožiny DocBooku, podobné problémy zcela popı́rá.
DocBook je tedy postaven na silé koncepci. Situace ovšem nenı́ úplně černobı́lá, i on se potýká
s některými problémy. Předevšı́m nemůže (alespoň v dohledné době) uspokojit uživatele zvyklé
na přežitky charakteru kancelářských balı́ků, a to i přes několik velmi kvalitnı́ch WYSIWYG
editorů, jež jsou v momentálmě k dispozici. Navı́c lze XML i DocBook považovat za neustále
se vyvı́jejı́cı́ formáty, což přirozeně vede k nestálé čitelnosti (byt’, v přı́padě těchto technologiı́,
minimálnı́) takto uchovávaných dat.
Uživatelé z řad technicky zdatnějšı́ch v DocBooku ovšem nezřı́dka najdou zalı́benı́. Právě
jistá dávka nadhledu je tı́m pravým katalyzátorem pochopenı́ schopnostı́ a možnostı́, které
nabı́zı́ použitı́ kvalitně navrženého značkovánı́.
32
Literatura
[ADLER] Adler, S., Berglund, A., Caruso, J., Deach, S., Graham, T., Grosso, P., Gutentag,
E., Milowski, A., Parnell, S., Richman, J., Zilles, S.: Extensible Stylesheet Language
(XSL) Version 1.0, W3C, 2001, http://www.w3.org/TR/xsl/ .
[CLARK] Clark, J.: XSL Transformations (XSLT) Version 1.0, W3C, 1999, http://www.w3.
org/TR/xslt/ .
[HOLZNER] Holzner, S.: XSLT: přı́ručka internetového vývojáře, Computer Press, 2002, 8-07226-
600-4.
[KAY] H. Kay, M.: Saxon: Anatomy of an XSLT processor, IBM, 2001, http://www-106.
ibm.com/developerworks/library/x-xslt2/ .
[WALSH] Walsh, N., Muellner, L.: DocBook: The Definitive Guide, O’Reilly, 1999, 1-56592-
580-7.
33