SGML: Standard Generalized Markup Language

SGML (Standard Generalized Markup Language) je standardnφ jazyk urΦen² k formßlnφmu popisu struktury dokument∙. Je definovßn v norm∞ ISO 8879 z roku 1986.

Vznik standardu

Standard SGML vznikl v rßmci projektu ODA (Open Document Architecture). Cφlem ODA je poskytnout standardnφ architekturu pro vytvß°enφ, p°edßvßnφ, uchovßvßnφ a zpracovßnφ r∙znorod²ch dokument∙ v elektronickΘ podob∞. Zahrnuje proto r∙znΘ standardy pro formßty dat, architekturu p°edßvßnφ zprßv, zabezpeΦenφ informacφ atd.

Pro pot°eby ODA bylo nutno vytvo°it formßt, kter² by umo₧≥oval ulo₧enφ text∙ v elektronickΘ podob∞ a p°itom byl nezßvisl² jak na softwarovΘ, tak na hardwarovΘ platform∞ a poskytoval dostateΦnou flexibilitu. Dφky t∞mto po₧adavk∙m ze hry zcela vypadly formßty r∙zn²ch textov²ch editor∙, kterΘ se Φasto m∞nφ a nespl≥ujφ stanovenΘ nßroΦnΘ po₧adavky.

Jako jedinΘ sch∙dnΘ °eÜenφ se ukßzalo pou₧itφ znaΦkovacφho jazyka (markup language). Termφn ,markup` se vztahuje p∙vodn∞ ke znaΦkßm ruΦn∞ vepisovan²m do rukopisu redaktorem nebo grafikem a oznaΦujφcφm, jak mß b²t dokument formßtovßn. S p°φchodem poΦφtaΦ∙ a jejich vyu₧φvßnφm k sazb∞ jsou tyto instrukce zaΦle≥ovßny p°φmo do textu dokumentu. B²vajφ obvykle obklopeny °φdφcφmi znaky, kterΘ je odd∞lujφ od obsahu dokumentu. Jejich ruΦnφ vklßdßnφ je slo₧itß a Φasov∞ nßroΦnß zßle₧itost. Navφc ka₧d² nov² fotosßzecφ systΘm u₧φvß svΘ specifickΘ °φdicφ znaky (formßtovacφ jazyk) a vß₧e tak schopnosti u₧ivatele na konkrΘtnφ za°φzenφ (v²robce).

Na zaΦßtku osmdesßt²ch let se pokusila Graphics Communications Association (GCA) vytvo°it standardnφ formßtovacφ jazyk znßm² pod nßzvem GenCode. Brzy se vÜak ukßzalo, ₧e je velmi obtφ₧nΘ vytvo°it jednotn² soubor formßtovacφch p°φkaz∙, kter² by vyhovoval pot°ebßm vÜech v²robc∙ fotosßzecφch systΘm∙ a nebyl p°itom t∞₧kopßdn² a nepraktick² sv²m rozsahem.

Ve stejnΘ dob∞, kdy GCA °eÜila tyto problΘmy, komise ANSI definovala standard zalo₧en² na jinΘm formßtovacφm jazyku -- Generalized Markup Language (GML). Tento standard popisoval dokument jako hierarchickou strukturu element∙ v r∙zn²ch vzßjemn²ch vztazφch, p°iΦem₧ ka₧dΘmu typu elementu p°φsluÜφ urΦitΘ oznaΦenφ. Ob∞ organizace spojily svΘ ·silφ na vytvo°enφ spoleΦnΘho standardu, kter² byl v prosinci roku 1986 akceptovßn ISO (International Standards Organization) pod oznaΦenφm ISO 8879 -- SGML a stal se souΦßstφ architektury ODA.

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 do tΘ doby nestrukturovanΘ informaci 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, 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φ. M∙₧e b²t vytiÜt∞n nebo stejn∞ snadno prezentovßn 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

Jak by se z p°edchozφho mohlo zdßt, SGML nenφ n∞jakou definicφ znaΦek, kterΘ lze v textu pou₧φt. SGML je metajazyk, kter² umo₧≥uje definovat jakΘ znaΦky (tzv. elementy) lze v textu pou₧φt a jak spolu 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; jak m∙₧e vypadat si ukß₧eme o n∞co pozd∞ji.

Samotn² dokument se pak 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, pokud chceme dokument prohlφ₧et interaktivn∞.

Jedinou skupinou program∙, kterΘ jsou nezßvislΘ na jednom konkrΘtnφm DTD jsou tzv. parsery, kterΘ provßdφ kontrolu SGML dokument∙ -- tj. kontrolujφ, 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 se sbφrka bßsnφ sklßdß z n∞kolika bßsnφ, bßse≥ m∙₧e mφt nßzev a 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, b²vß ohraniΦen 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, kterΘ uvozujφ zaΦßtek a konec oznaΦenΘ oblasti, b²vß 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 <poem> a </poem>. Nßzev bßsn∞ je vyznaΦen tagy <title> a </title>, jednotlivΘ verÜe pomocφ <verse> a </verse> 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 nßsledujφ 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 znak `-' musφ b²t p°φsluÜn² tag uveden, pokud `O', je tag pouze voliteln² a nemusφ b²t uveden 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 bychom mohli ov∞°it parserem, kterΘmu bychom na vstup zadali naÜi sbφrku bßsnφ a nßÜ DTD. Pokud bychom pou₧ili specißlnφ filtr, mohli bychom dokument p°evΘst do podoby vhodnΘ pro tisk -- tag <poem> by se p°evedl na vynucenΘ zahßjenφ novΘ strany, text obsa₧en² v tagu <title> by se vytiskl v∞tÜφm pφsmem a navφc ulo₧il i s Φφslem strany do obsahu, tag <verse> by byl nahrazen vertikßlnφ mezerou a jednotlivΘ °ßdky bßsn∞ (vyznaΦenΘ tagem <line>) by se vytiskly. Jin² filtr by celou sbφrku mohl 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∙ <poem> a <title>).

