\"/
\"/ \"/    

SGML

Arnošt Svoboda, ESF MU
Ročník VIII - číslo 1, říjen 1997
Citace: A. Svoboda. SGML. Zpravodaj ÚVT MU. ISSN 1212-0901, 1997, roč. VIII, č. 1, s. 6-9.
Tematické zařazení: Standardy
 předchozí článek | následující článek 

Úvod

V posledních letech se stále více skloňuje Internet ve všech pádech a tento pojem je slyšet dokonce i z úst politiků. Myslí se tím hlavně služba WWW (World Wide Web), která používá pro přípravu dokumentů hypertextový jazyk HTML (HyperText Markup Language). V knihách nebo v článcích o tomto jazyku se můžete dočíst, že je odvozen či že je podmnožinou mezinárodně uznávaného standardu nazývaného SGML (Standard Generalized Markup Language), ale už se nedočtete, co to SGML je, kdy a proč vznikl apod. Chtěl bych tímto příspěvkem aspoň zhruba představit SGML a popsat jeho možnosti na krátké ukázce.

Historie vzniku SGML

SGML vznikl jako část projektu ODA (Open Document Architecture), pro který bylo třeba vyvinout takový formát pro uložení textu v elektronické podobě, který by byl nezávislý na hardwarové a softwarové platformě. Jako použitelné a asi jedině schůdné řešení se našlo v použití značkovacího jazyka (markup language). Vpisování různých značek do rukopisů buď redaktorem či grafikem je technika známá již dlouho. Těmto značkám se říkalo markup a sloužily k formátování textu. Když se pro vytvoření textu začaly používat počítače, nabízela se možnost tyto značky vpisovat přímo do řádků textu. Aby se odlišily od původního textu, jsou obklopeny znaky, které je od textu oddělují. Ale rozvoj techniky v tomto případě znamenal také větší chaos v popisovacích značkách, protože byly vázané na nějaké konkrétní fotosázecí zařízení a různí výrobci používali různé způsoby označování. Proto se koncem 60. let Stanley Rice, knižní grafik z New Yorku, zabýval myšlenkou na univerzální katalog těchto značek. Norman Scharpf z Graphics Communications Association se této myšlenky chopil a založil na její dopracování projekt v rámci Composition Committee v GCA. Výsledkem byl standardní formátovací jazyk GenCode a poznání, že je velmi obtížné vytvořit takový soubor formátovacích příkazů, které by obsáhly potřeby všech typů fotosázecích systémů.

V roce 1969 Charles Goldfarb, vedoucí výzkumného projektu IBM na integrovaný právní informační systém, společně se svými spolupracovníky Mosherem a Loriem vyvinuli GML - Generalized Markup Language (mimochodem název se shoduje s iniciálami zúčastněných pracovníků). Také v GML byly použity myšlenky navržené Ricem, ale místo jednoduchého systému značek popisoval GML dokument jako hierarchickou strukturu elementů, mezi nimiž jsou různé vzájemné vztahy a každému typu elementu přísluší určité označení. American National Standards Institute založil v roce 1978 výbor Computer Languages for the Processing of Text. Za spolupráce ANSI a GCA byla publikována první pracovní verze SGML v roce 1980 a finálním produktem společného úsilí byl mezinárodní standard, který byl v roce 1986 přijat International Standards Organization pod označením ISO 8879 a stal se součástí architektury ODA.

SGML

SGML není tedy nějakou konkrétní množinou značek pro popis dokumentu, ale můžeme si jej představit jako metajazyk, který umožňuje definovat, jaké značky (elementy) se mohou v textu používat a jak spolu souvisí (struktura dokumentu). Definice přípustných elementů a vztahů mezi nimi se označuje jako DTD (Document Type Definition) a bývá uložena v samostatném textovém souboru. Samotný náš dokument, na který jsme použili SGML, se tedy skládá z identifikace DTD, pomocí něhož je dokument 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 mají na starosti další programy, které mohou dokument vytvořený na základě konkrétního DTD zpracovat (např. převést do hypertexového souboru). Jedinou skupinou programů, které jsou nezávislé na konkrétním DTD, jsou tzv. parsery, které slouží pro kontrolu SGML dokumentů, tj. zjišťují, zda použití elementů v dokumentu odpovídá jejich definici v DTD. Pro přiblížení práce se SGML použiji ukázku popisu sbírky básní. Předpokládejme, že se celá sbírka skládá z několika básní, báseň má název a obsahuje několik veršů, verš obsahuje několik řádků.

