}w !"#$%&'()+,-./012345
M ASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
Mobilní katalogy zboží ˇ B AKALÁ RSKÁ PRÁCE
Tomáš Masník
Brno, leden 2009
Prohlášení Prohlašuji, že tato bakaláˇrská práce je mým puvodním ˚ autorským dílem, které jsem vypracoval samostatnˇe. Všechny zdroje, prameny a literaturu, které jsem pˇri vypracování používal nebo z nich cˇ erpal, v práci rˇ ádnˇe cituji s uvedením úplného odkazu na pˇríslušný zdroj.
Vedoucí práce: doc. RNDr. Tomáš Pitner, Ph.D. ii
Podˇekování Chtˇel bych podˇekovat doc. RNDr. Tomáši Pitnerovi, Ph.D. za pohodové vedení práce, dobré rady a optimistický pˇrístup. Taky bych chtˇel podˇekovat Bc. Martinu Jantošoviˇcovi za spolupráci pˇri vývoji našich vzájemnˇe propojených prací.
iii
Shrnutí V dnešní dobˇe internetu je cˇ ím dál více informací dosažitelných nejlépe z HTML stránek. Práce popisuje možnou strukturu hierarchie stránek vedoucí k cílovým datum ˚ a v hlavní cˇ ásti se zabývá aplikací, která data ze stránek umí získat.
Úvod V dnešní dobˇe, kdy každý výrobce jakéhokoli druhu zboží vystavuje vlastní katalog vˇetšinou v podobˇe internetových stránek, je pro uživatele velmi obtížné si ruˇcnˇe zpracovat velké množství dat tak, aby je mohl mít po ruce, kdykoli potˇrebuje. Pro tento úˇcel byla navržena a vyvinuta následující aplikace. Cílem práce je navrhnout a implementovat aplikaci, která umožní uživateli projít internetové stránky s katalogy zboží a získat z nich duležitá ˚ data. Tato data dále program zpracuje a pˇredá uživateli ve formˇe, která bude snadno cˇ itelná pro další zpracování. Pro tvorbu aplikace bylo použito programovacího jazyka Java, který je platformovˇe nezávislý, aplikace proto bude fungovat na vˇetšinˇe operaˇcních systému. ˚ I pˇres název práce – Mobilní katalogy zboží – tato práce dovoluje zpracovávat libovolná data dosažitelná pˇres web. Ruzná ˚ data katalogu˚ navíc bude aplikace schopna opakovanˇe naˇcíst díky ukládání konfiguraˇcních souboru˚ a možnosti znovu je zpracovávat. Tyto konfiguraˇcní soubory ve formˇe XML dokumentu˚ jsou jednoduše srozumitelné a snadno editovatelné i bez pomoci obslužné aplikace.
1.1
Katalogy zboží
Katalogy zboží získané z internetových stránek mohou mít mnohá využití. Jedním z nich je napˇríklad využití pro lidi, kteˇrí musí podstupovat bezlepkovou dietu. Jednou ze základních úloh aplikace je, poskytnout tˇemto lidem možnost jednoduše nakupovat potraviny za použití mobilního telefonu a v nˇem uložených dat. Celiakie je chronické onemocnˇení sliznice tenkého stˇreva z duvodu ˚ pˇrecitlivˇelosti na gluten (lepek), což je bílkovina, obsažená v mnoha druzích obilí. Nesnášenlivost pˇretrvává celoživotnˇe, cˇ ásteˇcnˇe geneticky determinována. V souˇcasnosti se nedá definitivnˇe léˇcit [3]. Proto lidé trpící touto chorobou musí nakupovat bezlepkové potraviny. Ne vždy jsou však dostateˇcnˇe oznaˇceny. Proto jedním z dostupných zdroju, ˚ jak zjistit, které potraviny jsou nebo nejsou bezlepkové, je internet. Tato práce se soustˇredí na získávání dat z online katalogu˚ a následné ukládání do ruz˚ ných formátu˚ pro další zpracování. Pro lidi trpící celiakií muže ˚ být velmi užiteˇcná aplikace, která umožní hledat v takovýchto katalozích pˇri nákupu potravin. Z internetových stránek uživatel získá informace, zda jsou výrobky bezlepkové. V obchodˇe pak za pomoci mobilního telefonu zjistí jednoduchým vyhledáním, jestli je vybrané zboží opravdu bez lepku. 1
1.2. DALŠÍ VYUŽITÍ Takto katalog vyprodukovaný touto aplikací zpracovává navazující práce Martina Janˇ výše uvedený plán použití. tošoviˇce Mobilné katalógy [7], která pˇresnˇe naplnuje
1.2
Další využití
Další možná využití této práce závisí pouze na fantazii uživatele. Aplikace je schopna zpracovat libovolnou internetovou HTML stránku, která je alesponˇ nˇejak znaˇckována. Je schopna získávat data z ruzných ˚ stránek a ukládat je do formátu podporovaného vˇetšinou tabulkových procesoru. ˚ Takto získaná data mohou být dále využita pro statistické úˇcely, získávání informací z mnoha podobných stránek, globální srovnávání cen apod.
2
Kapitola 2
Analýza a návrh Práce zpracovává nˇekolik základních úloh. První z nich je naˇctení informace, jak a z kterých stránek se data mají získat, a uložení této informace do samostatného XML výstupního souboru. Bˇehem zpracování se bude využívat dotazovacích výrazu, ˚ které se budou také pro lepší uživatelské pohodlí ukládat do souboru pro opakované použití. Další cˇ ástí pak je samotné naˇctení dat a následné uložení do jednoho ze zvolených formátu. ˚ Poslední cˇ ástí je pak grafické rozhraní, které by tyto funkce mˇelo nabízet v uživatelsky pˇríjemném prostˇredí. Rozeberme si tyto cˇ ásti postupnˇe. První a nejduležitˇ ˚ ejší cˇ ást analýzy spoˇcívá ve zjištˇení, jak pˇresnˇe mohou vypadat všechny druhy zpracovávaných stránek. Požadavek na aplikaci je takový, aby dokázala zpracovat všechny typy stránek obsahující data na ruzných ˚ místech. Další cˇ ástí, kterou je tˇreba analyzovat, jsou potˇreby uživatele. To znamená, jaká data chce uživatel ze stránek konkrétnˇe uložit a jakého formátu tato data jsou. Podle zjištˇené struktury pak navrhneme vhodný formát pro uložení katalogu.
2.1
HTML stránky
2.1.1 Obsah HTML stránky
Obrázek 2.1: Obecné schéma hierarchie HTML stránek 3
2.1. HTML STRÁNKY Data ve vˇetšinˇe pˇrípadu˚ nejsou pohromadˇe na jedné stránce. Aplikace tedy musí poskytovat možnost z jedné stránky pˇrejít na jinou. Stránky pro lepší orientaci budeme dˇelit podle úrovní. Podle obrázku 2.1 jsou tedy stránky A a B stránky nejvyšší úrovnˇe (I.). Stránka A obsahuje odkazy na stránky nižší úrovnˇe (II.) C a D. Stránka B není na obrázku blíže rozebrána. Stránka C obsahuje odkazy na stránky 1 a 2 nejnižší úrovnˇe (III.). Stránka D obsahuje odkazy na stránky 3 a 4 nižší úrovnˇe (III.) a na stránku E stejné úrovnˇe (II.). Obdobnˇe stránky E a F. Jednou úrovní stránek máme na mysli takové stránky, které mají stejnou strukturu a obsahují odkazy na stránky, které mají také stejnou strukturu. Napˇríklad: máme internetový katalog zboží. Má následující kategorie, pˇriˇcemž platí, že nadˇrazená kategorie obsahuje odkaz na všechny podˇrazené a na stránkách nejnižších kategorií jsou data: •
•
•
Kategorie 1 –
Podkategorie 1.1
–
Podkategorie 1.2
Kategorie 2 –
Podkategorie 2.1
–
Podkategorie 2.2
–
Podkategorie 2.3
Kategorie 3 –
Podkategorie 3.1
V tomto pˇrípadˇe by stránky pro kategorie 1, 2 a 3 odpovídaly stránkám nejvyšší úrovnˇe, kdežto stránky všech podkategorií by byly stránky nižší úrovnˇe. Z podkategorií tedy naše aplikace bude dále získávat data. V pˇredchozím pˇríkladu není zahrnuta možnost, že by stránka obsahovala odkaz na další stránku stejné úrovnˇe. Takto by se zpracovávaly tytéž kategorie, platilo-li by, že podkategorie obsahují sice data, nicménˇe obsahují ještˇe odkaz na další stránku téže podkategorie, která obsahuje další data. Napˇríklad tedy pokud by podkategorie 1.1 obsahovala na své první stránce data 1.1.1 – 1.1.10 a odkaz na další stránku, kde by byla data 1.1.11 – 1.1.20. Takovýchto stránek bývá omezený poˇcet, uživatel tedy musí specifikovat, kolikrát se má pˇrejít na další stránku stejné podkategorie. Každá HTML stránka muže ˚ obsahovat tˇri duležité ˚ prvky pro další zpracování: 4
2.1. HTML STRÁNKY •
odkaz na další stránku stejné úrovnˇe, která má stejnou strukturu jako aktuální stránka
•
odkaz na stránku další úrovnˇe, která se zpracovává jiným zpusobem ˚ než aktuální stránka
•
data. Na jedné stránce muže ˚ být právˇe jedna datová položka, nebo více datových položek.
Všechny tˇri prvky se mohou na libovolné stránce vyskytovat jak právˇe jednou, tak i vícekrát. Aplikace má však poskytovat jednoduché uživatelské rozhraní, proto je v práci možnost více odkazu˚ na stránku se stejnou strukturou zanedbána. Duvodem ˚ je, že aplikace by se stala zbyteˇcnˇe ménˇe pˇrehlednou pˇresto, že tento druh internetových stránek se témˇerˇ nevyskytuje, pˇrípadnˇe vyskytuje, ale dá se zpracovat pohodlnˇeji jinak.
2.1.2 Formát HTML HTML formát nemá striktnˇe stanovena pravidla syntaxe, což muže ˚ pˇri strojovém zpracování zpusobovat ˚ rˇ adu problému. ˚ Data i odkazy na další stránky je tˇreba nˇejak adresovat. K tomuto úˇcelu se velmi dobˇre hodí jazyk XPath. Tento jazyk je však urˇcen pro adresování XML dat, je tedy ještˇe tˇreba pˇrevést HTML stránky do korektní XML formy. Tuto funkcionalitu zabezpeˇcí knihovna JTidy. Pro správné zpracování stránek je nezbytnˇe nutné, aby stránky, které se mají zpracovávat stejnˇe, mˇely stejnou nebo alesponˇ velmi podobnou strukturu, napˇr. zpracovávám HTML stránku A, ze které vedou odkazy na stránky B a C další úrovnˇe. Pˇredpokladem vyvíjené aplikace je, že stránky B a C mají stejnou nebo alesponˇ velmi podobnou strukturu ve smyslu uspoˇrádání elementu˚ vytvoˇreného XML.
2.1.3 Formát dat na stránkách Data mohou na jedné stránce být bud’ vícekrát, nebo právˇe jednou. V pˇrípadˇe, že na stránce je dat více, je tˇreba, aby bylo jednoznaˇcnˇe urˇcitelné, co pˇresnˇe jsou data. K tomuto úˇcelu využijeme znovu jazyka XPath. Stanovíme pˇredpoklad, že všechny datové položky jsou adresovatelné jedním výrazem XPath, jehož výsledkem je seznam uzlu˚ takový, že každý uzel obsahuje právˇe jednu datovou položku. Uživatel muže ˚ chtít jako výsledek svého dolování dat nˇekolik ruzných ˚ hodnot pro jednu datovou položku, napˇr. pro jeden druh potravin chce vˇedˇet název, hmotnost a složení této položky. Proto dalším pˇredpokladem pro zpracování dat je, že na koncových stránkách (v pˇrípadˇe, že na jedné stránce je právˇe jedna datová položka) nebo v koncových uzlech (v pˇrípadˇe více datových položek na stránce) je vždy stejná struktura dat jednoduše adresovatelná výrazy XPath. 5
ˇ 2.2. VYTVO RENÍ XML SOUBORU KATALOGU
2.2
Vytvoˇrení XML souboru katalogu
2.2.1 Formát výsledných dat Každá datová položka se bude skládat z jednotlivých sloupcu˚ pomyslné databázové tabulky. Tyto sloupce mohou mít ruzné ˚ datové typy – rˇ etˇezec (string), logickou hodnotu (boolean), celoˇcíselnou hodnotu (int) nebo reálné cˇ íslo (double). Tedy napˇríklad pro datovou položku potravin muže ˚ uživatel chtít vytáhnout ze stránek data název (string), je-li daná položka vhodná pro cˇ lovˇeka trpícího celiakií (boolean), hmotnost v gramech (int) apod. 2.2.2 Návrh formátu XML souboru katalogu Pro každý katalog je nutné specifikovat, jak a odkud se mají data získávat. Tyto informace pro zpracování je vhodné uložit, aby uživatel mohl data získávat opakovanˇe. Pro uložení informací je vhodný formát XML. Je vhodnˇe strukturovaný, ale zárovenˇ i cˇ itelný pro lidské oko. Navíc je pro tento formát velmi dobrá podpora v námi zvoleném programovacím jazyce Java. Každý katalog musí mít zadáno jméno pro jednodušší orientaci uživatele mezi ruznými ˚ katalogy. Dále je pro každý katalog nutno specifikovat jména a datové typy sloupcu˚ datových položek, které uživatel potˇrebuje. Poslední povinnou složkou je seznam stránek, ze kterých se data mají vytahovat, jejich hierarchie až na poslední stránky, které obsahují data. Pro každou tuto hierarchii je nutno definovat, na kterých stránkách se nachází data a jak se mají jednotlivé sloupce datové položky zpracovávat. Pro všechny tyto informace je pro aplikaci navržen jednoduchý XML formát (viz pˇríloha A).
2.3
Ukládání dat
Data mohou mít libovolné atributy, a to cˇ íselných, rˇ etˇezcových cˇ i logických hodnot. Pro navazující mobilní aplikaci (podle specifikace ze [7]) bude vhodné, aby data mˇela tˇri složky: •
hlaviˇcku s obecnými údaji o datech
•
data pro zobrazení položky v seznamu v mobilní aplikaci
•
detaily, ke kterým se uživatel dostane vybráním položky ze seznamu v telefonu
V seznamu muže ˚ být pouze jedna rˇ etˇezcová hodnota (pro zobrazení položky - typicky její jméno), dále libovolný logických hodnot, které mohou být už v seznamu použity jako filtry. Detail položky je co se týˇce poˇctu a typu˚ hodnot neomezený. Samotné naˇctení dat by mˇelo probˇehnout co nejrychleji a nejjednodušeji, aby uživatel mohl aktualizovat data v katalogu bez vˇetšího úsilí. 6
2.3. UKLÁDÁNÍ DAT Data budou zpracovávána mobilním zaˇrízením, proto se neoˇcekává velká zátˇež systému a tedy není tˇreba použít žádného databázového systému. Aplikace data uloží pouze do formátu˚ pro zpracování mobilní aplikací 2.3.1 nebo tabulkovým procesorem 2.3.2. 2.3.1 .zip archiv Výsledný ZIP archiv je dále zpracováván mobilní aplikací. Obsahuje 3 soubory: •
config – konfiguraˇcní soubor – obsahuje hlaviˇcku katalogu, tj. názvy a typy položek, a informaci, podle kterých položek bude možno v aplikaci hledat.
•
content - data pro položku, která budou zobrazena v seznamu v mobilní aplikaci a budou dovolovat vyhledávat cˇ i tˇrídit data. Hodnoty pro jednu datovou položku budou uloženy na jednom rˇ ádku oddˇeleny tabulátorem.
•
detail - data pro detail položky, která budou zobrazena v aplikaci po výbˇeru položky ze seznamu. Hodnoty pro jednu datovou položku budou uloženy na jednom rˇ ádku oddˇeleny tabulátorem.
2.3.2 .csv soubor CSV formát urˇcuje textový soubor, ve kterém je jednoduše zaznamenaná tabulka. S tímto formátem si poradí vˇetšina bˇežnˇe používaných tabulkových procesoru˚ (napˇr. MS Excel nebo OpenOffice Calc). Výhodou tohoto formátu je, že si takto uložená data uživatel bude moci jednoduše a pˇrehlednˇe prohlédnout i na osobním poˇcítaˇci. Data pak bude moci dále zpracovat do dalších bˇežnˇejších formátu. ˚ Tedy navrhovaná aplikace bude mít o nˇeco širší využití.
7
Kapitola 3
Použité technologie 3.1
Vývojové prostˇredí NetBeans IDE
Aplikace byla vyvíjena v prostˇredí NetBeans IDE 6.5. Jedná se o volnˇe šíˇritelný nástroj, který umožnuje ˇ tvorbu nejruznˇ ˚ ejšího softwaru od mobilních až po serverové aplikace. Obsahuje rˇ adu ruzných ˚ užiteˇcných nástroju˚ a doplnk ˇ u, ˚ cˇ ímž poskytuje programátorum ˚ velice pˇríjemné a pohodlné programování. Jednou z jeho mocných zbraní je vizuální návrháˇr grafického uživatelského prostˇredí. Umožnuje ˇ snadno interaktivnˇe navrhnout vzhled formuláˇre tak, že si z pˇredem pˇripravených komponent poskládáme celé okno. Samozˇrejmostí je i snadná obsluha událostí k jednotlivým komponentám. Pˇritom vzniká pˇrehledný zdrojový kód, do kterého zbývá doplnit jen samotnou funkcionalitu. I prostˇredí editace kódu se snaží programování maximálnˇe usnadnit. Nabízí napˇríklad automatické doplnování ˇ psaného kódu, pˇrehledné formátování, grafické zvýraznování ˇ syntaxe a mnoho dalšího. Velkou pˇredností tohoto prostˇredí pro právˇe tuto práci je, že hlavní jazyk, pro který bylo prostˇredí navrženo, je Java. Tedy všechny funkce, které prostˇredí nabízí, jsou pro tento jazyk použitelné a funkˇcní.
3.2
Java
Java je univerzální objektovˇe orientovaný programovací jazyk vyvinutý firmou Sun [5]. Programátorum ˚ nabízí bohatou a dobˇre zdokumentovanou knihovnu tˇríd (Java Core API), která umožnuje ˇ vytváˇret platformovˇe nezávislé programy, které je možné spouštˇet na všech bˇežnˇe používaných systémech, jako je MS Windows, Linux, Mac OS a dalších. Jedinou podmínkou je, aby na daném poˇcítaˇci, kde chceme program spustit, bylo nainstalováno bˇehové prostˇredí (Java Runtime Environment). Oproti jiným jazykum ˚ totiž není program pˇrekládán pˇrímo do strojového jazyka poˇcítaˇce, ale do tzv. bajt-kódu, který je interpretován virtuálním strojem Javy (Java Virtual Machine). Java je vyvíjena v nˇekolika verzích podle oblasti použití. Pro desktopové aplikace se bˇežnˇe používá edice Standard. Pro vývoj této práce byla konkrétnˇe použita verze 1.6.0_11.
3.3
XML
Formát XML (Extensible Markup Language) je v souˇcasnosti velice oblíbený a rozšíˇrený. Oproti binárním formátum ˚ má tu výhodu, že jej lze otevˇrít v libovolném textovém editoru. 8
3.4. JTIDY Nehrozí tedy, že za pár let daný dokument již nepujde ˚ pˇreˇcíst, protože program, který jej používal, už nemáme. XML není konkrétní jazyk, ale standard urˇcující, jak vytváˇret znaˇckovací jazyky. Proto bývá oznaˇcován spíše jako metajazyk. Vychází ze staršího SGML (Structure Generalized Markup Language) a podobá se jazyku HTML. Musí sice splnovat ˇ jisté formální náležitosti, ale také dává autorum ˚ znaˇcnou volnost tím, že umožnuje ˇ vytváˇret vlastní znaˇcky i jejich atributy. Každý XML dokument je charakteristický svou hlaviˇckou, která má dva atributy. První udává verzi XML, druhý kódování:
Poté už následuje jeden koˇrenový element a v nˇem vnoˇrené další znaˇcky (tagy). Ty mohou být párové (každá znaˇcka <element> má svou uzavírací znaˇcku a mezi nimi je obvykle nˇejaký další obsah), nebo nepárové (<element/> uvnitˇr mohou být jen atributy elementu). Takovéto dokumenty lze snadno zpracovávat v ruzných ˚ aplikacích pomocí parseru˚ (analyzátoru), ˚ které umožnují ˇ postupné procházení dokumentu po jeho jednotlivých elementech.
3.4
JTidy
HTML formát má nejednoznaˇcnˇe zadanou syntax. Protože je požadováno získávání dat z libovolných HTML stránek (i tˇech nekorektnˇe zadaných), je tˇreba tyto stránky pˇrevést do jednoznaˇcnˇe zadané formy. Právˇe k tomu je v této práci použit nástroj Tidy, konkrétnˇe jeho implementace pro Javu – JTidy. Tato knihovna je volnˇe šíˇritelná. JTidy nabízí možnost zpracovat HTML stránku do formátu XHTML a to jak ve verzi HTML Transitional, tak i HTML Strict. Po zpracování stránky nabízí možnost stránku uchovat v pamˇeti jako DOM (Document Object Model) document, který se pak zpracuje v Javˇe pomocí podpory pro zpracování XML velmi jednoduše, navíc umožnuje ˇ použití jazyka XPath k adresování cˇ ásti stránky (viz 3.5). JTidy nabízí i další možnosti, jako napˇríklad transformování naˇcteného dokumentu do rˇ etˇezce, ruzná ˚ nastavení jako napˇr. použití entit pro znaky mimo ASCII, pˇripojení kaskádových stylu˚ k dokumentu apod. Tyto další funkce však v aplikaci použity nebyly.
3.5
XPath
XPath (XML Path Language) je jazyk, pomocí kterého lze adresovat cˇ ásti XML dokumentu. Pomocí tohoto jazyka lze z XML dokumentu vybírat jednotlivé elementy a pracovat s jejich hodnotami a atributy. Jazyk XPath je standardem vydaným organizací W3C. Jednodušší výrazy vybírají velmi snadno urˇcitou množinu uzlu, ˚ syntax je jednoduchá a i na pohled velmi srozumitelná: /A/B/C
9
3.6. XSLT Tento výraz napˇríklad oznaˇcuje množinu elementu˚ C, které jsou uvnitˇr elementu B, který je uvnitˇr elementu A, který je koˇrenovým elementem dokumentu. Takový zápis je podobný zápisu cesty k souboru v souborovém systému, pˇrípadnˇe URL. U složitˇejších dotazu˚ se místo implicitní osy child (pˇrímý potomek) muže ˚ zapsat jiná osa, oddˇelená cˇ tyˇrteˇckou, pˇrípadnˇe predikáty, uvedené jako seznam podmínek v hranatých závorkách. Pˇríkladem takového složitˇejšího dotazu je napˇríklad tento výraz: /A/B/following-sibling::*[1]
Vybere všechny (libovolnˇe pojmenované) elementy, které jsou prvním elementem následujícím po elementu B, který je uvnitˇr koˇrenového elementu A. Jazyk XPath nabízí ještˇe další funkce, není však pˇredmˇetem této práce je rozebírat. Použití XPath v aplikaci nabízí možnost pˇristupovat k naˇcteným datum. ˚ Tento nástroj by nebylo možné použít, kdyby se HTML stránka nepˇretransformovala na validní XML, proto je použita knihovna JTidy (viz 3.4). Jazyk XPath není pˇríliš nároˇcný na použití, proto je použit pro adresaci dat katalogu s tím, že koncový uživatel bude natolik vzdˇelaný, že jej bude schopen použít.
3.6
XSLT
Transformace XSLT (eXtensible Stylesheet Language Transformations) slouží k pˇrevodum ˚ zdrojových dat ve formátu XML do libovolného jiného požadovaného formátu, nejˇcastˇeji HTML, jiného XML nebo libovolných jiných datových struktur. Transformace se využívá v situaci, kdy máme XML dokument a potˇrebujeme ho pˇretvoˇrit na libovolný jiný formát, pˇrípadnˇe když máme naˇctený dokument v pamˇeti a potˇrebujeme ho jen zformátovat. XSLT parsery umožnují ˇ rozsáhlá nastavení transformací – od použité XSL transformaˇcní šablony až po detaily jako napˇr. poˇcet mezer, kterými se odsadí vnoˇrené elementy. Použití transformací v této práci nebylo nezbytné. Nicménˇe pro jazyk Java existuje velmi dobˇre zpracovaný balík (který je souˇcástí jádra jazyka), který umožnuje ˇ velmi snadné použití transformací. A to byl hlavní duvod ˚ použití XSL transformací pro zobrazení nebo uložení XML dokumentu. ˚
10
Kapitola 4
Implementace 4.1
Vytváˇrení katalogu
4.1.1 Vyhledávání cílových stránek
Obrázek 4.1: Okno pˇri vytváˇrení nového katalogu 11
ˇ 4.1. VYTVÁ RENÍ KATALOGU První a základní úlohou aplikace je vytvoˇrení informací potˇrebných k vytvoˇrení katalogu ˇ uživateli zvolit jeho jméno. Po zvolení (obrázek 4.1). První cˇ ást vytváˇrení katalogu umožnuje jména aplikace uživatele nutí vybrat sloupce datových položek. Tyto sloupce jsou rozdˇeleny na dvˇe cˇ ásti: •
v první cˇ ásti uživatel vytváˇrí sloupce pro seznam položek. Maximálnˇe jeden sloupec muže ˚ být typu rˇ etˇezce (String), dále muže ˚ seznam obsahovat libovolný poˇcet sloupcu˚ logických (Boolean).
•
druhá cˇ ást je urˇcena pro sloupce specifikující detail datové položky. Muže ˚ obsahovat rˇ etˇezce (String), cˇ íselné (celá cˇ ísla – Integer, nebo reálná cˇ ísla – Double) i logické (Boolean) hodnoty v neomezeném poˇctu.
Pˇri vytvoˇrení katalogu se v pamˇeti vytvoˇrí instance tˇrídy Catalog. Objekt katalogu obsahuje veškeré informace o celém katalogu a je jediným zdrojem k vytvoˇrení XML souboru s popisem katalogu. Tento objekt je držen v pamˇeti po celou dobu editace katalogu. Katalogu je pˇri vytvoˇrení pˇriˇrazena hlaviˇcka – jméno a všechny sloupce datových položek. Po vytvoˇrení katalogu je zobrazena první stránka, ze které se bude aplikace dostávat k datum. ˚ Adresa je zadána ve formˇe URL, systém poˇcítá s primárním použitím v internetových stránkách. První stránka navíc nemusí být nutnˇe pouze jedna URL. Uživatel má možnost dynamicky vygenerovat nˇekolik prvních stránek, lišících se pouze cˇ íslem v URL. Takže pokud uživatel napˇr. chce získávání dat zaˇcít na stránkách http://www.katalog.cz/1.html, http://www.katalog.cz/2.html až po napˇr. http://www.katalog.cz/15.html, aplikace toto umožnuje. ˇ Uživatel v tomto pˇrípadˇe zadá pouze pevnou cˇ ást adresy, cˇ ísla stránek, na kterých chce zaˇcít a koncovku, která následuje za cˇ íslem. Pˇri tomto kroku se vytvoˇrí v aplikaci objekt Page, který se pˇriˇradí aktuálnímu katalogu. Tento objekt obsahuje všechny podstatné informace pro další zobrazení stránky v grafickém rozhraní i informace pro následné vytahování dat z HTML stránek. Po zadání poˇcáteˇcní adresy (resp. více adres) se uživatel dostane na hlavní stránku aplikace (obrázek 4.2). Aplikace naˇcte ze zadané adresy (resp. první zadané adresy) dokument, který pak po konverzi do XHTML zobrazí v levé cˇ ásti okna. Vnitˇrní implementace k tˇemto krokum ˚ využívá statické metody tˇrídy Utils. Nejdˇríve metodou getHTMLDocument() naˇcte data z HTML stránky. Tato data pak zpracuje pomocí knihovny JTidy, takže výsledná data jsou ve formˇe XHTML v objektu org.w3c.Document. V levé cˇ ásti okna se aktuální dokument ukazuje uživateli v textové podobˇe, do které byl transformován metodou docToString() tˇrídy Utils. Aktuální dokument je držen v pamˇeti, protože se s ním provádí velké množství operací. Konkrétnˇe je držen jako atribut aktuálnˇe zpracovávaného objektu. Tímto objektem je bud’ Page (pouze pro úplnˇe nejvyšší úrovenˇ stránek) nebo Link (v pˇrípadˇe všech ostatních úrovní). Vzhledem k tomu, že tyto objekty mají stejný základ, je vhodné, aby tˇrída Page byla internˇe rˇ ešena jako potomek tˇrídy Link. Pravá cˇ ást okna slouží pro zjištˇení, jaké odkazy a data stránka obsahuje a jejich adresaci. Uživatel zde specifikuje, zda stránka obsahuje data. Pokud obsahuje více dat na jedné 12