NßÜ ukßzkov² dokument samoz°ejm∞ nepostihl zdaleka vÜechny mo₧nosti, kterΘ SGML nabφzφ. Nap°. ka₧d² element m∙₧e obsahovat n∞kolik atribut∙, kterΘ lze pou₧φt k mnoha ·Φel∙m -- nap°φklad lze u ka₧dΘ bßsn∞ do atributu ulo₧it jmΘno autora Φi datum napsßnφ bßsn∞ apod.

Hlavnφ v²hody pou₧itφ SGML oproti klasick²m prost°edk∙m

Asi nejv∞tÜφ v²hodou systΘm∙ zalo₧en²ch na SGML je jejich otev°enost. VÜe pracuje v rßmci standardu, kter² je ji₧ definitivnφ a nehrozφ tedy znehodnocenφ investic v d∙sledku nutnosti p°echodu na novΘ verze, jako je tomu u komerΦnφch textov²ch procesor∙.

DalÜφ velkou v²hodou je to, ₧e p°i tvorb∞ SGML dokument∙ nßs zajφmß obsah a nikoliv forma dokument∙. KonkrΘtnφ formu lze urΦit a₧ v zßvislosti na po₧adovanΘm v²stupu. M∙₧eme pou₧φt filtr, kter² z SGML dokumentu vytvo°φ PostScriptov² soubor nebo zdrojov² text pro typografick² systΘm TeX, nebo filtr, kter² z dokumentu vytvo°φ nap°. hypertextovou p°φruΦku Φi jej p°evede do jinΘ smysluplnΘ formy.

Pokud je DTD dob°e navr₧eno, je velmi usnadn∞na i automatickß syntΘza °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.

To, ₧e je cel² text rozΦlen∞n a oznaΦen r∙zn²mi tagy p°inßÜφ i v²hody pro prohledßvßnφ dokument∙. Jednak lze podobn∞ jako u strukturovan²ch databßzφ prohledßvat jen urΦitΘ polo₧ky (nap°. nßzev a autora dokumentu) a jednak lze informaci o struktu°e vyu₧φt p°i fulltextovΘm prohledßvßnφ -- slova obsa₧enß v nadpisech a zv²razn∞nß odliÜn²m typem pφsma mφvajφ obvykle v∞tÜφ v²znam ne₧ ostatnφ text.

Dφky flexibilit∞ SGML nenφ problΘmem do textu vklßdat i dalÜφ mΘn∞ obvyklΘ prvky jako jsou 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 InternetovskΘ slu₧by World-Wide Web.

V∞tÜina velk²ch softwarov²ch firem (nap°. IBM, Novell) mß svΘ systΘmy na sprßvu dokumentace rovn∞₧ zalo₧eny na SGML. Dokonce i firma Microsoft oznßmila, ₧e hodlß opustit sv∙j formßt RTF a pou₧φvat ve WindowsovskΘ nßpov∞d∞ HTML.

Literatura

  1. Sperberg-McQueen C.M. -- Burnard L. A Gentle Introduction to SGML
  2. Berners-Lee, T. -- Connolly, D. Hypertext Markup Language -- 2.0
  3. Ragget, D. Hypertext Markup Language -- 3.0
© Ji°φ Kosek 1999