Můžu již dnes využít XML? Není to nákladné? Nebudu mít nějaké problémy? A co tím vlastně získám? Na tyto otázky bych vám chtěl dát dnes odpovědi. Článek obsahuje i praktický příklad XML.

Již v předchozím článku, který se zabýval tím, co je XML, jsem popisoval XML na příkladu programu kin. Není důvod v tom nepokračovat a pro ty, co článek četli to bude jednodušší. Použiji tedy sběr programů různých kin jako modelový příklad. Nečiním si nárok na vyčerpávající popis problematiky. Zaměřím se pouze na to, kde lze využít XML.

Představte si, že máte za úkol vytvořit server s aktuální nabídkou programů kin. Nebudeme se zabývat prezentací získaných programů kin (tedy převodem sebraných dat do HTML). Naší hlavní částí bude samotný sběr dat od jednotlivých kin. Dodejme jenom, že neznáme XML a jak jej použít.

Klasické řešení

Takže jsem na začátku sběru dat. Máme před sebou jednoznačný úkol: získat programy kin v co největším počtu a rozumné aktuálnosti s udržením co nejnižších nákladu. Určitým způsobem (ten nás v našem případě nezajímá) dojde k vytvoření programu na ruční zadávání (vlastním zaměstnancem) sebraných dat do centrální databáze. Pak vzniká otázka, jak vlastně budu získávat ty programy kin? Nechci dělat aplikaci na webu pro kina, aby sami mohli zadávat potřebná data. Využiji všech dostupných možností, které jsou k dispozici: fax, e-mail, pošta, HTML stránky kin. Dále oslovím dopisem kina s žádostí o zasílání (zpřístupnění) svých programů. V dopisu uvedu o jaká data mám přesně zájem. Potud je vše ok. Ale co teď? Když uvedu, že data chci v souboru MS EXCEL nejlépe verze 97, se zlou se potážu. Proč? Mám jistotu, že všechna kina mají program MS EXCEL? Ani s návrhem jiných programů bych neuspěl. Rezignuji, a nechám to čistě na kinech, jak mi budou zasílat data.

Takže, jak vypadá nyní situace při sběru dat. Kina mi zasílají své programy různými způsoby: e-mail, html, dopis, fax a navíc v různých formátech, dokonce kina, která mají svoje www stránky (včetně programu kin) na Internetu, je mají různé. A tady je zádrhel – všechna data (včetně těch, která jsou v elektronické podobě) se musí ručně přepisovat. Zde je vidět, že z časových důvodů se jednoznačně nevyplatí ruční zpracování.

Řešení XML

Dnes existuje XML a náležitě toho využijeme. Nejprve je nutné uvést, že XML můžu využít pouze u kin, která s námi komunikují přes Internet nebo která data zasílají na disketě. Těm, co zasílají programy faxem nebo dopisem není pomoci a nezbude nic jiného, než je přepisovat nebo je vůbec v programu kin neuvádět. Vraťme se ovšem k elektronickému zpracování.

Pokud víte co je XML, jistě jste vycítili, že XML se dá použít jako formát dokumentu (souboru), který bychom měli dostávat od jednotlivých kin. Jelikož samotné XML neurčuje elementy, kterými se má program kin zapsat, ale určuje pouze způsob zápisu, musím tyto elementy a pravidla, sám vytvořit. V XML se k tomu používá tzv. definice typu dokumentu (zkráceně DTD).

DTD

DTD (document type definiton – definice typu dokumentu) je textový soubor, který obsahuje popis elementů, atributů a entit. Zároveň je v něm popsáno i jakým způsobem lze použít elementy a jejich atributy. Podíváte-li se na následující konkrétní příklad (programkin.dtd), lze z něho vyčíst, že například element programkin musí obsahovat nejméně jeden element kino (jedná se o zápis: <!ELEMENT programkin (kino+)>). Ten zase musí obsahovat jeden element nazevkina, jeden element adresa a žádný nebo více elementů film. Soubor DTD se využívá pro automatizovanou kontrolu obsahu XML dokumentu. Problematika DTD je složitá a zaslouží si samostatný článek.

příklad definice typu dokumentu – DTD: programkin.dtd

