COMPUTERWORLD
Specializovan² t²denφk o v²poΦetnφ technice
o Internetu
(CW 45/96)

Co je to SGML?

(pokraΦovßnφ z minulΘho Φφsla)

Ji°φ Kosek ml.

Vyu₧itφ SGML

SGML je p°edn∞ zcela otev°en²m standardem nezßvisl²m na platformßch, v²robcφch nebo aplikacφch. Soubory SGML jsou uklßdßny jako text ASCII, co₧ zajiÜ¥uje jejich pou₧itelnost prakticky na libovolnΘ poΦφtaΦovΘ platform∞.

V²znam a p°φnos SGML se objevuje ve chvφli, kdy je dokument oznaΦen p°φsluÜn²mi znaΦkovacφmi p°φkazy. Definovßnφ struktury a vnit°nφch vztah∙ v informaci do tΘ doby nestrukturovanΘ otevφrß zcela novΘ mo₧nosti zpracovßnφ, publikovßnφ a opakovanΘho pou₧φvßnφ tΘto informace. Nap°. SGML databßze m∙₧e obsahovat tisφce oznaΦkovan²ch dokument∙ a vyu₧itφm vyznaΦenΘ struktury z nφ lze na p°ßnφ publikovat obsahov∞ stejnΘ dokumenty mnoha r∙zn²ch forem.

Pro p°edstavu, jak takov² systΘm m∙₧e fungovat, uvedu velmi jednoduch² p°φklad: P°edpoklßdejme, ₧e mßme manußl k letadlu o n∞kolika tisφcφch stran. Kdy₧ byl sestavovßn originßl tohoto dokumentu, ka₧d² odstavec byl mimo jinΘ oznaΦen z hlediska p°φstupov²ch prßv -- je-li voln∞ p°φstupn², tajn² nebo p°φsn∞ tajn². Kapitoly dokumentu byly oznaΦeny vzhledem k jejich v²znamu pro techniky, °φzenφ provozu, piloty a personßl. VÜechny tyto informace mohou b²t potom v publikaΦnφm systΘmu SGML identifikovßny a pou₧ity k vytvß°enφ selektivnφch publikacφ na p°ßnφ.

S vyu₧itφm znaΦek vyznaΦujφcφch strukturu dokumentu lze z originßlu vytvß°et upravenΘ verze. Je mo₧nΘ nap°. vytvo°it manußl pro piloty s p°φstupem k n∞kter²m nezve°ej≥ovan²m informacφm nebo manußl pro personßl °φdφcφ letov² provoz. Proto₧e SGML uchovßvß informace o struktu°e dokumentu, nikoliv jeho formßtovßnφ, m∙₧e mφt manußl r∙znou podobu podle zp∙sobu jeho pou₧itφ. Lze jej vytisknout nebo stejn∞ snadno prezentovat z CD-ROM na obrazovce poΦφtaΦe. Odkazy z tiÜt∞nΘ podoby (nap°. "viz obrßzek na stran∞ xy") se pouze zm∞nφ na hypertextovΘ vazby.

SGML jako metajazyk

Z p°edchzφho textu by se mohlo zdßt, ₧e SGML je n∞jakou definicφ znaΦek, je₧ lze v textu pou₧φt. To ale nenφ pravda -- SGML je metajazyk, kter² umo₧≥uje definovat, jakΘ znaΦky (tzv. elementy) lze v textu pou₧φt a jak spolu tyto souvisφ (nap°. uvnit° elementu vyznaΦujφcφho kapitolu se mohou vyskytovat elementy vyznaΦujφcφ odstavce).

Definice p°φpustn²ch element∙ a vztah∙ mezi nimi se oznaΦuje jako Document Type Definition (DTD). DTD b²vß nejΦast∞ji ulo₧ena v separßtnφm textovΘm souboru; pozd∞ji se dostaneme k p°esn∞jÜφ specifikaci.

Samotn² dokument se sklßdß z identifikace DTD, pomocφ n∞ho₧ je zapsßn (tzv. prolog), a vlastnφho textu dopln∞nΘho o elementy definovanΘ v DTD.

DTD nedefinuje konkrΘtnφ v²znam jednotliv²ch element∙. To obstarßvajφ dalÜφ programy, kterΘ mohou dokument vytvo°en² na zßklad∞ konkrΘtnφho DTD p°evΘst nap°. do PostScriptu, pokud chceme dokument tisknout, Φi do n∞jakΘho hypertextovΘho systΘmu, jestli₧e chceme dokument prohlφ₧et interaktivn∞.

Jedinou skupinou program∙ nezßvislou na urΦitΘm konkrΘtnφm DTD jsou tzv. parsery. Jejich funkcφ je provßd∞t kontrolu SGML dokument∙ -- tj. zjiÜ¥ovat, zda pou₧itφ element∙ v dokumentu odpovφdß jejich definici v DTD.

