Popis SGML deklarace pro ISO/IEC15445
(Stejnou deklaraci používá i HTML 4.01)
<!SGML  "ISO 8879:1986 (WWW)"
--   ISO/IEC 15445 Hypertext Markup Language (ISO-HTML)
     SGML Declaration

     Copyright (C) 2000 IETF, W3C (MIT, Inria, Keio), ISO/IEC
               All Rights Reserved

     Permission to copy in any form is granted for use with
     validating and conforming systems and applications as defined 
     in ISO/IEC 15445, provided this copyright notice is included
     with all copies.
--
CHARSET
         -- First 17 planes of ISO 10646. --
         BASESET  "ISO Registration Number 177//CHARSET
                   ISO/IEC 10646-1:1993 UCS-4 with
                   implementation level 3//ESC 2/5 2/15 4/6"
         DESCSET  0       9       UNUSED
                  9       2       9
                  11      2       UNUSED
                  13      1       13
                  14      18      UNUSED
                  32      95      32
                  127     1       UNUSED
                  128     32      UNUSED
                  160     55136   160
                  55296   2048    UNUSED
                  57344   1056768 57344

-- 
        ISO/IEC 10646 does not define all positions. For example, it reserves
        positions with hexadecimal values 0000D800 - 0000DFFF, used in the
        UTF-16 encoding of UCS-4, as well as the last two code values in each
        plane of UCS-4, ie. all values of the hexadecimal form xxxxFFFE and
        xxxxFFFF. Undefined code values and the corresponding numeric
        character references should not be included in an HTML document, and
        they shall be ignored if encountered when processing an HTML document.
--
CAPACITY          SGMLREF
                  TOTALCAP        150000
                  GRPCAP          150000
                  ENTCAP          150000

SCOPE    DOCUMENT
SYNTAX
         SHUNCHAR CONTROLS 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
                  17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 127
         BASESET "ISO 646IRV:1991//CHARSET
                  International Reference Version
                  (IRV)//ESC 2/8 4/2"
         DESCSET  0 128 0

         FUNCTION
                  RE          13
                  RS          10
                  SPACE       32
                  TAB SEPCHAR  9 -- Deprecated --

         NAMING   LCNMSTRT ""
                  UCNMSTRT ""
                  LCNMCHAR ".-_:"
                  UCNMCHAR ".-_:"
                  NAMECASE GENERAL YES
                           ENTITY   NO
         DELIM    GENERAL  SGMLREF
                  HCRO     "&#38;#x" -- 38 is Ampersand --
                  SHORTREF SGMLREF

         NAMES    SGMLREF
         QUANTITY SGMLREF
                  ATTCNT      60
                  ATTSPLEN 65536 -- These are the largest values --
                  LITLEN   65536 -- permitted in the declaration. --
                  NAMELEN  65536 -- Avoid fixed limits in actual --
                  PILEN    65536 -- implementations of user agents. --
                  TAGLVL     100
                  TAGLEN   65536
                  GRPGTCNT   150
                  GRPCNT      64
FEATURES
         MINIMIZE
                  DATATAG     NO
                  OMITTAG    YES
                  RANK        NO
                  SHORTTAG   YES
         LINK
                  SIMPLE      NO
                  IMPLICIT    NO
                  EXPLICIT    NO
         OTHER
                  CONCUR      NO
                  SUBDOC      NO
                  FORMAL     YES
APPINFO  NONE
>


Mnohé z parametrů standardního univerzálního vyznačovacího jazyka mohou být přizpůsobeny tak, aby vyhověly speciálním potřebám. A právě toto přizpůsobení se popisuje v deklaraci SGML.

Literál následující za klíčovým slovem SGML určuje použitou verzi SGML. možné varianty jsou:
"ISO 8879:1986"ISO 8879:1986 (minimální tvar literálu)
"ISO 8879:1986 (ENR)"ISO 8879:1986/Cor.1:1996 (příloha J)
"ISO 8879:1986 (WWW)"ISO 8879:1986/Cor.2:1999 (příloha K)
CHARSET (document character set)
Tento oddíl popisuje soubor znaků dokumentu. Základním požadavkem je, aby každý signifikantní znak SGML měl v sadě odpovídající protějšek vyjádřený skupinou bitů.