<!ELEMENT programkin (kino+)> <!ELEMENT kino (nazevkina,adresa,film*)> <!ELEMENT nazevkina (#PCDATA)> <!ELEMENT adresa (mesto,ulice)> <!ELEMENT mesto (#PCDATA)> <!ELEMENT ulice (#PCDATA)> <!ELEMENT film (nazevfilmu,delka,promitani*)> <!ELEMENT nazevfilmu (#PCDATA)> <!ELEMENT delka (#PCDATA)> <!ATTLIST delka typ (min|hod|dni) #REQUIRED> <!ELEMENT promitani (den,sal*)> <!ELEMENT den (#PCDATA)> <!ATTLIST den format CDATA #REQUIRED> <!ELEMENT sal (oznaceni,zacatekpromitani+)> <!ELEMENT oznaceni (#PCDATA)> <!ELEMENT zacatekpromitani (#PCDATA)> <!ATTLIST zacatekpromitani format CDATA #REQUIRED>

Dále bych měl vytvořit manuál, jak použít tyto elementy.

Manuál

Manuál není nic jiného než návod, jak správně vytvořit dokument. Jelikož je zápis DTD strohý a je spíše určen pro počítač, je manuál naopak obsahově bohatý a je výhradně určen pro člověka. Navíc není nijak omezen standardy jako DTD. Například velkou slabinou DTD je nemožnost definovat typy dat (čísla, datum), které mají elementy obsahovat. Je tak možné, že do elementu „delka“, někdo napíše „stodeset“ místo „110“. To se pomocí DTD ohlídat nedá. Samozřejmě se připravuje náprava, ale ještě není standardizována.

Vlastní tvorbu manuálu standard XML nijak nestanovuje a je na každém tvůrci nového značkovacího jazyka, jakým způsobem manuál vytvoří. Jako každý správný manuál by měl obsahovat spousty příkladů, včetně ukázky XML dokumentu, vytvořeného právě podle svého návodu.

příklad manuálu: programkin.txt

Značkovací jazyk ProgramKinoML 1.0 Ze dne 28.02.2000 Tento jazyk slouží k popisu programu kin v jednom dokumentu. Každé kino může promítat různé filmy v různých sálech a dnech. … Element kino Vždy jeden element kino pro jedno kino. Obsahuje v sobě elementy nazevkina, adresa a žádný nebo i několik elementů film. … Element zacatekpromitani Obsahuje čas začátku promítání. Musí v sobě obsahovat atribut format, který určuje formát (tvar) ve kterém je zapsán čas. Element zacatekpromitani se váže vždy k nějakému sálu v určitý den. … Ukázka dokumentu ProgramKinoML 1.0 <?xml version="1.0" encoding="windows-1250"?> <!DOCTYPE programkin SYSTEM "programkin.dtd"> <programkin> <kino> <nazevkina>Galaxie</nazevkina> <adresa> <mesto>Praha</mesto> <ulice>Arkalycká 877/1</ulice> </adresa> <film> <nazevfilmu>Klub rváčů</nazevfilmu> <delka typ="min">107</delka> <promitani> <den format="dd.mm.yyyy">20.02.2000</den> <sal> <oznaceni>Kino 1</oznaceni> <zacatekpromitani format="hh.mm">17.00</zacatekpromitani> <zacatekpromitani format="hh.mm">19.15</zacatekpromitani> <zacatekpromitani format="hh.mm">21.30</zacatekpromitani> </sal> </promitani> </film> </kino> </programkin>


Jistě jste si všimli, že jsem manuál nazval jako“Značkovací jazyk ProgramKinoML 1.0″. A skutečně. Tím, že jsme vymysleli elementy, vytvořili DTD a napsali manuál, vytvořili jsme nový značkovací jazyk, který jsme nazvali ProgramKinoML 1.0 (viz předchozí článek).

Nyní je na čase oslovit kina s tím, že elektronická komunikace bude probíhat v jazyku ProgramKinoML 1.0. V tomto jazyku nám budou předávat své programy kin. Ale pozor! Nedopusťme se stejného omylu jako v minulosti s požadavkem na soubory ve formátu MS EXCEL. Je zde zásadní rozdíl: k vytvoření XML dokumentu (nezapomeňte ProgramKinoML 1.0 je aplikací XML) nepotřebujete žádný speciální program. Stačí vám naprosto základní textové editory dodávané s každým operačním systémem (notepad.exe). Je to díky tomu, že XML není žádný binární soubor, ale textový. Dokonce mu nebude vadit ani různá kódování češtiny, neboť na začátek XML dokumentu lze uvést kódování, které bylo použito. To, že lze využít i UNICODE je pouze lahůdkou. Díky němu můžete v jednom XML dokumentu uvádět originální názvy filmů, a to i kdyby filmy pocházely třeba z Číny nebo Japonska (obrázková písma), včetně českých překladů.

Možná by to stačilo, ale upřímně – kdo by dnes ručně vytvářel XML dokumenty? Sice se najdou výjimky, ale ty brzo vymřou. Předpokládejme, že každé kino si už zaběhlo svůj způsob vytváření programu kin. Někdo ve Wordu, Excelu, jiný zase speciálním programem apod. Všechny tyto nástroje mají jednu společnou vlastnost: lze je použít na vytváření XML dokumentu. Nevěříte? Například z Wordu lze pomocí makra transformovat obsah dokumentu na tvar jazyka ProgramKinoML 1.0 a uložit jako textový soubor s koncovkou .xml. Něco podobného lze vytvořit v Excelu, Accessu, Text602 apod., ale co speciální programy (třeba informační systémy), které mají přece výstupní sestavy? A udělat ještě jednu sestavu (textovou), která bude XML dokumentem, je velmi snadnou záležitostí. Každý slušný programovací jazyk totiž umí vytvářet textové soubory, což pro tvorbu XML dokumentu naprosto stačí. Mají-li kina své stránky na Internetu, nic jim nebrání (technicky) v přidání tohoto XML dokumentu mezi ně.

Konečně jsme se dostali k tomu nejhlavnějšímu: zpracování programů kin. Máme nějakou databázi, v které si udržujeme program kin. Naším úkolem je tedy ji aktualizovat. Jak vypadá současná situace? Požadované programy kin nám chodí e-mailem, nebo na disketách a modernější kina mají program kin umístěný mezi svými HTML stránkami. A všechny jsou v našem ProgramKinoML 1.0. Je tedy na nás vytvořit konverzní program, který bude sloužit pro převod dat z ProgramKinoML 1.0 do databáze. Jak na to?

Musíme vytvářet program na čtení ProgramKinoML 1.0? Nemusíme. Tím, že se jedná o XML dokument, můžeme použít již hotové programy (v drtivé většině zdarma k použití včetně zdrojových textů), které nám přečtou, zajistí překódování (nezapomeňte – XML dokumenty můžou být v různých kódováních češtiny) a zároveň zkontrolují dokument. K tomu je právě zapotřebí to DTD. Dokument, který projde kontrolou a je tím pádem skutečně vytvořen podle naší definice (DTD), se našemu konverznímu programu zpřístupní ve formě stromové struktury, kterou je snadné procházet a zpracovávat. Je to jeden z možných způsobů, existují i jiné způsoby (např. ve formě událostí).

Dnes už nezáleží na tom, jaký programovací jazyk používáte. Tyto nástroje jsou prakticky vytvořeny pro všechny programovací jazyky. Ale co uděláme s dokumenty, které neprošly kontrolou? Seznam chyb, díky kterým XML dokument neprošel, jsou programu rovněž přístupné. Ten je zašle (může i automaticky) nazpět hříšníkovi k nápravě. Samozřejmě i samotná kina můžou, pomocí těchto programů, kontrolovat, zda-li jejich program kin, v jazyku ProgramKinoML 1.0, odpovídá DTD a základním pravidlům XML dokumentu. A nebude je to stát ani korunu – pouze čas

Tento příklad demonstruje nejsilnější stránku XML: přenositelnost informací. Pro zajímavost jenom připomenu, že jsem se ani jednou nezmínil o zobrazení XML dokumentu. A o to v XML skutečně nejde. A ještě něco. Co kdyby se kina už dnes domluvily a vytvořily něco obdobného jako ProgramKinoML 1.0? Byla by to budoucnost.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět