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.
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>
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 Vidφme, ₧e zßpis je logick² a dob°e strukturovan². Definice p°φsluÜnΘho DTD vypadß nßsledovn∞:
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:
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 |