BASESET (base character set)
Určuje základní soubor znaků pomocí jeho veřejného identifikátoru. Zde je použito prvních 17 úrovní univerzálního víceoktetového kódovaného souboru znaků podle ISO/IEC 10646. Toto omezení je dáno limity samotného SGML.
DESCSET (described character set portion)
Upřesňuje konkrétní využití znakové sady. První číslo určuje začátek skupiny znaků, druhé počet znaků a třetí způsob, jakým jim bude přiřazen význam. A to následovně:
  • Pokud je zde specifikováno číslo znaku zákaladního souboru, je znakům skupiny přiřazen význam odpovídajících znaků, počínaje tímto číslem. Toto pravidlo umožňuje přemapovat znaky na jiné bitové pozice (zde se nepoužívá).
  • Je-li specifikováno UNUSED, není znakům přiřazen žádný význam.
  • Pokud číslo není v základní sadě obsaženo, není znakům přiřazen žádný význam.
  • Je-li specifikován minimální literál, je význam nebo významy takové, jak je popsáno v literálu (zde se nepoužívá). Tato možnost by se měla používat pouze tehdy, nemá-li žádný znak v základním souboru znaků požadovaný význam.
Všechny znaky, kterým není přiřazen žádný význam, jsou identifikovány jako znaky nepříslušící SGML. Nejčastěji se jedná o řídící znaky systému zpracování. Aplikací výše uvedených pravidel na základní soubor znaků vznikne tzv. popsaný soubor znaků, který se použije jako soubor znaků dokumentu.
CAPACITY (capacity set)
Hodnota kapacity zhruba určuje množství paměti potřebné k uložení výsledků rozboru definice typu dokumentu (s výjimkou atributů typu ID a IDREF, u kterých nároky na kapacitu vyplynou až z instance dokumentu). Většina dnešních systémů chyby dokumentu související s překročením maximální kapacity pouze oznámí a pokračuje dál ve zpracování. Někdy se přenechává starost o kapacitu na tvůrcích systémů zpracování (pomocí CAPACITY NONE).
SGMLREF
Pokud není dále uvedeno jinak, použijí se hodnoty kapacit uvedené v referenční konkrétní syntaxi.
Pozn.: Jestliže není definována kapacita pomocí veřejného identifikátoru musí se zde vždy uvést toto klíčové slovo.
TOTALCAP (total capacity)
Celkový součet bodů jednotlivých kapacit. Určuje maximální možné paměťové nároky kladené na systém zpracování.
GRPCAP (group capacity)
Odráží paměťové nároky plynoucí z definicí modelů obsahu jednotlivých prvků jazyka. Minimální hodnotu kapcity GRPCAP, které daný dokument vyhoví, zjistíme tak, že součet všech lexikáních jednotek obsahu na každé úrovni modelu obsahu (skupina příznaku dat představuje tři lexikální jednotky) všech prvků které model obsahu deklarovaný mají vynásobíme hodnotou charakteristiky NAMELEN. Zjednodušeně, ale zato srozumitelněji lze říct, že hodnotu GRPCAP získáme, když součet hodnot GRPGTCNT všech prvků vynásobíme hodnotou NAMELEN.
ENTCAP (entity capacity)
Kapacita reprezentuje paměťové nároky vyplývající z faktu, že v DTD je deklarované určité množství entit. Vypočte se jako součin maximální délky názvu entity a početu deklarovaných entit.
Pozn.: Vzhledem ke skutečnosti, že parametr NAMELEN je nastaven na hodnotu 65536, nemůže DTD nikdy vyhovět zvolené kapacitě.
SCOPE (concrete syntax scope)
Určuje rozsah působnosti konkrétní syntaxe.
DOCUMENT
Toto klíčové slovo značí, že rozsah působnosti zahrnuje celý dokument. Pokud by bylo místo DOCUMENT uvedeno klíčové slovo INSTANCE, pak se konkrétní syntax vstahuje pouze na instance dokumentu a v prologu (tj. v DTD) se použije standardní SGML syntaxe.
SYNTAX (concrete syntax)
Oddíl SYNTAX je důležitou částí SGML deklarace, neboť umožňuje určit vlastní pravidla a konvence pro tvorbu dokumentů. Zatímco sekce CHARSET se zabývá všemi možnými znaky v dokumentu, sekce SYNTAX se zabývá znaky, které jsou potřeba pro konkrétní syntaxi, respektive pro její správnou interpretaci. Minimálně musí obsahovat všechny signifikantní znaky SGML.
SHUNCHAR (shunned characters)
Určuje, kterým znakům znakové sady je třeba se vyhnout, jelikož by je některé systémy mohly chybně považovat za řídící znaky.
CONTROLS (control characters)
Toto klíčové slovo znamená, že že každé číslo znaku, které je souborem znaků systému považováno za kódovou reperezentaci řídícího znaku a nikoliv za grafický znak, je znakem, kterému je třeba vyhnout.
BASESET (base character set)
Určuje znakovou sadu konkrétní syntaxe.
DESCSET (described character set portion)
Upřesňuje konkrétní využití znakové sady.
FUNCTION (function character identification)
Definuje znaky mající speciální význam:
RE (record end)koncový znak záznamu
RS (record start)počáteční znak záznamu
SPACEznak mezery
TAB SEPCHAR (separator character)znak oddělovače TAB
Pozn.: Definování těchto speciálních znaků je nadřazeno funkci SHUNCHAR.
NAMING (naming rules)
Určuje pravidla přidělování názvů.
LCNMSTRT (lower-case name start characters)
Obsahuje znaky, o které se rozšiřuje skupina povolených počátečních znaků názvů (malá písmena).
UCNMSTRT (upper-case name start characters)
Obsahuje znaky, o které se rozšiřuje skupina povolených počátečních znaků názvů (velká písmena). Zde konkrétně k rozšíření nedochází, což znamená, že počátečními znaky mohou být pouze malá a velká písmena abecedy (dle SGML).
LCNMCHAR (lower-case name characters)
Obsahuje znaky, o které se rozšiřuje skupina povolených nepočátečních znaků názvů (malá písmena).
UCNMSTRT (upper-case name characters)
Obsahuje znaky, o které se rozšiřuje skupina povolených nepočátečních znaků názvů (velká písmena). Znaky následujícími za prvním znakem názvu tedy mohou být malá a velká písmena, číslice (dle SGML) a dále tečka, pomlčka, podtržítko a dvojtečka.

NAMECASE
Tento oddíl se zabývá převodem velikosti písmen v názvech.
GENERAL YES
Určuje, že všechny názvy (kromě entit) budou převedeny na velká písmena, tj. že na velikosti písmen v názvech nezáleží.
ENTITY NO
V názvech entit se velikost písmen rozlišuje.

DELIM (delimiter set)
Tento oddíl definuje použití oddělovačů.
GENERAL(general delimiters)
SGMLREF
použije se referenční množina obecných oddělovačů.
HCRO "&#x" (hex character reference opener)
Definuje sekvenci "&test.html #x" jako oddělovač hexadecimálního odkazu na znak. (dle přílohy K)
Například následující způsoby zápisu jsou rovnocené:
  • &micro;
  • &#181;
  • &#xB5;
SHORTREF (short reference delimiters)
SGMLREF
Použije se referenční množina oddělovačů krátkého odkazu.
NAMES (reserved names use)
Obsahuje náhrady původních vyhrazených názvů deklarace SGML. (zde se nepoužívá). Použije se například v případě, kdy nastavíme maximální délku názvů nižší než 8 znaků, ale přitom některé vyhrazené názvy budou delší.
SGMLREF
Použije se referenční množina názvů.
Pozn.: Vyhrazené názvy, které se vyskytují pouze v deklaraci SGML nemohou být nahrazeny, neboť deklarace SGML používá vždy referenční konkrétní syntaxi.
QUANTITY (quantity set)
Sekce QUANTITY popisuje skupinu omezení týkajících se některých vlastností SGML objektů.
ATTCNT (attribute count)
Počet názvů atributů a lexikálních jednotek názvů v seznamu definic atributů.

Příklad 1:
<ATTLIST OSOBA
    pohlavi  (muz|zena) "muz"
    vek      NUMBER     #REQUIRED >
Seznam definic atributů prvku OSOBA obsahuje 2 názvy atributů (pohlavi, vek) a dvě lexikální jednotky názvů (muz, zena). Minimální hodnota velčiny ATTCNT, které tento předpis vyhoví, je tedy 4.
ATTSPLEN (attribute specification length)
Normalizovaná délka specifikací atributu počátečního příkazu. Normalizovaná délka se spočítá tak, že se ignorují faktické znaky použité pro oddělení a separaci jednotlivých komponent atributů a místo nich se připočte zvláštní pevné číslo na každou komponentu. Toto zvláštní číslo je definováno veličinou NORMSEP a standardně má hodnotu 2.

Příklad 2:
<OSOBA vek=18 pohlavi=zena>
<OSOBA vek = "18" pohlavi  = "zena">
vek3 (+2)
182 (+2)
pohlavi7 (+2)
zena4 (+2)
Normalizovaná délka je v obou případech 24, bez ohledu na formu zápisu.
LITLEN (literal length)
Maximální délka parmetrického literálu nebo literálu hodnoty atributu (interpretovaného a bez oddělovačů). Parametrický literál je text uzavřený v uvozovkách, který může obsahovat odkazy na parametrické entity nebo odkazy na znak.

Příklad 3:
<!ENTITY % lng "cz|de|fr|it|sp|ru|sk" >
<!ENTITY % lang "%lng;|unknown" >
<!ELEMENT OSOBA      - O (#PCDATA)>
<!ATTLIST OSOBA
     pohlavi (muz|zena)  "muz"
     vek     NUMBER      #REQUIRED 
     jazyk   (%lang;)    "unknown" >
...    
<OSOBA vek = "18" lang="en">
V příkladě je deklarována parametrická entita lang, která je použita pro výčet možných hodnot atributu jazyk prvku OSOBA. Řetězec "%lng;|unknown" je její parametrický literál. Ten obsahuje odkaz na parametrickou entitu lng, jejíž parametrický literál je tvořen řetězcem "cz|de|fr|it|sp|ru|sk". Interpretovaný parametrický literál parametrické entity lang je tedy "cz|de|fr|it|sp|ru|sk|unknown".

Literál hodnoty atributu je vymezená interpretovaná hodnota atributu. V příkladu se vyskytují dva literály hodnoty atributu v deklaraci typu dokumentu (muz a unknown) a dva v instanci dokumentu (18 a en).
Pozn: Maximální povolenou délku hodnoty atributu získáme jako rozdíl hodnot veličin LITLEN a NORMSEP.
%lng;20
%lang;28
"muz"3 (+2)
"unknown"7 (+2)
"18"2 (+2)
"en"2 (+2)
Minimální hodnota veličiny LITLEN, které příklad vyhoví, je 28.
Pozn.: Implicitní hodnoty atributů nemají vliv na posuzování délek literálů v instanci dokumentu.
NAMELEN (name length)
Maximální délka názvu, lexikální jednotky názvu, čísla a lexikální jednotky čísla. Lexikální jednotka názvu je řetězec znaků skládající se pouze ze znaků názvu. Název je lexikální jednotka názvu, jejíž první znak je počáteční znakem názvu. Číslo je lexikální jednotka názvu skládající se pouze z číslic. Lexikální jednotka čísla je lexikální jednotka názvu, jejíž prvním znakem je číslice.

Příklad 4:
<!ENTITY % lng "cz|de|fr|it|sp|ru|sk" >
<!ENTITY % lang "%lng;|unknown" >
<!ELEMENT OSOBA       - O  (#PCDATA)>
<!ATTLIST OSOBA
     pohlavi  (muz|zena)  "muz"
     vek      NUMBER      #REQUIRED 
     jazyk    (%lang;)    "unknown" >
...
<OSOBA vek = "18" lang="en">
V příkladu jsou na veličinu NAMELEN testovány všechny řetězce oddělovčů (včetně těch, které nejsou použity), rezervované názvy (ENTITY, ELEMENT, ATTLIST, NUMBER, REQUIRED, O), názvy parametrických entit (lng, lang), názvy atributů (pohlavi, vek, jazyk) a název prvku (OSOBA)
PILEN (processing instruction length)
Maximální délka instrukce zpracování (bez oddělovačů). Standardními oddělovači instrukce zpracování jsou <? a >
TAGLVL (tag level)
Maximální úroveň vnoření otevřených prvků. Týká se vnořování standardních prvků a vyznačených oddílů.

Příklad 5:
test.dtd
<!ENTITY % normal "IGNORE">
<!ENTITY % lng "cz|de|fr|it|sp|ru|sk" >
<![%normal;[<!ENTITY % lang "%lng;|unknown" >{]>
<!ENTITY % lang "%lng;" >
<!ELEMENT HTML        O O  (HEAD, BODY) >
<!ELEMENT HEAD        O O  (TITLE)>
<!ELEMENT TITLE       O O  (#PCDATA)>
<!ELEMENT BODY        - O  (#PCDATA|OSOBA)+>
<!ELEMENT OSOBA       - O  (#PCDATA)>
<![%normal;[<!ENTITY % langdef "unknown">{]>
<!ENTITY % langdef "#REQUIRED">
<!ATTLIST OSOBA	
     pohlavi  (muz|zena)  "muz"
     vek      NUMBER      #REQUIRED 
     jazyk    (%lang;)    %langdef; >

test.html
<!DOCTYPE HTML SYSTEM "test.dtd" [<!ENTITY % normal "INCLUDE">]>
Nadpis
<body>
Tělo
<osoba vek=24 pohlavi="muz" jazyk="unknown">Jan Angelovič
Vyznačené oddíly dovolují vymezit část dokumentu vyžadující speciální zacházení. V příkladu se vyskytují vyznačené oddíly, protože chceme umožnit použití dvou verzí deklarace. Pokud nastavíme parametrickou entitu normal na hodnotu INCLUDE, bude platit obsah vyznačených oddílů, v opačném případě se bude jejich obsah ignorovat. U obou vyznačených oddílů v příkladu deklarace je úroveň vnoření 1. V případě dokumentu test.html je nejhlubší úroveň vnoření 3 a to u prvků TITLE a OSOBA.Minimální hodnota veličiny TAGLVL, které příklad vyhoví, je tedy 3.
TAGLEN (tag length)
Maximální délka počátečního příznaku (bez odělovačů). Jedná se o skutečnou délku počátečního příznaku tak jak je zapsán v instanci dokumentu, tj. ještě před interpretací literálů hodnoty atributu.
GRPGTCNT (group grant total count)
Celkový součet lexikálních jednotek obsahu na všech úrovních modelu obsahu (skupina příznaku dat představuje tři lexikální jednotky). Vnořená skupina je sama zároveň lexikální jednotkou:
Příklad 6:
<!ELEMENT KONTAKT       - O  (ADRESA,(MOBIL|PAGER)*)>
Celkový součet lexikálních jednotek je 4.
GRPCNT (group count)
Omezení daná veličinou GRPCNT se uplatňují na více místech:
  1. Maximální počet lexikálních jednotek ve skupině
    Příklad 7:
    <!ELEMENT KONTAKT       - O  (ADRESA,(MOBIL|PAGER)*)>
    
    V příkladu je maximální počet lexikálních jednotek ve skupině 2. Pokud bychom testovali příklad test.html na veličinu GRPCNT pak vidíme, že obsahuje dvě skupiny názvů určující přípustné hodnoty atributů pohlavi a jazyk, a dále 5 skupin modelů obsahu. Nejobsáhlejší, a tedy z našeho pohledu nejdůležitější, je skupina přípustných hodnot atributu jazyk. Obsah této skupiny je definován odkazem na parametrickou entitu lang, která se ale mění v závislosti na použité variantě definice typu dokumentu. Proto je minimální hodnota veličiny GRPCNT, které příklad test vyhoví, 8 (v případě "verze normal") anebo 7 (v případě použití výchozí verze).
  2. Maximální celkový počet názvů v hodnotě atributů typu ID a IDREF
    Prvky mohou mít definován atribut typu ID, který jim umožňuje být cílem odkazu z jiného prvku. Atribut typu IDREF pak naopak umožňuje odkazovat se na jiné prvky dokumentu, které mají svoje ID. Pokud je atribut typu IDREFS, můžeme odkazovat na množinu více prvků. V jednom počátečním příznaku nesmí celkový počet názvů v hodnotě odkazu na ID přesáhnout hodnotu veličiny GRPCNT.
    Příklad 8:
    <LINK hlavni-odkaz="target1" dalsi-odkazy="target2 target3">  
    
    Předpokládejme, že má atribut hlavni-odkaz deklarovanou hodnotu IDREF a atribut dalsi-odkazy má deklarovanou hodnotu IDREFS. Pak minimální hodnota veličiny GRPCNT, které dané počáteční vyznačení vyhoví, je rovna 3.
FEATURES (feature use)
Určuje, které volitelné vlastnosti SGML budou použity.
MINIMIZE (markup minimization features)
Určuje povolené techniky minimalizace příznaků.
DATATAG NO (data tag minimalization)
Znaky dat nemohou současně sloužit jako příznaky. V aplikacích, kde je minimalizace příznaku dat povolena, konvence použité v datech mohou jednoznačně identifikovat v nich obsažené prvky.
OMITTAG YES (omitted tag minimization)
Příznaky mohou být úplně vynechány. Obecně lze vynechat buď počáteční příznak, koncový příznak nebo celé vyznačení. A to pouze u prvků, jejichž hranice jsou jednoznačně rozpoznatelné z kontextu dokumentu a jejichž deklarace takovou minimalizaci připouští.
Příklad 8:
test2.html
<!DOCTYPE HTML SYSTEM "test.dtd" [<!ENTITY % normal "INCLUDE">]>
Nadpis
<body>
Tělo
<osoba vek=24 pohlavi="muz">Jan Angelovič
  • Vynechání koncového příznaku: Přítomný počáteční příznak:
    Koncový příznak je možné vynechat, když po obsahu jeho prvku následuje počáteční příznak prvku, který se v něm nemůže vyskytnout.
    Na základě tohoto pravidla byl vynechán koncový příznak u prvku BODY.
  • Vynechání koncového příznaku: Koncový příznak obsahujícího prvku:
    Koncový příznak prvku může být vynechán, pokud po něm následuje koncový příznak prvku, v kterém je osažen.
    Nejdříve je třeba říct, co je to dokumentový prvek: Dokumentový prvek je prvek ohraničující instanci dokumentu. Je nejvyšším prvkem v hierarchii dokumentu a jeho generický identifikátor je schodný s názvem typu dokumentu - HTML. DTD musí povinně obsahovat deklaraci dokumentového prvku. Konec instance dokumentu tak zároveň uzavírá prvek HTML a proto můžeme jeho koncový příznak vynechat. Konec prvku HTML ale zároveň ukončuje i prvek BODY, jehož konec v našem případě zase vyvolá ukončení prvku OSOBA.
  • Vynechání počátečního příznaku: Kontextově požadovaný prvek:
    Počáteční příznak se může vynechat, když je kontextově požadován typ prvku a jakékoliv jiné typy prvku, které by se mohly vyskytnout, jsou kontextově volitelné. V našem příkladě jsme na základě tohoto pravidla vynechali počáteční příznak prvků HTML, HEAD, TITLE a BODY.
    Pozn.: Toto pravidlo nelze použít, pokud typ prvku má vyžadovaný atribut nebo deklarovaný obsah, anebo pokud je obsah prvku prázdný.
RANK NO (rank minimalization)
Úrovně prvku nemohou být z příznaků vynechány. Generický identifikátor uspořádaného prvku (prvku s úrovní) se skládá z kmene úrovně a přípony úrovně. Kmen označuje typ prvku a přípona úroveň jeho vnoření (v HTML se nepoužívá!). Pokud by byla charakteristika RANK povolena, bylo by možné případně vynechat příponu úrovně. V takovém případě se nastaví úroveň podle úrovně posledního prvku.
Příklad 9:
<!ELEMENT PAR 1 - O (#PCDATA|PAramecek|NOTE)+ >
<!ELEMENT PAR 2 - O (#PCDATA|PAR3|NOTE)+ >
<!ELEMENT PAR 3 - O (#PCDATA|NOTE)+ > 
<!ELEMENT NOTE  - O (#PCDATA)>
...
<PAR1>odstavec 1. úrovně
<PAramecek> odstavec 2. úrovně
<NOTE>Poznámka
<PAR> odstavec 2. úrovně
<PAR1>odstavec 1. úrovně
<NOTE>Poznámka
<PAR>odstavec 1. úrovně
SHORTTAG YES (short tag minimalization)
Mohou být používány krátké příznaky s vynechanými oddělovači, specifikacemi atributů nebo generickými identifikátory (dále jen GI).
  • Neuzavřené krátké příznaky: Oddělovač tagc (">") může být vynechán z příznaku, po němž bezprostředně následuje jiný příznak:
    Příklad 10:
    <p><em>zvýrazněný text v odstavci</em></p> 
    
    nahradíme
    <p id=par1<em>zvýrazněný text v odstavci<em</p> 
    
  • Prázdné příznaky: V prázdném příznaku není specifikován GI ani žádné atributy. U prázdného koncového příznaku bude systém za GI považovat GI posledního otevřeného prvku:
    Příklad 11:
    Toto je <em>zvýrazněný text</> 
    
    V případě prázdného počátečního příznaku se za GI doplní GI posledního otevřeného prvku, přičemž se použijí implicitní hodnoty atributů:
    Příklad 12:
    <p>Totoje<em>zvýrazněnýtext<>stejnějakotento</></p>
    
    ale
    <p>Totoje<em>zvýrazněnýtext</>ale<>totojeodstavec</></p>
    
    Pozn.: Toto pravidlo platí bez ohledu na to, zda se takto specifikovaný prvek smí v daném kontrextu vyskytnout! Pokud je deklarováno OMITTAG NO, pak je prázdnému počátečnímu příznaku přiřazen generický identifikátor posledního uzavřeného prvku.

    Pokud byl pro prvek použit místo tagc (">") znak net ("/") pak se bude jako prázdný koncový příznak interpretovat rovněž znak net:
    Příklad 13:
    Toto je <em/zvýrazněný text/ a toto už ne
    
LINK (link type features)
Technika spojování se používá v systémech speciálního zpracování SGML dokumentů. Umožňuje těmto systémům automaticky zpracovávat SGML dokumenty. Typickým příkladem je třeba uzpůsobení dokumentu pro tisk.
Pozn.: Spojování můžeme použít pouze u základního typu dokumentu, nikoliv u alternativních typů. Explicitní spojení nelze použít zároveň se souběžným vyznačením (CONCUR).
SIMPLE NO (simple link)
Jednoduché spojování (je-li povoleno) dovoluje nastavit atributy spojování pouze u dokumentového prvku.
Příklad 13:
<!DOCTYPE HTML SYSTEM "test.dtd">
<!LINKTYPE print #SIMPLE #IMPLIED [
<!ATTLIST HTML
     color       NAME     #FIXED  "black"
     background  NAME     #FIXED  "white" 	
     size        NUTOKEN  #FIXED  "12pt"
     style       NAME     #FIXED  "normal"
>]>
Nadpis</>Text
Pouze systém, který podporuje typ spojovacího procesu print rozpozná u dokumentového prvku HTML atributy color, background, size a style. Ostatní systémy je budou ignorovat.
Pozn.: Atributy spojování mají jmený prostor odělený od atributů deklarovaných v DTD a to pro, aby se mohly vyskytovat atributy stejného názvu jak v definici spojovacího procesu, tak v DTD.
IMPLICIT NO (implicit link)
Implicitní spojování (je-li povoleno) pracuje podobně jako spojování jednoduché, dovoluje však nastavit atributy spojování u kteréhokoliv prvku.
Příklad 14:
<!DOCTYPE HTML SYSTEM "test.dtd" 
[<!ENTITY % normal "INCLUDE">]>
<!LINKTYPE print HTML #IMPLIED [
<!ATTLIST (HTML|HEAD|TITLE|BODY|OSOBA)
     color       NAME     "black"
     background  NAME     "white"
     size        NUTOKEN  "12pt"
     style       NAMES    "normal"
          				>
<!LINK #INITIAL
                	TITLE
     OSOBA [color=blue]>
]>
Seznam osob</><osoba>Novák Jan<osoba>Dvořák Petr
Pro elementy HTML, HEAD, TITLE, BODY a OSOBA se definuje schodné základní nastavení atributů. Nakonec ale v deklaraci výchozí množiny spojování aktivujeme atributy spojování pouze u prvků TITLE a OSOBA, příčemž u druhého přenastavíme hodnotu atributu color na blue. U ostatních prvků tak nebudou atributy spojování použity.
EXPLICIT NO (explicit link)
Explicitní spojování (je-li povoleno) umožňuje kompletně převést dokument na dokument jiného typu.
Příklad 14:
poem.dtd
<!ELEMENT POEM        O O  (CAPTION, AUTHOR, TEXT) >
<!ELEMENT (CAPTION|AUTHOR)	O O  (#PCDATA)>
<!ELEMENT TEXT        O O  (VERSE)+>
<!ELEMENT VERSE       O O  (#PCDATA)>
poem1.txt
<!DOCTYPE POEM SYSTEM "poem.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!LINKTYPE poem2htm POEM HTML
[<!LINK #INITIAL
     poem     html
     caption  title
     author   h1
     verse    p                      		
>]>
Název básně</>Jméno Autora</>Text básně
Pokud aktivujeme spojovací proces poem2htm dostaneme:
<HTML>
<TITLE>Název básně</TITLE>
<H1>Jméno Autora</H1>
<P>Text básně</P>
</HTML>
Výsledný dokument tak bude po druhém průchodu parserem vypadat následovně:
<HTML>
<HEAD><TITLE>Název básně</TITLE></HEAD>
<BODY>
<H1>Jméno autora</H1>
<P>Text Básně</P>
</BODY>
</HTML>
Pozn.: Pokud by se ve zdrojovém dokumentu vyskytovaly atributy, bylo by je možné převést na odpovídající atributy cílového dokumentu, nebo na základě jejich hodnoty měnit způsob vyznačení výsledného prvku.
OTHER (other features)
CONCUR NO (concurrent document instance)
Charakteristika CONCUR (je-li povolena) umožňuje formátovat základní logický dokument pro různé účely (zobrazení na obrazovce, prezentace, tisk atp.), nebo různé systémy zpracování, díky souběžnému použití prvků různých DTD v jediném dokumentu. Výstupem jsou pak různé "pohledy" na stejná data:
Příklad 15:
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">
<!DOCTYPE POEM SYSTEM "poem.dtd">
<(HTML)HTML><(POEM)POEM>
<(HTML)HEAD>
<(HTML)TITLE><(POEM)CAPTION>
Názevbásně
</(POEM)CAPTION></(HTML)TITLE>
<(HTML)BODY>
<(HTML)H1><AUTHOR>Jméno autora</AUTHOR></(HTML)H1>
<(POEM)TEXT><(HTML)P><(POEM)VERSE>
TextBásně
</(POEM)VERSE></(HTML)P></(POEM)TEXT>
</(POEM)POEM></(HTML)HTML>
SUBDOC NO
Tato charakteristika (je-li povolena) dovoluje, aby odděleně vytvořené dokumenty různého typu byly začleněny do jediného dokumentu. Poddokument musí být externě uložen a z hlavního dokumentu je na něj odkazováno jako na entitu. Pokud by byla v deklaraci charakteristika povolena, šlo by například do dokumentu HTML vložit dokument typu POEM:
Příklad 16:
poem2.txt
<!DOCTYPE POEM SYSTEM "poem.dtd">
Název básně</>Jméno Autora</>Text básně
sbirka.html
<!DOCTYPE HTML SYSTEM "test.dtd" [
<!ENTITY poem2 SYSTEM "poem2.txt" SUBDOC>
]>
Sbírka básní</>
Úvod
&poem2;
Závěr
Výsledná interpretace dokumentu sbirka.html by mohla vypadat takto:
<HTML>
<HEAD><TITLE>Sbírka básní</TITLE></HEAD>
<BODY>
Úvod
<POEM>
<CAPTION>Název básně</CAPTION>
<AUTHOR>Jméno autora</AUTHOR>
<TEXT><VERSE>Text Básně</VERSE></TEXT>
</POEM>
Závěr
</BODY>
</HTML>
FORMAL YES (formal public identificators)
Veřejné identifikátory se interpretují jako formální veřejné identifikátory.
APPINFO NONE (application-specific information)
Nespecifikuje žádné bližší požadavky na systém zpracování dokumentu.
Použitá literatura
  1. ČSN ISO/IEC 15445 Hypertextový vyznačovací jazyk (HTML), Praha, Český normalizační institut, 2002
  2. ČSN EN 28879 Standardní univerzální vyznačovací jazyk (SGML), Praha, Český normalizační institut, 1995
  3. ISO 8879:1986/Cor.1:1996(E) Standard Generalizated Markup Language SGML Technical Corrigendum 1, Švýcarsko, ISO, 1996
  4. ČSN EN 28879 OPRAVA 2 Standardní univerzální vyznačovací jazyk (SGML), Praha, Český normalizační institut, 2000
  5. Brian, M.: Web SGML and HTML 4.0 Explained, www.sgml.u-net.com, 1997
Poznámka autora
Tento popis měl být původně součástí absolvenstské práce na téma HTML. Z absolutoria však nakonec "sešlo" a tak bych rád některé zajímavé kapitoly alespoň vystavil na netu. Účelem tohoto textu je nastínit funkci a možnosti deklarace lidem, kteří na ni narazí při pročítání příslušné specifikace jazyka HTML. Z tohoto důvodu prosím všechny SGML guru, aby mě nekamenovali. Za jakoukoliv věcnou připomínku budu ale velice rád.
Jan Angelovič©2004