Ukßzkov² SGML dokument

Abychom si vÜe p°iblφ₧ili, ukß₧eme si pou₧itφ SGML na p°φpad∞, kdy budeme chtφt v elektronickΘ podob∞ uchovßvat sbφrku bßsnφ. Celou problematiku znaΦn∞ zjednoduÜφme -- budeme p°edpoklßdat, ₧e sbφrka se sklßdß z n∞kolika bßsnφ, bßse≥ m∙₧e mφt nßzev, v₧dy mß n∞kolik verÜ∙ a ka₧d² verÜ se sklßdß z n∞kolika °ßdek.

P°φsluÜn² dokument, ve kterΘm bychom m∞li ulo₧enou sbφrku, by mohl vypadat nap°. takto (ukßzka pochßzφ z bßsnickΘ sbφrky Rybφ oko od Petra Cincibucha):

<book>

<poem><title>Cikßda</title>
<verse>
<line>Vzala ho za ruku</line>
<line>a vedla mezi zelenΘ ke°e</line>
<line>Kdy₧ stßl proti nφ</line>
<line>bledniΦkov∞ nah²</line>
<line>dotkla se ho vlhk²m prstem</line>
</verse>
<verse>
<line>Ani dalÜφ noc</line>
<line>to nebylo dßl</line>
</verse>
</poem>

<poem>
... nßsledujφ dalÜφ bßsn∞ ...

</book>

Vidφme, ₧e celß sbφrka je oznaΦena elementem book. Aby byl element rozeznßn od ostatnφho textu, je t°eba ho ohraniΦit n∞jak²mi specißlnφmi znaky -- v naÜem p°φpad∞ " < " a " > ". KonkrΘtnφm v²skyt∙m element∙ v textu se °φkß tagy. Aby byly rozeznßny tagy uvozujφcφ zaΦßtek a konec oznaΦenΘ oblasti, je p°ed nßzev ukonΦovacφho tagu zapisovßno lomφtko "/".

Sbφrka se pak d∞lφ na jednotlivΘ bßsn∞, kterΘ jsou oznaΦeny tagy a . Nßzev bßsn∞ je vyznaΦen tagy </b>a <b>, verÜe pomocφ a a °ßdky uvnit° jednotliv²ch verÜ∙ pak pomocφ elementu line.

Vidφme, ₧e zßpis je logick² a dob°e strukturovan². Definice p°φsluÜnΘho DTD vypadß nßsledovn∞:

