var SectionTitles=new Array( "X kam se podφvßÜ" , " XML schΘmata" , " Je libo prostor?" , " Tφm jsme prostor stromy definovali a ny" , " Kudy k dat∙m?" , " Adresujeme data" , " S XML na web" , " XOdkazy" , " Zßv∞rem" );
ArticleHead('X kam se podφvßÜ', 'Michal Till', 'Michal.Till@Seznam.cz', '11.11.2002', '00:03:17', '╚lßnek');
Intro('V minulΘm dφle naÜeho povφdßnφ o XML jsme si vysv∞tlili zßkladnφ principy metajazyka. Ukßzali jsme si na jednoduch²ch p°φkladech, proΦ je vytvo°enφ vlastnφho datovΘho formßtu na zßklad∞ XML jednoduÜÜφ, rychlejÜφ a celkov∞ v²hodn∞jÜφ. Nynφ je na Φase, pov∞d∞t si vφce o technologiφch, kterΘ d∞lajφ tento koncept jeÜt∞ siln∞jÜφm.');
Obsahem druhΘ Φßsti minulΘho dφlu bylo z velkΘ Φßsti povφdßnφ o DTD - formßtu na popisovßnφ vlastnφch jazyk∙ na bßzi XML. Na DTD se nejv²sti₧n∞ji ukß₧e celß myÜlenka XML, ovÜem v praxi se od nich stßle vφce ustupuje a mφsto nich se pou₧φvß standard nov² - takzvanß XML SchΘmata.
Migrace na nov² zp∙sob zßpisu mß n∞kolik d∙vod∙ a v²hod. Za prvΘ je t°eba si uv∞domit, ₧e vlastnφ formßt DTD nenφ ·pln∞ Φist²m XML - zßpis se vymykß standardnφ struktu°e ostatnφch XML dokument∙, co₧ nenφ ₧ßdoucφ. Naopak takovΘ schΘma je samo o sob∞ dokument tφmto standardem popsan². Zdß se to trochu zvlßÜtnφ, dostßvßme se ke klasickΘ kruhovΘ definice "Abychom mohli definovat rekurzi, musφme definovat rekurzi. Abychom mohli definovat...". Ale na druhΘ stran∞ uva₧te jen p°φnos programßtor∙m p°i prßci se schΘmatem. Nenφ pot°eba psßt cokoliv novΘho, XML procesor u₧ mßme a jeliko₧ schΘma je XML, je o starost mΘn∞.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Dßle, DTD nedisponovalo takov²mi mo₧nostmi popisu typ∙ atribut∙ a element∙. Vzpome≥te si na ukßzkov² soubor z minulΘho dφlu, kde byly jednotlivΘ atributy popsßny velmi stroze, aΦkoliv Ülo evidentn∞ o hodnoty naprosto odliÜn²ch struktur. Standard, kter² popisuje XML schΘmata definuje taktΘ₧ dlouhou °adu vÜech mo₧n²ch typ∙ a podtyp∙, kterΘ m∙₧e programßtor pou₧φvat. Jenom popis t∞ch Φφseln²ch by vydal na samostatn² odstavec, nebo¥ celΘ v∞c je skuteΦn∞ dota₧enß do dokonalosti : Φφsla kladnß, zßpornß, celß, reßlnß, velk² poΦet mφst... Dßle je k pou₧itφ velkß Ükßla formßt∙ data a Φasu, °et∞zc∙ apod. Programßtor si m∙₧e navφc vytvß°et typy vlastnφ, pomocφ odvozovßnφ od typ∙ stßvajφcφch a/nebo pomocφ vzor∙.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Do t°etice vÜeho dobrΘho nesmφm opomenout podstatnou principielnφ zm∞nu v chßpßnφ zßvislosti element∙. Z DTD jsme zvyklφ, ₧e elementy stejnΘho jmΘna p°edstavujφ stejn² objekt a jako₧to d∞tskΘ elementy jsou jednoznaΦnΘ. Nynφ tomu tak nenφ - urΦit∞ se shodneme, ₧e nap°φklad titul knihy a titul p°ed jmΘnem jsou dv∞ s sebou nesouvisejφcφ v∞ci. Tuto skuteΦnost lze schΘmatem v∞rohodn∞ postihnout, ani₧ by bylo t°eba rozliÜovat elementy v nßzvu.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Zb²vß dodat, ₧e do ΦeÜtiny p°elo₧enß nebo Φesky psanß literatura v tomto ohledu mφrn∞ zaostßvß - v souΦasnΘ dob∞ se touto formou vydala vÜehovÜudy jedna publikace (Elizabeth Castro, XML pro WWW, SoftPress 2001, Brno). Na druhou stranu ve v²vojov²ch nßstrojφch se do budoucna prakticky s niΦφm jin²m nepoΦφtß a na internetu jsou k dispozici i jedno·ΦelovΘ nßstroje pro prßci s XML schΘmaty (typicky programy pro p°evod z DTD).
P°i pou₧φvßnφ vφce DTD a/nebo schΘmat se m∙₧e lehce stßt, ₧e nßzvy n∞kter²ch atribut∙ Φi element∙ budou kolidovat a tφm se jejich vzßjemnΘ pou₧itφ bude vyluΦovat - parser by m∞l v celΘ situaci zmatek. Proto p°iÜli v²vojß°i s metodou tzv. jmenn²ch prostor∙ (XML NameSpace).
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Ka₧d² element je implicitn∞ v kontextu n∞jakΘ XML aplikace - tj. t²kß se n∞jakΘho tΘmatu. Ne₧ tuto aplikaci (DTD, schΘma) zaΦn∞me v naÜem datovΘm souboru pou₧φvat, je vhodnΘ jφ p°i°adit n∞jak² jmenn² prostor, ve kterΘm budou nßzvy element∙ a atribut∙ unikßtnφ. JednoznaΦnosti v celΘm dokumentu pak dosßhneme jednoduÜe spojenφm prostru a nßzvu.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
P°edstavme si nap°φklad XML dokument, kter² pracuje stromy a s platidly. Abychom rozliÜili elementy koruna v kontextu stromu a v kontextu pen∞z, musφme pou₧φt jmennΘ prostory.
Tφm jsme prostor stromy definovali a nynφ je mo₧nΘ jeho obsah pou₧φvat. Zapisujeme v tomto p°φpad∞ obrßcenou dvojteΦkovou notacφ : zatφmco v definovßnφ atribut xmlns:a znamenß definovßnφ prostoru "a", v n∞m obsa₧en² element "b" se zapisuje jako a:b (tedy element "b" v jmennΘm prostoru "a"). Popis koruny stromu bude vypadat nßsledovn∞:
<A Name="Title3"><FONT Size=3><DIV Class=Headline>Kudy k dat∙m?</DIV></font>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Samotnß data ovÜem nemajφ velk² smysl, pokud nemßme v ruce nßstroj, kter² nßm umo₧nφ jejich adresovßnφ. K Φemu by nßm nap°φklad bylo tisφce soubor∙ na r∙zn²ch internetov²ch serverech po celΘm sv∞t∞, kdyby neexistoval nßstroj jednoznaΦn∞ popisujφcφ jejich ulo₧enφ. Tedy kdyby nebylo schΘma URI (Uniform Resource Identifier), resp. URL (Locator) adresy. Ten teprve dßvß mo₧nost odvolat se na n∞jak² obsah (tj. bez nutnosti jej kopφrovat) krßtk²m, ale v²sti₧n²m identifikßtorem.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Zßkladnφ syntaxe standardnφ URL adresy je dob°e znßmß. Sklßdß se z pou₧itΘho protokolu, poΦφtaΦe (+ portu), cesty a zdroje, tj. souboru. Äe se dßle v HTTP GET hlaviΦce dajφ posφlat jednotlivΘ prom∞nnΘ a jejich hodnoty je v∞c jinß (slou₧φ k p°edßnφ informacφ zpracujφcφm skript∙m), datov² zdroj je jednoznaΦn∞ identifikovßn i bez nich.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Stejn∞ jako v tomto schΘmatu, kter² adresuje data na ·rovni soubor∙ (Φi alespo≥ navenek na ·rovni souborovΘho systΘmu), pou₧φvß v∞tÜina podobn²ch "jazyk∙" absolutnφ a relativnφ adresovßnφ. V prvΘm p°φpad∞ jde o p°esnou specifikaci "mφsta", kde se data nachßzφ, v druhΘm se jednß pouze o zapsßnφ vztahu mezi aktußlnφm a cφlov²m dokumentem. Zcela v²sti₧n∞ vysv∞tφ celou situaci p°φpad urΦenφ domu poÜtovnφ adresou (absolutnφ adresovßnφ) a slovnφm popisem "d∙m o dva bloky vedle naproti" (relativnφ adresovßnφ - vztahuje se k aktußlnφ budov∞).
Jeliko₧ ale pou₧φvßme pro prßci s daty jazyk definovan² pomocφ XML, pot°ebujeme n∞co jemn∞jÜφho. Bylo by vhodnΘ najφt nßstroj, kter² dokß₧e jednoznaΦn∞ ukßzat na jednotlivΘ v²znamovΘ Φßsti dokumentu - na elementy.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Adresovßnφ jednotliv²ch datov²ch slo₧ek je mimochodem znßmΘ i z HTML, urΦit∞ si vzpomenete na dvojk°φ₧ek (#), kter² se Φasto objevuje v internetovΘ adrese. V HTML lze toti₧ definovat nßzev n∞kterΘ "kotvy" (anchor, <SPAN Class=CODE><A name="jmΘno"></SPAN>) a p°i naΦtenφ souboru s tzv. identifikßtorem fragmentu "jmΘno" (soubor.html#jmΘno) prohlφ₧eΦ automaticky odroluje na Φßst v k≤du takto oznaΦenou.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Standard XPath tuto pot°ebu °eÜφ komplexn∞ a nabφzφ mechanizmus, pomocφ n∞ho₧ m∙₧ete nahlφ₧et do dokumentu skuteΦn∞ ze vÜech stran. M∙₧ete p°esn∞ vybrat jeden element a to jak absolutn∞ (tj. v kontextu celΘho souboru), tak relativn∞ (tj. "od" souΦasnΘho elementu). M∙₧ete vybrat jakΘkoliv mno₧stvφ element∙, jak t°eba vÜechny (r∙znΘ) d∞tskΘ elementy elementu jinΘho, tak vÜechny (stejnΘ) bez ohledu na "hloubku" jejich polo₧enφ. Do XPath dotaz∙ m∙₧ete navφc vklßdat spousty dalÜφch aktivnφch informacφ. Za zmφnku stojφ urΦit∞ klasickΘ wildcardy neboli ₧olφky (*), tj. zßstupnΘ symboly pro blφ₧e nespecifikovanΘ °et∞zce, podmφnky po₧adujφcφ urΦitΘ hodnoty atribut∙ nebo element∙, prßce s klasick²mi booleovsk²mi v²razy a dalÜφ. K dispozici jsou takΘ klasickΘ funkce pro prßci s °et∞zci jak nap°φklad vyhledßvßnφ pod°et∞zc∙, konverze up/downcase, zßm∞na, znak na n-tΘm mφst∞, dΘlka °et∞zce apod.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Pokud se vßm zdß, ₧e XPath mß blφzko k SQL, mßte pravdu, v principu jde o nßstroj, kter² byl vyvinut² pro stejn² ·Φel - odkazovßnφ a vyhledßvßnφ dat. Tam, kde musφte pou₧φt velkΘ mno₧stvφ JOIN∙ zleva zprava, stojφ mo₧nß za to podφvat se na celou situaci z pohledu XML a pop°em²Ület nad mo₧nostφ jednoduchΘho filtru na bßzi XPath.
</DIV></FONT></b></i>
<A Name="Title5"><FONT Size=3><DIV Class=Headline>S XML na web</DIV></font>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
O u₧iteΦnosti odd∞lenφ informacφ od vzhledu asi nikdo nepochybuje a prßv∞ proto obliba datov²ch formßt∙ popsan²ch pomocφ XML roste. Jednou z hlavnφch aktivit konsorcia W3C v tΘto oblasti je prßce na standardu XHTML - aktußln∞ ve verzi 2.0 (vydßno v polovin∞ °φjna).
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Ka₧d² webov² programßtor, kter² mß alespo≥ minimßlnφ zkuÜenosti s tvorbou WWW strßnek jist∞ zaznamenal "chaos", kter² obklopuje klasickΘ HTML. Abych to up°esnil. FunkΦnφch HTML tag∙ je podstatn∞ vφce ne₧ je pot°eba, kv∙li kompatibilit∞ je zachovßvßna podpora skuteΦn∞ archaick²ch konstrukcφ, jednotlivΘ browsery si do pou₧φvan²ch programovacφch jazyk∙ p°idßvajφ svoje "vylepÜenφ" a ty syntaxe, ve kter²ch panuje relativnφ shoda, si zase Φasto r∙zn∞ vyklßdajφ.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Sjednocenφ hypertextovΘho znaΦkovacφho jazyka do standardizovanΘ formy si klade za cφl prßv∞ XHTML. A proΦ to X na zaΦßtku? Jak asi tuÜφte, vÜe je popsßno pomocφ XML.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
On to sßm o sob∞ nenφ v∙bec Üpatn² nßpad - nehled∞ na fakt, ₧e p∙vodnφ verze HTML vychßzely jeÜt∞ z definic postaven²ch na SGML (tento "rodiΦ" XML bude asi pro b∞₧nΘ pou₧itφ sv²m potomkem p°evßlcovßn, nebo¥ prßce s nφm je pro programßtory podstatn∞ t∞₧Üφ a mßlokde je skuteΦn∞ do detail∙ implementovßn). Jen₧e postupem Φasu se od striktnφho v²kladu upouÜt∞lo a prohlφ₧eΦe zaΦaly tolerovat i ty nejhrubÜφ proh°eÜky. Vlßdl, jak jsem ji₧ °ekl, chaos. Tagy se neuzavφraly, k°φ₧ily se, atributy nem∞ly hodnoty atd. XHTML °adφ zpßteΦku a pokouÜφ se o prav² opak : uzavφrejte vÜechny tagy, nek°i₧te elementy, atribut∙m dßvejte v₧dy hodnoty do uvozovek apod.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
VÜe je ale podstatn∞ slo₧it∞jÜφ ne₧ by se mohlo zdßt.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
M∙j osobnφ nßzor je, ₧e XHTML tlaΦφ HTML n∞kam, kde nemß co pohledßvat a d∞lß z n∞j n∞co co nenφ. A¥ standard °φkß to Φi ono, a¥ se v moudr²ch knihßch pφÜφ o XHTML r∙znΘ op∞vnΘ glosy, faktem z∙stßvß, ₧e HTML v pov∞domφ ÜirokΘ ve°ejnosti mß podstatn∞ blφ₧e k formßtovacφmu jazyku ne₧ k datovΘmu metajazyku. Podφvßme-li se na v²voj nßzv∙ tag∙, bude tato skuteΦnost daleko jasn∞jÜφ. Zabydlely se prost∞ ve svΘ vizußlnφ podob∞ : odd∞lovaΦ (horizontßlnφ Φßra), tabulka, obrßzek atd. a nad∞je, ₧e novß norma p°ed∞lß toto pojetφ tvorby strßnek do novΘho - v²znamovΘho, mß podle m∞ jen omezenΘ Üance na ·sp∞ch.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Ztrßcφme toti₧ rozmanitost a detailnost HTML a zφskßvßme jen velmi mßlo ze sφly strukturovanΘho pojetφ XML. Jakkoliv odd∞lφme myÜlenku a vzhled, po°ßd budeme u starΘho znßmΘho formßtovacφho jazyka na www prezentace. M∙₧eme zakßzat programßtor∙m pou₧φvat sto a jeden tag, m∙₧eme je donutit pou₧φvat <SPAN Class=CODE><OBJECT/></SPAN>mφsto <SPAN Class=CODE><IMG/></SPAN> na ka₧d² obrßzek (XHTML 2.0), ale pojetφ prostΘho formßtovßnφ textu bude v k≤du zako°en∞nΘ nadßle.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Jinß v∞c je ovÜem psanφ webov²ch aplikacφ pomocφ ΦistΘho XML k≤du za pou₧itφ n∞kter²ch technik pokroΦil²ch styl∙ a transformacφ - tento sm∞r bych zvolil jß (samoz°ejm∞, jen pokud to situace dovoluje). Jedin∞ tak m∙₧eme provΘst skuteΦnou anal²zu aplikace ve sv∞tle XML. Pokud to jde, komunikujme p°es elementy a vzhled nechme obrßzk∙m.
Jak²m zp∙sobem se adresujφ data uvnit° XML dokumentu jsme si ji₧ °ekli. Bylo by to ale dost zbyteΦnΘ, kdybychom nedokßzali ukßzat na n∞jak² objekt mino - tj. v souboru jinΘm.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Odkazovßnφ dokument∙ v prost°edφ HTML slou₧ilo p°edevÜφm dv∞ma ·Φel∙m. Prvnφ z nich znamenal jednoduÜe °eΦeno "p°ilo₧enφ" cφlovΘho objektu k dokumentu prßv∞ zpracovßvanΘmu, typicky Ülo o obrßzek. V druhΘm p°φpad∞ jde o "odkaz" v klasickΘm slova smyslu, tedy "kliknu sem a dostanu se tam". AΦkoliv je ·Φel psanφ URL v t∞chto p°φpadech r∙zn², v principu se jednß o stejnou akci.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
To je jeden z aspekt∙ standardu XLink. NejjednoduÜeji si zm∞nu vysv∞tlφme na srovnßnφ klasickΘho a novΘho pojetφ. Uve∩me p°φklad.
Atribut type znaΦφ jednoduch² typ XLink odkazu a href mß zde stejnou funkci jako v HTML - URL cφlovΘho objektu. Description je jednoduch² popis, kter² m∙₧e slou₧it nap°φklad jako alternativnφ text k nezobrazenΘmu obrßzku (<SPAN Class=CODE><IMG Alt="..."></SPAN>). Mφsto zobrazenφ zadßme parametrem show, replace, jak asi tuÜφte, nahradφ aktußlnφ dokument v prohlφ₧eΦi nov²m. Vedle toho hodnota "embedded" zobrazφ objekt p°φmo v dokumentu a "new" by znamenalo otev°enφ novΘho okna. KoneΦn∞ actuate znaΦφ KDY bude externφ soubor zavolßn (onRequest = p°i vy₧ßdßnφ (typicky klik), onLoad = p°i nahrßnφ (automatickΘ vlo₧enφ nap°. obrßzku) ). Nesmφme zapomenout uzav°φt tag lomφtkem.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
Jak je vid∞t, mß to °ßd.
</DIV></FONT></b></i>
<FONT Size=2><DIV Align=Justify Class=Paragraph>
DalÜφ novou v∞cφ je mo₧nost odkazovßnφ na vφce zdroj∙ najednou. Typ elementu dejme "extended" a jeho do jeho obsahu vpiÜme (XLink) elementy dalÜφ, tentokrßt s typem "locator". Pareser pochopφ, ₧e se odkazujeme na vÜechny "locator"s v "extended" obsa₧enΘ.
Jak je vid∞t, "podp∙rnΘ" standardy dßvajφ XML tu pravou sφlu, jakß programßtor∙m chyb∞la. Nehled∞ na to, ₧e jsem na poskytnutΘm prostoru pokryl slabou polovinu z nich a to jeÜt∞ velmi struΦn∞. Pro dneÜek bych povφdßnφ o XML ukonΦil. Po prvnφ ukßzkovΘ Φßsti jste dnes absolvovali krßtk² rychlokurz po p°φbuzn²ch technologiφch a standardech. O dalÜφch mo₧nostech si povφme v n∞kterΘm z dalÜφch, voln∞ navazujφcφch Φlßnk∙.