České vysoké učení technické v Praze Fakulta elektrotechnická
Bakalářská práce
Databáze hudebních rodokmenů Martin Sůkal
Vedoucí práce: Ing. Michal Valenta, Ph.D.
Studijní program: Elektrotechnika a informatika strukturovaný bakalářský
Obor: Informatika a výpočetní technika
srpen 2007
ii
Poděkování
Děkuji Ing. Michalu Valentovi, Ph.D za jeho vstřícný přístup a připomínky a všem svým blízkým za podporu, pomoc a pochopení.
iii
iv
Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu §60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů (autorský zákon).
V Praze dne 24.8.2007
...............................
v
vi
Abstract This thesis deals with design and implementation of database of music family trees. The application mainly function to data administration and generating the music family trees and it's distribuated like a web service. The application is based on XML technology, incl. JAXB technology, and Java programming language.
Abstrakt
Práce se zabývá návrhem a implementací databáze hudebních rodokmenů. Aplikace slouží především ke správě dat a generování hudebních rodokmenů a je distribuována jako webová služba. Aplikace je postavena na XML technologiích včetně JAXB technologie a programovacím jazyku Java.
vii
viii
Obsah
Seznam obrázků .............................................................. xiii
1
Úvod .......................................................................... 1
2
Popis problému, specifikace cíle...................................... 2
3
Analýza a návrh řešení .................................................. 3 3.1 Analýza ................................................................... 3 3.1.1 Analýza z hlediska uživatele................................... 3 3.1.2 Technologie ......................................................... 4 3.1.2.1 Jazyk XML ....................................................... 4 3.1.2.2 Rozhraní JAXB.................................................. 5
3.2 Návrh ..................................................................... 5 3.2.1 Datový model ...................................................... 5 3.2.2 Vývojová implementační platforma ......................... 7 3.2.3 Nativní XML databáze............................................ 8 3.2.4 Xindice................................................................ 8 3.2.5 XPath.................................................................. 9 3.2.6 Tomcat ............................................................... 9 3.2.7 Java 2D..............................................................10 3.2.8 Java Web Start....................................................10 3.2.9 Netbeans IDE......................................................10 3.2.10 Altova XML Spy .................................................11 3.2.11 Enterprise Architect ...........................................11
4
Implementace ........................................................... 12 4.1 Komponenty ...........................................................12 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6
„IO” komponenta.................................................13 „Libraries” komponenta ........................................13 „Xindice” komponenta ..........................................14 „Image” komponenta ...........................................14 „JAXB” komponenta .............................................15 „GUI” komponenta...............................................15
4.2 Nasazení a distribuce ...............................................17 4.2.1 Nasazení databáze...............................................17 4.2.2 Nasazení a distribuce klienta .................................17 4.2.3 Vzájemná spolupráce ...........................................19
ix
5
Testování .................................................................. 20 5.1 5.2 5.3 5.4
Jednotkové testy .....................................................20 Integrační testy.......................................................20 Testy použitelnosti...................................................21 Systémové testy .....................................................21
6
Závěr ....................................................................... 23
7
Literatura.................................................................. 24
A
Seznam použitých zkratek ........................................... 27
B
Instalační příručka...................................................... 28 B.1 Systémové požadavky .............................................28 B.1.1 Software ............................................................28 B.1.2 Hardware ...........................................................28
B.2 Instalace ................................................................28 B.2.1 B.2.2 B.2.3 B.2.4
C
Instalace Instalace Instalace Instalace
JRE ......................................................28 aplikačního serveru ................................29 databáze ..............................................29 klienta..................................................30
Uživatelská příručka ................................................... 32 C.1 Úvodní obrazovka....................................................32 C.2 Menu .....................................................................33 C.2.1 C.2.2 C.2.3 C.2.4 C.2.5 C.2.6
Get Data ............................................................33 Edit ...................................................................33 Persist Data ........................................................34 Generate Tree.....................................................35 View ..................................................................35 Tools .................................................................35
C.3 Import document ....................................................36 C.4 Find data................................................................36 C.5 Add .......................................................................37 C.6 Edit .......................................................................37 C.7 Export document.....................................................38 C.8 Database setup .......................................................38 C.9 DB Administration ...................................................39 C.10 TreeGen – Music Family Tree Generator ...................40
D
Konfigurační příručka.................................................. 41
E
Přílohy..................................................................... 43 E.1 XML schéma ...........................................................43 x
F
Obsah přiloženého CD ............................................... 44
xi
xii
Seznam obrázků 2.1
Hudební rodokmen ............................................................................. 2
3.1
Diagram případů užití........................................................................... 3
3.2
Komponentový diagram analýzy ............................................................ 4
3.3
Altova XML Spy s navrhnutým schématem.............................................. 6
3.4
Diagram tříd vygenerovaných knihovnou JAXB ........................................ 7
4.1
Komponentový diagram implementace .................................................12
4.2
Komponentový diagram GUI jednotky ...................................................16
4.3
Nasazení aplikace ...............................................................................19
C.1
Úvodní obrazovka aplikace .................................................................32
C.2
Použití kontextového menu .................................................................34
C.3
Uživatelské rozhraní pro import dokumentu ..........................................36
C.4
Uživatelské rozhraní pro hledání dat v databázi ......................................36
C.5
Editace textu .....................................................................................37
C.6
Editace datumu ..................................................................................37
C.7
Export dokumentu do databáze............................................................38
C.8
Nastavení připojení k databázi .............................................................38
C.9
Administrace databáze ........................................................................39
C.10 Generátor hudebních rodokmenů..........................................................40
xiii
xiv
1
Úvod Cílem bakalářské práce je navrhnout a implementovat databázi a grafický
generátor hudebních rodokmenů, tj. rodokmenů mapujících vývoj hudebníků a hudebních skupin.
Celá aplikace má být orientovaná jako webová služba a založená na XML technologiích. Kromě základní správy dat bude tedy umožňovat především vyhledávání v databázi a generování hudebních rodokmenů.
1
2
Popis problému, specifikace cíle
Tento systém má sloužit jako prostředek k uchovávání a správě dat o hudebnících, hudebních skupinách a jejich albech a následnému grafickému zobrazení v podobě hudebních rodokmenů.
Hudební rodokmeny představují podobně jako rodokmeny klasické jakýsi grafický popis vývoje svého objektu. V případě rodokmenů hudebních je tímto objektem např. hudební skupina. Ve světě se tvorbou hudebních rodokmenů zabývá odborník na rockovou hudbu Peter Frame [1], který již vydal několik knih se svými ručně kreslenými hudebními rodokmeny [2].
Obrázek 2.1: Hudební rodokmen
Hudební rodokmeny takto zachycují vývoj hudebního žánru nebo jednotlivých hudebních skupin. Bohužel už však nenabízejí kompletní přehled o vývoji jednotlivých hudebníků a jejich děl v podobě vydaných alb. V oblasti sofwarových produktů existuje mnoho různých řešení umožňující vytvářet klasické rodokmeny jak „ručním“ kreslením tak automatickým generováním ze zadaných dat, ale neobjevil jsem žádný produkt, který by se zabýval tvorbou hudebních rodokmenů na jakékoliv úrovní. Proto jsem se rozhodl pro vytvoření aplikace umožňující výše uvedené, tj. generování hudebních rodokmenů na základě uživatelem vytvořené hudební databáze.
2
3
Analýza a návrh řešení
3.1 Analýza
3.1.1 Analýza z hlediska uživatele Máme navrhnout aplikaci, která bude uchovávat specifická data, tj. informace o hudebnících a z těchto pak graficky generovat příslušné hudební rodokmeny. Aplikace by měla umožňovat uchovávání dat jak na pevném disku tak v databázi. Měla by být také schopna sama vytvářet dokumenty a při importu dat z databáze by měla umožňovat import jednoho konkrétního dokumentu a stejně tak vyhledávání hudebních skupin a jednotlivých hudebníků přes všechny dokumenty v databázi. Po vygenerování rodokmenu by měla umožňovat uložení v grafické podobě na pevný disk. Celá aplikace by měla být jednoduše spustitelná z webu jako webová služba.
Aplikaci zhlediska uživatele dokumentuje následující diagram:
Obrázek 3.1: Diagram případů užití
3
3.1.2 Technologie Aplikace má být založená na XML technologiích, jako formát vstupních a uchovávaných dat jsem tedy zvolil formát XML [3]. Požadovaná vývojové platforma Java [4] nám umožní použít knihovnu JAXB [5] ulehčující práci s XML dvoucestným mapováním mezi XML dokumentem a objekty v Javě. K uchovávaní a správě XML dokumentů dobře poslouží jakákoliv XML databáze.
Vzájemné vztahy jednotlivých technologií dokumentuje následující diagram:
Obrázek 3.2: Komponentový diagram analýzy
3.1.2.1 Jazyk XML
Jazyk XML [3] je poměrně nový, intenzivně se rozvíjející webový jazyk určený především pro výměnu dat mezi aplikacemi a pro publikování dokumentů. Je to jednoduchý otevřený formát, který není úzce svázán s žádnou platformou nebo proprietární technologií, naopak je založen na jednoduchém textu a je zpracovatelný libovolným textovým editorem. XML je stejně jako HTML značkovací jazyk. Každý XML dokument se skládá z elementů, které jsou do sebe navzájem vnořené a tvoří tak strom elementů.
4
Element se skládá z počátečního a koncového tagu a daty uzavřenými mezi nimi. Co je však nejdůležitější, sám uživatel si může vytvářet vlastní definice elementů i vlastní definici celého dokumentu, tedy jakýsi datový model XML dokumentu. Toto v praxi znamená, že XML dokument je široce přenositelný, snadno transformovatelný a jednoduše dostupný, což ho činí ideálním pro uchovávání dat s nepříliš složitým datovým modelem. K přesnému popisu datového modelu, včetně datových typů, slouží XML schématické jazyky. Zvolil jsem schématický jazyk W3C XML Schema [6] podporovaný společností Sun, abych mohl využít její rozhraní JAXB, které tento typ XML schématu primárně podporuje.
3.1.2.2 Rozhraní JAXB
JAXB (Java Architecture for XML Binding) [5], jež je dnes součástí Java SE 6, je javovské rozhraní umožňující dvoucestné mapování mezi dokumenty XML a objekty v Javě. Nemusíme tedy psát složitý analytický kód, pouze dodáme kompilátoru vytvořené XML schéma svého datového modelu a ten pak automaticky vygeneruje všechny třídy v Javě. Na ty pak můžeme namapovat jakýkoliv XML soubor odpovídající XML schématu a snadněji s ním manipulovat.
3.2 Návrh Celý systém se skládá z několika částí: databáze na serveru, klienta přistupujícího do databáze a generátoru rodokmenů, který bude prakticky součástí klienta a z webové stránky na serveru, odkud bude klient okamžitě spustitelný.
3.2.1 Datový model
V případě této aplikace bude databáze pouze množinou XML dokumentů jednoho typu. To znamená, že všechny XML dokumenty v databázi budou postavené nad jedním XML schématem. Schéma představující datový model uchovávaných dat je potřeba navrhnout. K tomuto návrhu jsem použil nástroj XML Spy [7] společnosti
5
Altova umožňující elegantní a rychlou práci s XML dokumenty. Způsob návrhu XML schématu dokumentuje následující obrázek:
Obrázek 3.3: Altova XML Spy s navrhnutým schématem
Z takto graficky navrženého modelu mi Altova XML Spy vygeneroval XML schéma v jazyce W3C XML Schema (v příloze). Toto jsem nechal zpracovat knihovnou JAXB, která mi vygenerovala potřebné javovské třídy. Tyto můžeme importovat do UML [8] modeláře Enterprise Architect [9], který nám vygeneruje grafický model těchto tříd, jak dokumentuje následující obrázek:
6
Obrázek 3.4: Diagram tříd vygenerovaných knihovnou JAXB
Tyto třídy samozřejmě můžeme následně upravit k obrazu svému, jak pro správný a efektivní běh aplikace potřebujeme.
3.2.2 Vývojová implementační platforma
S volbou formátu uchovávaných dat úzce souvisí také volba databázového systému. Při uchovávání dat ve formátu XML, je logické, že zvolený databázový systém bude opět založen na XML technologiích. Pro tento jazyk však hovoří ještě jeden velmi podstatný fakt. Tím je fulltextové vyhledávání. Na XML dokument totiž můžeme nahlížet jako na obyčejný textový soubor, ve kterém je fulltextové vyhledávání velice jednoduché a přímočaré, což je obrovská výhoda oproti relačnímu nebo objektovému datovému modelu. A vzhledem k tomu, že operace fulltextového vyhledávání bude pravděpodobně nejčastější operací klienta s databází, jeví se volba XML datového modelu jako nejvýhodnější. Základem databáze bude tedy jedno XML schéma a všechny dokumenty spravované databází pak budou odpovídat tomuto schématu. Nezbývá tedy než zvolit
7
konkrétní podobu nativní XML databáze.
3.2.3 Nativní XML databáze
Pod tímto pojmem, tedy nativní XML databáze, se rozumí taková databáze, jenž je schopna uložit XML dokument včetně jeho logické struktury a podoby. Dokument pak obdržíme zpět přesně v takové podobě, v jaké jsme jej předali databázi, včetně všech poznámek apod. Nativní XML databáze nám přináší možnost indexování uložených dokumentů pro výrazné zvýšení výkonu a možnost provádění dotazů napříč sadou dokumentů umístěných v takzvané kolekci. Kolekci si můžeme představit jako složku nebo sadu několika dokumentů, které mohou nebo nemusí odpovídat jednomo XML schématu. Mluvíme pak o tzv. “schema dependent”, kdy je jedna konkrétní kolekce závislá na jednom schématu a může tedy obsahovat pouze dokumenty validní vůči tomuto schématu, nebo naopak “schema independent”, kdy může kolekce obsahovat XML dokumenty jakéhokoliv typu.
3.2.4 Xindice
Z celé řady XML databázových systémů jsem zvolil open-source systém Xindice [10] [zeen-dee-chay] sdružení The Apache Software Foundation. Xindice je nativní XML databáze navržená speciálně pro ukládání, správu a vyhledávání velkého množství malých až středně velkých XML dokumentů. Ty jsou ukládány do kolekcí, které pak v databázovém systému tvoří hierarchii podobně jako soubory v souborovém systému UNIXu nebo Windows. Na kolekce se pak odkazuje podobně jako v souborovém systému formou cesty. Jako dotazovací jazyk podporuje Xindice jazyk XPath [11], který používá jak na úrovni dokumentů tak na úrovni kolekcí, což znamená, že dotaz může být položen na více dokumentů a výsledek dotazu obsahuje množinu všech nalezených výskytů ze všech dokumentů v kolekci. Systém samozřejmě umožňuje také správu dokumentů jako přidání dokumentu, odstranění dokumentu a aktualizace dat. Databáze Xindice není od verze 1.1 samostatná aplikace, a tudíž před její instalací je třeba mít nainstalován nějaký aplikační server podporující standard Servlet 2.2 nebo vyšší. Ve své práci jsem použil aktuální verzi, tedy Xindice 1.1 beta 4.
8
Nativní XML databázi Xindice jsem zvolil z několika důvodů:
cena - tato databáze je zcela zdarma, navíc poskytována přímo se zdrojovými texty pod licencí Apache Licence 2.0
vhodnost pro zvolenou technologii - pro implementaci klienta je zvolen jazyk Java, ve kterém je také napsáno aplikační rozhraní pro přístup k databázi Xindice. Je zde tedy předpoklad snazší implementace.
podpora - hlavní komponenty (Tomcat, Xindice) použité při vytváření této práce jsou vyvíjeny pod hlavičkou jedné společnosti, je tedy předpoklad, že spolu budou snadno spolupracovat. Také většina příkladů a návodů k těmto komponentám předpokládá jejich společné použití.
3.2.5 XPath
XPath [11] je výrazový dotazovací jazyk pro vyhledávání a adresování v XML dokumentech. XPath především umožňuje vyjádřit relativní cestu od nějakého XML uzlu k jinému elementu nebo atributu. Využívá se všude, kde je třeba vyhledávat ve struktuře XML dokumentu určitá data. Chceme-li vybrat určitou množinu dat, odpovídající zadaným podmínkám, obvykle nám postačuje jediný XPath výraz a XML parser se o prohledání dokumentu a vyhodnocení podmínek postará sám. Bude to právě dotazovací jazyk XPath, kterým budu v XML databázi vyhledávat požadovaná data, konrétně tedy hudební skupiny a jednotlivé hudebníky.
3.2.6 Tomcat
Apache Tomcat [12] je aplikační server nezbytný pro chod XML databáze Xindice. Je oficiální referenční implementací technologií Java Servlet a Java Server Pages společnosti Sun Microsystems. Poskytuje prostředí pro běh Java kódu v kooperaci s web serverem. Obsahuje také grafické nástroje pro konfiguraci a správu, může ale být konfigurován editací XML-formátovaných konfiguračních souborů. Ve své práci jsem použil Tomcat ve verzi 6.
9
3.2.7 Java 2D
Grafické znázornění dat zajistí vygenerováním požadovaného hudebního rodokmenu technologie Java 2D [13], jež je součástí Java SE 6. Java 2D představuje množinu tříd, které umožňují pokročilou práci s 2D grafikou. Tyto se postarají o vykreslení požadovaného rodokmenu a následného exportu do obrázku.
3.2.8 Java Web Start
Pro snadný přístup uživatele k aplikaci bude tato orientována jako webová služba distribuovaná po síti prostřednictvím technologie Java Web Start (JWS) [14] společnosti Sun. Tato technologie, která je součástí Java SE 6, významně zjednodušuje distribuci Java programů přes web servery prostřednictvím http protokolu. Přináší usnadnění administrativy při spouštění javovských aplikací buď stažených z webové stránky nebo uložených na disku počítače. Místo toho, aby uživatel požadovaný program nejprve stahoval z webového serveru, posléze jej rozbaloval, instaloval a poté teprve spouštěl, poskytnou se technologii Java Web Start všechny potřebné informace v jednom JNLP [26] souboru
1
vytvořeném autorem
programu a JWS se o vše zmíněné postará sám. Uživateli programu pak stačí pouze definovat přístup k tomuto souboru prostřednictvím internetové adresy nebo úplné cesty k souboru na pevném disku.
3.2.9 NetBeans IDE
Aplikaci jsem se rozhodl vyvíjet ve vývojovém prostředí NetBeans [15], což je open-source projekt původně vyvíjený českými autory, později prodaný firmě Sun Microsystems, jež je také stojí za platformou Java. Kromě toho, že celá aplikace běží v Javě a její uživatelské rozhraní používá knihovnu Swing ze standardního balíku, je možné pomocí tohoto vývojového prostředí velmi jednoduše vytvářet uživatelská prostředí prostřednictvím integrovaného grafického návrháře. Z výše uvedených důvodů jsem se rozhodl právě pro toto vývojové prostředí, které se mi jeví jako nejvhodnější pro tvorbu tlustého klienta na bázi jazyka Java a XML technologií. Ve své práci jsem použil aktuální verzi NetBeans 5.5. 1
JNLP soubor – XML dokument popisující distribuovanou aplikaci a způsob jejího spuštění
10
3.2.10 Altova XML Spy
Při návrhu aplikace jsem využil možností editoru a vývojového prostředí XML Spy [7] americké společnosti Altova. Jedná se o vývojové prostředí pro XML umožňující elegantní a rychlou práci s XML technologiemi. Pomocí tohoto nástroje můžeme jednoduše editovat a validovat XML dokumenty, vizuálně pomocí myši vytvářet, editovat a validovat XML schémata ve formátu DTD a W3C XML Schema, provádět a editovat XSL transformace apod.
3.2.11 Enterprise Architect
Enterprise Architect [9] je UML modelovací nástroj australské společnosti Sparx Systems umožňující především vytvářet vizuální UML [8] modely vyvíjeného systému. Enterprise Architect dnes podporuje UML ve verzi 2.1 a kromě své hlavní funkce, tedy dokumentovat návrh a analýzu sofwarového produktu, umožňuje např. generování zdrojového kódu pouze z UML modelů, a to v několika jazycích včetně jazyka Java [4], C++ [16], C# [17], Delphi [18], Php [19] apod. Dokáže také naopak velmi jednoduše vygenerovat UML modely tříd z hotových zdrojových kódů. Jedná se o velmi mocný nástroj, jež jsem použil k vytvoření všech UML modelů obsažených v této práci.
11
4
Implementace
4.1 Komponenty
Podle předchozího návrhu jsem aplikaci také implementoval. Při realizaci jsem se snažil o rozumné rozdělení systému do několika na sobě nezávislých komponent. Toto řešení pak umožňuje vývojáři znovupoužití některé z komponent nebo jednodušší nahrazení jedné komponenty za jinou. Výsledek mého snažení dokumentuje následující diagram:
Obrázek 4.1: Komponentový diagram implementace
12
4.1.1 „IO” komponenta
Tato komponenta je realizována pouze jedinou třídou, která umožňuje přenos textových dat mezi javovskými proměnnými a textovým souborem na disku počítače.
4.1.2 „Libraries” komponenta
Tato komponenta je souborem několika JAR knihoven
1
potřebných pro běh
aplikace. Jedná se o následující knihovny:
Knihovny databázového systému Xindice:
commons-logging-1.0.3.jar
xalan-2.5.2.jar
xerces-2.6.0.jar
xml-apis.jar
xmldb-api-20030701.jar
xmldb-api-sdk-20030701.jar
xmldb-common-20030701.jar
xmldb-xupdate-20040205.jar
xmlrpc-1.1.jar
xindice.jar
Knihovna zdrojových artefaktů:
resources.jar
Tato knihovna obsahuje následující dokumenty:
default_document.xml
Jedná se o XML dokument představující počáteční dokument aplikace, jež se používá např. při prvním spuštění aplikace nebo při vytváření nových elementů dokumentu.
1
JAR knihovna – sada dokumentů zabalených metodou ZIP archivace do jednoho souboru, který může nést další metainformace a digitální podpis
13
muf-model-02.xsd
Toto je velmi důležitý soubor. Jde totiž o XML schéma, jenž je základem celé aplikace. Vždy když aplikace provádí validaci XML dokumentu vůči svému schématu, což se děje vždy při transportu XML dat mezi aplikací a pevným diskem nebo databází, kontroluje aplikace XML dokument právě vůči tomuto schématu.
footer.txt, header.txt
Jedná se o pomocné soubory, jež se používají při konverzi dat získaných z databáze na XML dokument na pevném disku, který je pak zpravidla dále mapován na javovské objekty.
Všechny výše zmíněné knihovny bylo nutné podepsat digitálním podpisem prostřednictvím aplikace „jarsigner”, jež je součástí JDK. Jinak by totiž nebylo možné aplikaci nasadit na web pomocí Java Web Start.
4.1.3 „Xindice” komponenta
Tato komponenta je realizována dvěma třídami, které zajišťují komunikaci s XML databází Xindice. Umožňuje např. listování kolekcí a dokumentů, vytváření a mazání kolekcí, přidávání a mazání dokumentů, vyhledávání v dokumentech apod.
4.1.4 „Image” komponenta
Jediná třída, která spadá do této komponenty, umožňuje uložit obsah javovského vizuálního objektu „Canvas” do obrázku v libovolném formátu podporovaném nainstalovanou verzí JRE. Java 6 standardně podporuje obrazové formáty JPEG, PNG, GIF, BMP a WBMP.
14
4.1.5 „JAXB” komponenta
Tato komponenta obsahuje několik tříd, především dvě mnou mírně modifikované třídy původně vygenerované knihovnou JAXB, jež jsou nutné pro obousměrné mapování mezi XML dokumentem a javovskými proměnnými. Dále obsahuje několik pomocných tříd pracujících zpravidla v kooperaci s výše uvedenými, jednu třídu pro vytvoření počátečního dokumentu a jednu třídu spravující výše zmíněné mapování.
4.1.6 „GUI” komponenta
GUI komponenta fyzicky označená jako balík „presentationtier” představuje soubor balíků realizujících uživatelské rozhraní aplikace. Komponenta je navíc závislá na následujícím artefaktu:
temp.tmp
Jedná se o soubor sloužící k ukládání dočasných dat. Používá se při předávání dat mezi komponentou Xindice a JAXB. Umožňuje konverzi dat získaných z databáze na soubor souborového systému, který je následně jako XML dokument namapován do javovských proměnných. Soubor je aplikací umisťován do hlavního adresáře aplikace.
15
Celkovou architekturu GUI komponenty popisuje následující diagram:
Obrázek 4.2: Komponentový diagram GUI jednotky
Jak je patrné z obrázku, GUI komponenta je rozdělena do několika tématických balíků a jedné další komponenty. Balík „controller” obsahuje třídy, jež reagují na prvky uživatelského rozhraní a vykonávají logiku aplikace prostřednictvím výše uvedených komponent. Balík „view” zase obsahuje pouze třídy, které definují vzhled aplikace, tedy uživatelské rozhraní. Balík „utils” obsahuje pomocné třídy pro výše uvedené balíky.
Komponenta „TreeGen”
Jako samostatnou komponentu „TreeGen” jsem vyčlenil balík „treegen”, jež se stará o generování uživatelského rozhraní pro kreslení rodokmenů a s tím spojené aplikační logiky. Balík „controller” komponenty „TreeGen” opět zpracovává reakce uživatele na
16
uživatelské rozhraní, v tomto případě především ukládá obsah plátna jako obrázek a zprácovává podněty na transformaci plátna. Balík „view” komponenty „TreeGen” opět generuje prostřednictvím svých tříd uživatelské rozhraní aplikace. A konečně balík „treegen” obsahuje především třídy představující definice objektů, jejichž vykreslením na plátno vznikne požadovaný hudební rodokmen.
4.2 Nasazení a distribuce
Nasazení celého systému představuje nasazení databáze Xindice a nasazení klienta aplikace, který s databází komunikuje, přičemž obě tyto součásti nemusí být nutně na stejném serveru.
4.2.1 Nasazení databáze
Nasazení databáze znamená umístění databáze do aplikačního serveru Tomcat na PC serveru. To se provádí nasazením jednoho WAR souboru [28]
1
. Poté je ještě
nutné v databázi vytvořit alespoň jednu kolekci, ke které s bude klient připojovat (viz Instalační příručka).
4.2.2 Nasazení a distribuce klienta
Aplikace má být distribuována prostřednictvím technologie Java Web Start, nasazení klienta tedy znamená umístění potřebných knihoven a spouštěcího souboru na web. Do vývojového prostředí NetBeans lze doinstalovat modul pro podporu Java Web Start, jež usnadňuje vytváření a editaci spouštěcího JNLP souboru a po automatickém vygenerování potřebných souborů dokáže také sám nasadit aplikaci do svého integrovaného aplikačního serveru. Prvním krokem pro distribuci aplikace pomocí Java Web Start je tedy vytvoření 1
WAR soubor – sada dokumentů potřebných pro nasazení do aplikačního serveru zabalená metodou ZIP archivace
17
spouštěcího JNLP souboru. Tento soubor NetBeans vytvoří automaticky při spuštění projektu prostřednictvím Java Web Start. To se provádí v kontextovém menu projektu volbou „Java Web Start -> Run with Java Web Start”. Automaticky vytvořený JNLP soubor je teď potřeba upravit. Předně je vhodné doplnit formulář informací o aplikaci jako je název, poskytoval, popis apod. Dále je potřeba definovat cesty ke všem JAR knihovnám a případně také přímo do XML kódu dopsat následující kód: <security>
Přidáním těchto elementů se aplikaci povolí plný přístup ke klientskému počítači a lokální síti. Aplikace tedy může číst z pevného disku a zapisovat na něj. Bez definice těchto práv by např. v aplikaci vůbec nebylo možné otevřít uživatelského rozhraní třídy „JFileChooser” 1. Dále je nutné všechny JAR knihovny, na které se odkazuje JNLP soubor a které budou tedy distribuovány na webu, podepsat digitálním podpisem. Jedině tak je může Java Web Start podle pokynů z JNLP souboru uložit na pevný disk klientského počítače a pracovat s nimi. Nejprve je nutné zabalit příslušné třídy, dokumenty, obrázky apod. do JAR knihovny obyčejnou metodou ZIP archivace [27]. Poté je potřeba podepsat tento archiv digitálním podpisem aplikací „jarsigner” [30], jež je součástí JDK. Tímto procesem musí projít i JAR archiv s třídami samotné aplikace, který generuje NetBeans při kompilaci zdrojových kódů. Podepsané archivy a spouštěcí soubor pak už jen stačí umístit do webového prostoru a vytvořit webovou stránku s odkazem na spouštěcí soubor. NetBeans však jdou ještě dál a při nasazení aplikace do vlastního integrovaného aplikačního serveru vytvoří kromě JNLP souboru také novou složku „web” v hlavním adresáři aplikace a její WAR archiv [28] ve složce „dist” a do nich umístí vše potřebné pro jednoduché nasazení do jakéhokoliv aplikačního serveru. Základem webové stránky je jeden JSP [29] soubor, který lze snadno upravit a celou složku pak opět metodou ZIP archivace zabalit a nasadit do aplikačního serveru. Kromě toho lze aplikaci distribuovat také bez internetového připojení pouze JAR knihovnami, které vytvoří NetBeans při kompilaci zdrojových kódů. Tyto pak již není nutné digitálně podepisovat.
1
JFileChooser – Javovská třída balíku Swing umožňující pohled na adresářovou strukturu pevného disku a výběr souboru, se kterým se bude dále pracovat.
18
4.2.3 Vzájemná spolupráce
Možnou vzájemnou spolupráci klienta a databáze je vidět na následujícím obrázku:
Obrázek 4.3: Nasazení aplikace
Jak je vidět, databáze Xindice může běžet i na více serverech a uživatel si pak sám v aplikaci vybere, se kterým z nich chce pracovat. Jak je již zmíněno výše, aplikaci lze používat také offline bez připojení k internetu a v nejjednodušší formě i bez datábáze (viz instalační a uživatelská příručka v příloze).
19
5
Testování
5.1 Jednotkové testy Testy jednotlivých dílčích částí na úrovni tříd a metod jsem prováděl již během implementace. Testování probíhalo metodou dynamického White-Box testování [24][25], kdy se při spuštěné aplikaci a znalosti zdrojového kódu tester snaží vykonat všechny příkazy programu tak, aby se zjistily chyby v řídíci logice. Tímto způsobem jsem se především snažil otestovat zpracování výjimek a simulovat nestandardní situace. Tyto testy odhalily největší množství chyb, protože šlo o první spuštění a používání nových částí aplikace. Šlo o chyby sémantické a logické, které byly vzápětí opraveny.
5.2 Integrační testy
Testováním integrace jsem se snažil nejprve otestovat jednotlivé komponenty a následně integraci celého systému. Testování komponent jsem prováděl ihned po její implementaci metodou Black-Box [24][25], kdy se na testovaný program díváme jako na černou skříňku a bez jakékoliv znalosti kódu nebo návrhu testujeme funkčnost aplikace zhlediska případů užití vytyčených již ve specifikaci systému. Toto testování odhalilo několik chyb, které jsem okamžitě odstranil. Při návrhu architektury systému jsem snažil o maximální nezávislost komponent, což se projevilo nepatrným množstvím chyb při testování integrace celého systému. Šlo především o drobné chyby způsobené mírnou změnou jiné komponenty. Tyto závislosti nebylo vždy jednoduché nalézt, ale opravit se již daly poměrně snadno.
20
5.3 Testy použitelnosti Testy použitelnosti se provádějí přímo na potencionálních uživatelích a mají zjistit, jak je pro ně aplikace použitelná, jestli vyhovuje jejich základním potřebám. Testy jsem provedl s několika uživateli více či méně zběhlými v užívání počítače. Provedl jsem s nimi pár velmi jednoduchých úkonů. Uživatelé měli zpravidla vytvořit nebo načíst nějaká data, pak je upravit a uložit a následně vygenerovat jejich rodokmen a ten uložit jako obrázek. Testy byly koncipované aby pokryli všechny možnosti systému a zároveň nebyli příliš náročné pro méně zkušené uživatele. Uživatelé nejprve ocenili snadnost a rychlost spuštění přes webové rozhraní. Méně zkušeným uživatelům velice pomohl primitivní ale účinný průvodce v podobě očíslování důležitých nabídek menu. Některým uživatelům nejprve dělal problém dialog pro vícenásobné hledání v databázi a navrhli také řešení v podobě jednoho vstupního pole, kde se budou hledaná data oddělovat čárkou, ale současně přiznali, že i stávající systém je pro ně po kratším seznámení pochopitelný. Toto je tedy k zamyšlení pro další verzi aplikace. Méně zkušeným uživatelům chvíli trvalo, než se zorientovali v zobrazení XML dokumentu jako stromu elementů, ale v tom jim výrazně pomohl informační panel vpravo a také dynamicky se měnící kontextové menu. Za poměrně nepříjemné považovali uživatelé chování stromu dokumentu při přidávání a mazání některých uzlů. Strom se totiž po provedení těchto operací zavře téměř do své minimální podoby a uživatel pak musí sám hledat, jaký element vlastně přidal. Toto je velice nepříjemné, ale bohužel se mi tento problém dosud nepodařilo vyřešit.
5.4 Systémové testy
Systémové testování prakticky ověřuje funkčnost systému v prostředí jeho reálného nasazení. Nasadil jsem databázi i webovou stránku s klientem na jeden server a klienta spouštěl z několika jiných počítačů. Jako server jsem použil počítač Intel Celeron M 420 1.6 GHz, 512 MB Ram s pevným diskem s 5400 otáčkami a operačním systémem Windows XP SP2. Klientské počítače byly obdobného hardwarového vybavení s operačními systémy Windows XP SP2, Windows Vista Business a Linux Gentoo a síťovým přípojením o rychlosti 100Mbit/s.
21
Nezpozoroval jsem žádnou nefunkčnost nebo rozdíl ve funkčnosti nebo výkonu na jednotlivých klientech. Všude se aplikace spustila během několika sekund a operace s databázi vždy proběhly do jedné sekundy. Výjimkou je první připojení k databázi, které může trvat několik sekund. Otestoval jsem asi dvacet dokumentů s daty různého charakteru - s několika skupinami, s jednou skupinou, se skupinou o jednom členu, se skupinou s větším počtem alb a jejich kombinace. Testoval jsem dokumenty o velikostech od několika kB až po stovky kB (viz složka „samples” v jednotlivých distribucích aplikace), kdy už dokument obsahuje informace o desítkách hudebních skupin, které už nemá z hlediska přehlednosti a čitelnosti ani smysl zobrazovat jako hudební rodokmen. Všechny dokumenty se vykreslily technicky správně se správnými vazbami mezi hudebníky, avšak při větším množství hudebních skupin v rodokmenu se samozřejmě vše nevykreslilo vždy esteticky, docházelo především k nepříjemnému křížení čar přes text. To by se dalo vyřešit inteligentnějším algoritmem pro rozmísťování komponent na plátně, ale ani ten nemůže zastoupit estetické cítění člověka. Bylo by tedy vhodné do příští verze programu spíše naimplementovat možnost přímé vizuální editace rodokmenu uživatelem.
22
6
Závěr V této práci se mi podařilo úspěšně navrhnout a implementovat systém
založený na moderních XML technologiích umožňující snadné vytváření a uchovávání hudebních rodokmenů. Aplikaci lze ve své nejširší podobě použít jako webovou službu a pracovat jak s daty na lokálním disku tak s daty na vzdáleném serveru, kde jsou uchovávána v XML databázi Xindice. Tato práce v důsledku své komplexnosti vyžadovala využití mnohých pro mě dosud neznámých technologií a prohloubila tak mé dosavadní teoretické i praktické znalosti v oblasti vývoje internetových technologií i v oblasti databázových systémů. Naučila mě efektivně pracovat s XML dokumenty, používat aplikační server Tomcat i distribuovat aplikace prostřednictvím Java Web Start. Prohloubila mé znalosti v oblasti tvorby dvoudimenzionální grafiky v jazyce Java a celkově mi umožnila navrhnout, vytvořit, otestovat a dokumentovat komplexnější informační systém. Práce rozhodně není uzavřenou záležitostí. Námětů na další možné pokračování je opravdu hodně. Velmi užitečným vylepšením by jistě bylo napojení na veřejnou databázi vydaných hudebních děl americké společnosti Gracenote [20]. Tato databáze známá pod zkratkou CDDB [21] je hojně využívána spoustou sofwarových hudebních přehrávačů k získání informací o přehrávaném hudebním díle. Neméně užitečná by jistě také byla možnost ruční modifikace vygenerovaného rodokmenu. Jakákoliv umělá inteligence totiž jenom těžko může nahradit estetické cítění člověka. Aplikace by v budoucnu také mohla umožňovat rozsáhlejší administraci dat v databázi - vytváření speciálních kolekcí apod. a měla by se přesně vymezit a specifikovat práva na administraci databáze obyčejným uživatelem. Současná implementace logovacího mechanismu aplikace by měla být snadno modifikovatelná i pro perzistentní ukládání logovacích informací a stejně tak současný informační panel v pravé části aplikace je snadno rozšiřitelný o další informační body, jež budou při dalším vylepšování aplikace pro uživatele nezbytné.
23
7
Literatura
[1] Peter Frame http://en.wikipedia.org/wiki/Pete_Frame [2] Peter Frame. The Complete Rock Family Trees Omnibus Press 1993 [3] XML Language http://www.w3.org/XML/ [4] Java Technology http://java.sun.com/ [5] JAXB - Java Architecture for XML Binding http://java.sun.com/developer/technicalArticles/WebServices/jaxb/ [6] XML Schema http://www.w3.org/XML/Schema [7] Altova XML Spy http://www.altova.com/products/xmlspy/xml_editor.html [8] UML - Unified Modeling Language http://cs.wikipedia.org/wiki/Unified_Modeling_Language [9] Enterprise Architect http://www.sparxsystems.com.au/products/ea.html [10] Xindice http://xml.apache.org/xindice/ [11] XPath http://www.w3.org/TR/xpath [12] Tomcat http://tomcat.apache.org/ [13] Java 2D http://java.sun.com/products/java-media/2D/ [14] Java Web Start http://java.sun.com/products/javawebstart/ [15] NetBeans http://www.netbeans.org/ [16] C++ http://cs.wikipedia.org/wiki/C++ [17] C# http://en.wikipedia.org/wiki/C_Sharp
24
[18] Delphi http://www.delphi.cz/ [19] Php http://cs.wikipedia.org/wiki/PHP [20] Gracenote CDDB http://www.gracenote.com [21] CDDB - informace http://www.cdr.cz/a/275 [22] David Toth - Objektové a objektově orientované přístupy v nativních XML databázích Diplomová práce, ČVUT FEL, katedra počítačů, 2006 [23] Přemysl Novotný - Publikační systém využívající nativní XML databázový systém Bakalářská práce, ČVUT FEL, katedra počítačů, 2006 [24] Techniky testování http://www.lbms.cz/prezentace/TA-ukazka.pdf [25] Testování programů http://reboot.cz/howto/programovani/testovani-programu/articles.html?id=94 [26] JNLP http://nb.vse.cz/~zelenyj/it380/eseje/xzimd01/jnlp.htm [27] Zip archiv http://en.wikipedia.org/wiki/ZIP_(file_format) [28] WAR – Web Application aRchiv http://en.wikipedia.org/wiki/WAR_(file_format) [29] Java Server Pages http://java.sun.com/products/jsp/ [30] Aplikace Jarsigner http://java.sun.com/javase/6/docs/technotes/tools/windows/jarsigner.html
25
26
A
Seznam použitých zkratek
BMP
Bitmap
CD
Compact disc
CDDB
CD DataBase
DTD
Document Type Definition
GIF
Graphics Interchange Format
GUI
Graphical User Interface
IDE
Integrated Development Environment
JAR
Java Archive
JAXB
Java Architecture for XML Binding
JNLP
Java Network Launcher Protocol
JPEG
Joint Photographic Experts Group
JRE
Java Runtime Environment
JSP
Java Server Pages
JWS
Java Web Start
PNG
Portable Network Graphics
SE
Standart Edition
UML
Unified Modeling Language
W3C
World Wide Web Consorsium
WAR
Web Application aRchiv
WBMP
Wireless Bitmap
XML
Extensible Markup Language
XPATH
XML Path Language
XSL
Extensible Stylesheet Language
XSLT
Extensible Stylesheet Language Transformations
27
B
Instalační příručka
B.1 Systémové požadavky B.1.1 Software Aplikace byla vyvíjena a testována pod operačním systémem Microsoft Windows XP SP2 a Java 2 Platform Standard Edition Development Kit 6.0 (JDK 6.0). Vzhledem k použité platformě technologií jako je jazyk XML, Java Web Start a Java obecně, a použití nativní XML databáze Xindice a aplikačního serveru Tomcat, které jsou poskytovány také ve formě zdrojových kódů a mohou být tedy zkompilovány a používány i na jiných operačních systémech, je zřejmé, že výsledný systém je poměrně lehce přenositelný i na jiné operační systémy.
B.1.2 Hardware Pro běh serverové části aplikace není potřeba nijak výkonný hardware. Databáze běží v aplikačním serveru Tomcat, jehož systémové požadavky jsou procesor 400 Mhz, 128 MB Ram a 50 MB volného místa na disku [12], s tím že pro potřeby ukládání dat do databáze Xindice je třeba vyhradit další volné místo.
B.2 Instalace Instalace celého systému spočívá v několika krocích:
B.2.1 Instalace JRE
Pro správný běh aplikace je nutné nejprve nainstalovat prostředí pro běh programů v Javě zvané Java Runtime Environment (JRE). Aplikace byla testována s JRE 6.0 pro Windows, které naleznete na přiloženém CD v adresáři „install/java”. Instalace je velmi jednoduchá, takže jen doporučím nainstalovat JRE do složky neobsahující mezeru, např. do „C:/java”.
28
B.2.2 Instalace aplikačního serveru
Další nezbytnou součástí systému je aplikační server. Aplikace byla vyvíjena a otestována s aplikačním serverem Apache Tomcat ve verzi 6.0.10, jež nalezenete na přiloženém CD v adresáři „install/tomcat”. Instalaci představuje pouze spuštění jednoho spustitelného souboru pro Windows, následuje volba cíle instalace (opět doporučuji složku bez mezer), volba jména a hesla pro administrátora a volba portu, na kterém bude server naslouchat. Tyto hodnoty je třeba si poznamenat pro další krok instalace systému. Správnou instalaci serveru ověříte otevřením adresy „http://localhost:8080” ve webovém prohlížeči (port 8080 případně nahraďte portem zadaným při instalaci). Při správné instalaci by se měla zobrazit úvodní stránka serveru.
B.2.3 Instalace databáze
Nativní XML databázový systém Apache Xindice není od verze 1.1 samostatně běžící aplikací, instalace tedy spočívá v zavedení souboru databáze do aplikačního serveru. Pro instalaci databáze Xindice tedy nejprve otevřete ve webovém prohlížeči úvodní stránku Tomcatu a vlevo nahoře klikněte na „Tomcat Manager” načež budete vyzváni k autentizaci prostřednictvím jména a hesla zadaných při instalaci. Po úspěšném přihlášení se otevře rozhraní pro správu Tomcatu. Nalezněte formulář nazvaný „War file to deploy” a zmáčkněte tlačítko „Choose”. V následně otevřeném dialogovém okně vyhledejte WAR soubor databáze, jež je umístěn na přiloženém CD v adresáři „install/xindice” ve verzi 1.1b4. Potvrďte výběr a zmačknutím tlačítka „Deploy” v Tomcat Manageru můžete databázi nasadit do aplikačního serveru. Nyní je ještě třeba nastavit dvě systémové proměnné. Otevřete „Ovládací panely” a „Systém”, kde na kartě „Upřesnit” vyberete možnost „Proměnné prostředí”. Ve formuláři „Systémové proměnné” vyberte položku „Nová” a zadejte jméno proměnné „JAVA_HOME” a jako hodnotu cestu ke složce „bin” v adresáři Javy, takže např. „C:/java”. Potvrďte a obdobně vytvořte další systémovou proměnnou „XINDICE_HOME” s hodnotou „domovský_adresář_tomcatu/webapps/xindice/WEBINF”, takže např. „c:/tomcat6/webapps/xindice/WEB-INF”. Správnou funkci databázového systému ověříte spuštěním příkazové řádky, přesunutím se do domovského adresáře Xindice příkazem „cd %XINDICE_HOME%” a
29
odesláním příkazu „xindice”. Pokud se objeví informace o přepínačích a syntaxi příkazů pro ovládání databáze, je tato funkční. Dále je potřeba v databázi vytvořit alespoň jednu novou kolekci, do které se budou ukládat data. To lze provést buď za pomoci grafického uživatelského rozhraní klienta aplikace (viz Uživatelská příručka) nebo prostřednictvím příkazové řádky např. příkazem „xindice add_collection -c xmldb:xindice://localhost:8080/db –n nazev_kolekce” v domovském adresáři Xindice. Collection URI neboli spojení do této kolekce potřebné pro nastavení připojení do databáze v klientovi aplikace je pak „xmldb:xindice://localhost:port/db/nazev_kolekce”, kde „localhost” je třeba nahradit adresou serveru, na kterém běží databáze a „port” portem zadaným při instalaci aplikačního serveru.
B.2.4 Instalace klienta
Klient systému „Databáze hudebních rodokmenů” je distribuován ve třech variantách, což také představuje tři způsoby instalace a použití. Nejjednodušší varianta je ve formě spustitelného JAR souboru a přidružených knihoven, jež naleznete na přiloženém CD v archivu „install/klient/jar/muf-jar.zip”. Tento soubor stačí rozbalit na pevný disk a aplikaci spustit souborem „muf.jar” přímo nebo v příkazové řádce jako „java -jar muf.jar”. Celý archiv obsahuje kromě tohoto spustitelného souboru pouze JAR knihovny potřebné pro běh aplikace a ukázky hudebních rodokmenů ve formátu XML. Distribuce klienta v této formě je vhodná především pro uživatele bez připojení k internetu, což ovšem nevylučuje práci s databází na vzdáleném serveru. Další forma distribuce silně vychází z formy předchozí a je pouze doplněna o JNLP soubor, který umožňuje nasazení klienta na web a spouštění bez nutnosti instalace nebo kopírování na pevný disk. Vše potřebné pro rozběhnutí aplikace je již nadefinována ve zmíněném JNLP souboru, který se sám postará o zkopírováni potřebných knihoven na pevný disk a následně spustí aplikaci. Tuto formu distribuce lze nalézt na přiloženém CD v archivu „install/klient/jnlp/muf-jnlp.zip”, jež je třeba rozbalit, obsah umístit na webový server a na webovou stránku umístít odkaz na JNLP soubor, který spouští aplikaci. Poslední varianta distribuce, jež se nachází na přiloženém CD v adresáři „install/klient/war” ve formě jediného WAR souboru, je rozhodně nejjednodušší na instalaci. Stačí tento soubor zavést do aplikačního serveru (testováno v aplikačním
30
serveru Apache Tomcat 6.0.10) a otevřít příslušnou webovou stránku. Zde je již umístěn odkaz na JNLP soubor, který spouští aplikaci. WAR soubor je vlastně obyčejným ZIP archivem, který kromě souborů obsažených v JNLP distribuci obsahuje navíc soubory definující vzhled stránky s odkazem na aplikaci. Jde především o soubor „index.jsp”, který lze snadno upravit, znovu vytvořit WAR archiv a tento nasadit do aplikačního serveru.
31
C
Uživatelská příručka
C.1 Úvodní obrazovka
Po úspěšném spuštění klienta aplikace, ať už z webu nebo v offline verzi z lokálního disku, se objeví následující úvodní obrazovka aplikace.
Obrázek C.1: Úvodní obrazovka aplikace
Jak je vidět, uživatelské rozhraní aplikace je poměrně jednoduché a přehledné. Převážnou část tvoří oblast nazvaná „Your document”, která zobrazuje XML data ve formě stromu, jehož větve a listy můžeme spravovat. Pravou část rozhraní tvoří sekce „Info”, která slouží k zobrazení důležitých informací uživateli. V této verzi aplikace zobrazuje pouze identitu právě vybraného uzlu dokumentu, ale je velice snadno rozšiřitelný o další informační body, jež by byly nezbytné v dalších verzích aplikace. Spodní část rozhraní je tvořena logovacím mechanismem, který zobrazuje zprávy o chodu aplikace. Zprávy obsahují přesný čas události a jsou barevně rozlišeny
32
podle závažnosti a důležitosti. Černé zprávy jsou pouze informačního charakteru, modré informují uživatele o úspěšně vykonaných úkonech a červené signalizují neúspěšnou nebo jinak nepodařenou operaci a mohou uživatele informovat o příčinách a možném řešení situace. Horní část rozhraní tvoří menu, které slouží k obsluze aplikace. Obsahuje především několik očíslovaných nabídek, které mají zvýšit intuitivnost ovládání a rychle a snadno tedy provést začínajícího uživatele procesem získání a editace a uložení dat až k vygenerování hudebního rodokmenu.
C.2 Menu
C.2.1 Get Data Menu „1) Get Data”, jak již název napovídá, slouží k získání dat nutných pro další zpracování. Obsahuje položku „New document” vytvářející nový dokument s jedním anonymním autorem tak, aby tento XML dokument byl již od počátku validní vůči schématu. Dále obsahuje položku „Open document”, jež umožňuje otevřít hotový XML dokument z pevného disku počítače a dále dvě funkce pracující s XML databází. První funkcí je „Import document”, která dokáže importovat jeden konkrétní dokument z databáze a další možností práce s databází je „Find data”, což umožňuje uživateli hledat ve všech dokumentech v databázi konkrétní data, v této verzi aplikace hudební skupiny a jednotlivé hudebníky.
C.2.2 Edit
Menu „2) Edit” slouží k editaci dat v oblasti „Your document” a pracuje zde s jednotlivými uzly stromu představující elementy XML dokumentu. Menu obsahuje tři položky: „Add”, „Edit” a „Remove”, jež slouží k přidání, editaci a vymazání uzlu, přičemž tyto jsou k dispozici, pouze pokud má funkce smysl, což se projeví změnou fontu položky menu. Přístupná funkce je zobrazena tučně a nepřístupná kurzívou. Tento mechanismus zajišťuje vždy správnou manipulaci s daty a prakticky neumožňuje pomocí GUI aplikace vytvořit invalidní XML dokument. Za zmínku snad ještě stojí, že položka „Add” mění dynamicky kromě svého fontu také obsah podle
33
toho, jaký element je možné na právě vybraném uzlu přidat. Celé menu „Edit” lze navíc také vyvolat přímo v části „Your document” jako kontextové menu použitím pravého tlačítka myši, popř. jiným v závislosti na zvyklostech otevírání kontextového menu na jednotlivých operačních systémech. Možné použití tohoto menu zobrazuje následující obrázek:
Obrázek C.2: Použití kontextového menu
C.2.3 Persist Data
Menu „3) Persist Data” umožňuje uložit data, která by se jinak po ukončení aplikace ztratila. Obsahuje pouze dvě položky: „Save document” umožňuje uložit data na pevný disk ve formě XML dokumentu a „Export document” slouží k uložení dokumentu do databáze.
34
C.2.4 Generate Tree
Menu „4) Generate Tree” obsahuje pouze položku „Generate”, která otevře okno s generátorem rodokmenů a vykreslí hudební rodokmen podle dat v sekci „Your document” hlavního okna aplikace.
C.2.5 View
Menu „View” obsahuje pouze položku „Look And Feel” umožňující změnu vzhledu aplikace.
C.2.6 Tools
Menu „Tools” obsahuje především funkci „Database setup”, která slouží k nastavení připojení k databázi, dále funkci „DB Administration” umožňující jednoduchou správu databáze i na vzdáleném serveru, funkci „Save XML schema” umožňující uložení XML schématu, na kterém stojí celá aplikace, na pevný disk. Uživatel si pak může vytvořit validní XML dokument i mimo tuto aplikaci. Dále menu „Tools” obsahuje tři funkce pracující s aktuálním dokumentem. Funkce „Validate document” slouží k validaci aktuálního XML dokumentu, přestože je vlastně zbytečná, protože aplikace uživateli vůbec neumožňuje vytvořit nebo otevřít či importovat invalidní dokument. Další funkcí je „Expand document”, která dokáže rozevřít celý dokument a zobrazit tak všechny jeho uzly. A naopak funkce „Collapse document” umí celý dokument uzavřít do jednoho uzlu.
35
C.3 Import document
Obrázek C.3: Uživatelské rozhraní pro import dokumentu
Funkce „Import document” umožňuje importovat dokument z XML databáze. Jak je vidět na obrázku, uživatelské rozhraní je velice jednoduché a intuitivní.
C.4 Find data
Obrázek C.4: Uživatelské rozhraní pro hledání dat v databázi
36
Funkce „Find Data” umožňuje hledat v databázi, tedy nad všemi XML dokumenty v databázi, konkrétní data. Přesněji řečeno umožňuje vyhledat zadané hudební skupiny a jednotlivé hudebníky, resp. jejich hudební skupiny. Jak je patrné z obrázku uživatelského rozhraní, aplikace zvládá i více dotazů najednou, což se zhlediska uživatele provádí zaškrtnutím možnosti „Multisearch” a postupným zadáním dotazu, tedy jména hudební skupiny nebo hudebníka, a přidáním do fronty dotazů tlačítkem „Add to queue”. Samotné vyhledání a zobrazení výsledků pak uživatel provede stisknutím tlačítka „Search by queue”, resp. „Search” v případě pouze jednoho dotazu.
C.5 Add Funkce „Add” z kontextového menu přidává uzel (element) do stromu XML dokumentu. Přidá vždy pouze počáteční hodnotu, kterou je potřeba změnit.
C.6 Edit Funkce „Edit” slouží k editaci uzlů ve stromu XML dokumentu.
Obrázek C.5: Editace textu Obrázek C.6: Editace data
Jak je vidět z obrázků, editace je velmi jednoduchá a intuitivní. Aplikace navíc kontroluje jestli zadané datum dává smysl, což zahrnuje i kontrolu přestupného roku, takže uživateli vůbec neumožní zadat neexistující nebo jinak nesmyslné datum.
37
C.7 Export document
Obrázek C.7: Export dokumentu do databáze
Funkce „Export document” umožňuje uložit XML dokument do databáze. Jméno dokumentu, tedy jak se bude tento prezentovat v databázi, si uživatel volí sám nebo ho nechá vygenerovat databázovým strojem. Takový název pak ale zpravidla nebývá moc uživatelsky příjemný.
C.8 Database setup
Obrázek C.8: Nastavení připojení k databázi
Funkce „Database setup” slouží k nastavení připojení k databázi. Nastavuje se zde pouze tzv. „Collection URI”, což je cesta k požadované kolekci, která se kromě definice rozhraní (protokolu) skládá především ze serveru a portu, na němž běží databáze a kolekce, do které se chceme připojit.
38
C.9 DB Administration
Obrázek C.9: Administrace databáze
Funkce „DB Administration” slouží k jednoduché správě databáze. Umožňuje mazat dokumenty a mazat a přidávat kolekce.
39
C.10 TreeGen - Music Family Tree Generator
Obrázek C.10: Generátor hudebních rodokmenů
Komponenta „TreeGen” spustitelná funkcí „Generate” v menu „Generate Tree” slouží k vygenerování hudebního rodokmenu. Uživatelské rozhraní tvoří především plátno s rodokmenem, stavový řádek ve spodní části a menu v části horní. S rodokmenem lze na plátně velice snadno manipulovat. Tahem myší při stisknutém levém tlačítku s ním lze pohybovat a skrolováním kolečka myši lze měnit jeho velikost. Tady hraje významnější roli stavový řádek, který kromě informování uživatele o právě prováděné činnosti dokáže také informovat o případném nevhodném nastavení nefunkčního skrolovacího kolečka a navrhne možné řešení. Dalším nástrojem pro transformaci rodokmenu je „Control Panel” spustitelný stejnojmenným tlačítkem v menu. Tento nástroj umožňuje změnu velikosti a rotaci rodokmenu pomocí jednoduchých táhel. Tlačítkem „Set default transformations” lze rychle a jednoduše vrátit rodokmen do své původní pozice a tlačítkem „Save image” ho lze uložit na pevný disk jako obrázek v několika formátech.
40
D
Konfigurační příručka Konfigurace aplikace spočívá především ve správě databáze, kterou částečně
umožňuje i uživatelské rozhraní klienta. Pro složitější operace je nutné použít příkazový řádek v domovském adresáři Xindice. Můžeme zde například vytvořit novou kolekci příkazem „xindice add_collection -c xmldb:xindice://server:port/db -n nazev_kolekce”, vymazat kolekci příkazem „xindice delete_collection -c xmldb:xindice://server:port/db/nazev_kolekce”, spravovat indexy pro urychlení vyhledávání apod. Podrobněji viz [10].
41
42
E
Přílohy
E.1 XML schéma <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="Database"> <xs:annotation> <xs:documentation>Comment describing your root element <xs:complexType> <xs:sequence> <xs:element name="Name" type="xs:string" minOccurs="0"/> <xs:element name="Author" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="Name" type="xs:string"/> <xs:element name="FromDate" type="xs:gYearMonth"/> <xs:element name="ToDate" type="xs:gYearMonth" minOccurs="0"/> <xs:element name="Member" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="Name" type="xs:string"/> <xs:element name="BirthDate" type="xs:date"/> <xs:element name="DeathDate" type="xs:date" minOccurs="0"/> <xs:element name="Instrument" type="xs:string" maxOccurs="unbounded"/> <xs:element name="Album" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="Name" type="xs:string"/> <xs:element name="ReleaseDate" type="xs:gYearMonth"/>
43
F
Obsah přiloženého CD
CD |----- install |----- java |-- jre-6-windows-i586.exe
|----- klient |----- jar |-- muf-jar.zip
|----- jnlp |-- muf-jnlp.zip
|----- war |-- muf.war
|----- tomcat |-- apache-tomcat-6.0.10.exe
|----- xindice |-- xindice-1.1b4.war
|----- src |-- src.zip
|----- text |-- sukalm1_2007bach.pdf
44