<!ELEMENT book - - (poem+)>
<!ELEMENT poem - - (title?, verse+)>
<!ELEMENT title - O (#PCDATA)>
<!ELEMENT verse - O (line+)>
<!ELEMENT line O O (#PCDATA)>

Za klφΦov²m slovem !ELEMENT v₧dy nßsleduje definice novΘho elementu. Za jmΘnem elementu najdeme dva znaky, kterΘ mohou b²t bu∩ "-", nebo "O". Prvnφ znak odpovφdß zaΦßteΦnφmu tagu a druh² ukonΦovacφmu tagu. Pokud je znakem "-", musφ b²t p°φsluÜn² tag uveden; pokud "O", je tag pouze voliteln² a nenφ nutnΘ uvßd∞t ho v p°φpadech, kdy jej lze odvodit z kontextu ostatnφch tag∙. PotΘ ji₧ nßsleduje definice element∙, kterΘ mohou b²t v definovanΘm elementu obsa₧eny (vΦetn∞ poΦtu v²skyt∙: "?" -- ₧ßdn² nebo jeden v²skyt, "+" -- jeden a vφce v²skyt∙ a "*" -- ₧ßdn², jeden nebo vφce v²skyt∙).

Jeliko₧ nßÜ DTD umo₧≥uje n∞kterΘ tagy vynechat, lze celou naÜi sbφrku zkrßcen∞ zapsat takto:

<book>
<poem><title>Cikßda
<verse>
<line>Vzala ho za ruku
<line>a vedla mezi zelenΘ ke°e
<line>Kdy₧ stßl proti nφ
<line>bledniΦkov∞ nah²
<line>dotkla se ho vlhk²m prstem
<verse>
<line>Ani dalÜφ noc
<line>to nebylo dßl

<poem>

... nßsledujφ dalÜφ bßsn∞ ...

</book>

Korektnost zßpisu lze ov∞°it parserem, kterΘmu bychom na vstup zadali naÜi sbφrku bßsnφ a nßÜ DTD. V p°φpad∞ volby specißlnφho filtru bychom dokßzali dostat dokument do podoby vhodnΘ pro tisk -- tag by se p°evedl na vynucenΘ zahßjenφ novΘ strany, text obsa₧en² v tagu </b>by se vytiskl v∞tÜφm pφsmem a navφc ulo₧il i s Φφslem strany do obsahu, tag <b><verse> </b>by byl nahrazen vertikßlnφ mezerou a jednotlivΘ °ßdky bßsn∞ (vyznaΦenΘ tagem <b><line></b>) by se vytiskly. Jin² filtr by zase celou sbφrku dokßzal p°evΘst do hypertextovΘho dokumentu, kter² by na zaΦßtku obsahoval odkazy na jednotlivΘ bßsn∞ (ty by byly zφskßny z tag∙ <b><poem> </b>a <b><title></b>).<p> NßÜ ukßzkov² dokument samoz°ejm∞ nepostihl zdaleka vÜechny mo₧nosti, SGML nabφzφ mnohem vφc. Ka₧d² element m∙₧e obsahovat n∞kolik atribut∙, je₧ lze pou₧φt ke specißlnφm ·Φel∙m -- nap°φklad u ka₧dΘ bßsn∞ je mo₧nΘ do atributu ulo₧it jmΘno autora Φi datum napsßnφ bßsn∞ apod.<p> <p> <b>Hlavnφ p°ednostφ pou₧itφ SGML oproti klasick²m prost°edk∙m na zpracovßnφ textu<p> </b>Asi nejv∞tÜφ v²hodou systΘm∙ zalo₧en²ch na SGML je jejich otev°enost. VÜe pracuje v rßmci standardu; ten je ji₧ definitivnφ, a tak nehrozφ znehodnocenφ investic v d∙sledku nutnosti p°echodu na novΘ verze, jak se Φasto stßvß u komerΦnφch textov²ch procesor∙.<p> DalÜφ velkou p°ednostφ SGML je to, ₧e p°i tvorb∞ dokument∙ nßs zajφmß jejich obsah a nikoliv konkrΘtnφ forma. Tu lze urΦit a₧ v zßvislosti na po₧adovanΘm v²stupu. M∙₧eme pou₧φt filtr, jen₧ ze SGML vytvo°φ postScriptov² soubor nebo zdrojov² text pro typografick² systΘm TeX; jin² filtr dokument p°em∞nφ nap°. na hypertextovou p°φruΦku. Takov²m zp∙sobem lze v zßsad∞ realizovat p°evod do jakΘkoliv smysluplnΘ formy.<p> Pokud je DTD dob°e navr₧eno, dojde rovn∞₧ k podstatnΘmu usnadn∞nφ automatickΘ syntΘzy °eΦi (tagy vyznaΦujφ mφsta, kde se obvykle i v °eΦi d∞lajφ pauzy), co₧ je velk²m pozitivem p°i zp°φstup≥ovßnφ informacφ nevidom²m obΦan∙m.<p> SkuteΦnost, ₧e cel² text je rozΦlen∞n a oznaΦen r∙zn²mi tagy, p°inßÜφ i v²hody p°i prohlφ₧enφ dokument∙. Jednak lze, podobn∞ jako u strukturovan²ch databßzφ, prohledßvat pouze urΦitΘ polo₧ky (nap°. nßzev a autora dokumentu) a navφc je mo₧nΘ informaci o struktu°e vyu₧φt p°i prßci s cel²m textem -- slova obsa₧enß v nadpisech a zv²razn∞nß odliÜn²m typem pφsma mφvajφ obvykle v∞tÜφ v²znam ne₧ zbytek dokumentu.<p> Dφky flexibilit∞ SGML nenφ problΘmem vklßdat do textu i dalÜφ mΘn∞ obvyklΘ prvky, jimi₧ mohou b²t tabulky, matematickΘ vzorce, notovΘ zßznamy atd. V souΦasnΘ dob∞ je asi nejznßm∞jÜφ aplikacφ SGML jazyk HTML (Hypertext Markup Language), kter² je pou₧φvßn pro tvorbu hypertextov²ch dokument∙ v rßmci internetovΘ slu₧by World Wide Web.<p> V∞tÜina velk²ch softwarov²ch firem (nap°. IBM, Novell) mß svΘ systΘmy na sprßvu dokumentace zalo₧eny rovn∞₧ na SGML. Dokonce i firma Microsoft oznßmila, ₧e hodlß opustit formßt RTF a pou₧φvat ve windowsovΘ nßpov∞d∞ HTML.<p> <hr size=4> <CENTER> <h5> | <A HREF="clanky2.htm"><<<</A> | <A HREF="../../windows/c_inter.htm">CW o Internetu</A> | <A HREF="../../windows/cw.htm">COMPUTERWORLD</A> | <A HREF="../../hp.htm">IDG CZ homepage</A> | </h5> </CENTER> </TABLE> </CENTER> </BODY> </HTML>