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