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.
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.
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.
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.
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.