Celý dokument, ve kterém uložíme sbírku básní tak, aby odpovídala námi navrženému DTD, by mohl vypadat takto (ukázka pochází z básnické sbírky Svlékání hadů od Oldřicha Mikuláška):

     <book>
  <poem><title>Římské náměstí</title>
  <verse>
    <line>Na Římském náměstí</line>
    <line>už chřadne javor.</line>
    <line>Je cosi zlatistého v každém umírání.</line>
    <line>Sem tam slétne list</line>
    <line>a zkouší kolik sáhů</line>
    <line>má do hloubky hrob léta.</line>
  </verse>
  <verse>
    <line>Holubí stín</line>
    <line>jej přetne truchlou stuhou,</line>
    <line>ale nic nevěstí</line>
    <!- další řádky verše ->
  </verse>
  </poem>
  <poem>
    <!- následují další básně ->
</book>

Mezery na začátku řádků a konce řádků (např. za </line>) jsou dodány pouze kvůli přehlednosti, z hlediska SGML dokumentu nemají žádný zvláštní význam. Řádky <!-...-> tvoří v SGML poznámku, nejsou brány jako součást textu básně.

Vidíme, že celá sbírka je označena elementem "book". Aby bylo možno jednotlivé elementy odlišit od normálního textu, jsou uzavřeny mezi speciální znaky, mezi "<" a ">". Konkrétním výskytům elementů v textu se říká tagy. Pro rozlišení, které tagy označují začátek a které konec popisované oblasti, předchází jména koncových tagů znak "/". Sbírka se dělí na jednotlivé básně, které jsou označeny tagy <poem></poem>. Název básně je označen tagy <title></title>, verše jsou označeny tagy <verse></verse> a jednotlivé řádky veršů jsou označeny tagy <line></line>.

Definice příslušného DTD by vypadala takto:

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

Těchto pět řádků je příklad deklarace elementu v SGML. Každá deklarace je uzavřena mezi znaky "<" a ">". První znak v deklaraci je vykřičník, následovaný bezprostředně klíčovým slovem ELEMENT (SGML obsahuje krátký seznam klíčových slov, které specifikují typ deklarovaného objektu). Každá deklarace elementu se skládá ze tří částí:

Druhá část deklarace - minimalizační pravidla - říká, zda musíme používat začáteční a koncové tagy. Skládájí se ze dvou znaků oddělených mezerou. První znak se týká začátečních a druhý znak koncových tagů. Každý ze znaků může mít hodnotu:

     -    příslušný tag musí být uveden
O (omissible nebo omitted) příslušný tag může být vynechán (lze jej odvodit z kontextu předchozích tagů).

Třetí část deklarace - content model - definuje elementy, které jsou obsaženy v právě definovaném elementu. Je tvořena názvem elementu, který je obsažen v definovaném elementu (nebo klíčovým slovem, např. #PCDATA - Parsed Character Data), a indikátorem výskytu (kolikrát se daný element může opakovat). Indikátor výskytu může mít hodnotu:

     ?    žádný nebo jeden výskyt
+ jeden a více výskytů
* žádný, jeden nebo více výskytů

Definice elementu poem obsahuje dvě komponenty (title, verse), které jsou spojené skupinovou spojkou (group connector). Tato může mít hodnotu:

     ,    (čárka) obě komponenty musí být použity a musí být v tomto pořadí
& (ampersand) obě komponenty musí být použity, ale nezáleží na jejich pořadí
| (svislá čára) pouze jedna komponenta z uvedených se musí použít

Protože naše definice DTD umožňuje některé koncové tagy vynechat, můžeme sbírku básní přepsat zkráceně:

     <book>
  <poem><title>Římské náměstí
  <verse>
    <line>Na Římském náměstí
    <line>už chřadne javor.
    <line>Je cosi zlatistého v každém umírání.
    <line>Sem tam slétne list
    <line>a zkouší kolik sáhů
    <line>má do hloubky hrob léta.
  <verse>
    <line>Holubí stín
    <line>jej přetne truchlou stuhou,
    <line>ale nic nevěstí
    <!- další řádky verše ->
  <poem>
    <!- následují další básně ->
</book>

Vidíme, že při tvorbě SGML dokumentu pracujeme s jeho obsahem, s jeho strukturou. Konkrétní formu určí až systém, který je použitý pro výstup či zobrazení takto zapsaného dokumentu (např. vytištění souboru, převod do typografického systému apod.). Pokud vám tato krátká ukázka práce se SGML dala představu možností popisu dokumentů, splnil článek svůj účel. Zamlčel jsem mnohé, ale smyslem článku bylo představit filosofii jazyka SGML, ne napsat část příručky či přehledu klíčových slov.

Literatura

[1] Martin Bryan. SGML : an author's quide to the Standard Generalized Markup Language.
[2] http://www.mtranslations.cz/CE/sgml.htm
[3] Jiří Kose ml. Články v Computerworld 1996.
Zpět na začátek
ÚVT MU, poslední změna 14.11.2011