Doplňková validace HTML a XHTML dokumentů

Bakalářská práce

Petr Nálevka

Vysoká škola ekonomická v Praze
Fakulta informatiky a statistiky
Katedra informačního a znalostního inženýrství

květen 2005

Anotace

Cílem této práce je vytvoření nástroje pro validaci dokumentů značkovaných v jazyce HTML. Takovýto nástroj jde za hranice běžně používané validace oproti DTD definicím. Díky využití moderních validačních jazyků, je možné formalizovat dodatečná omezení vycházející ze specifikací jazyka HTML, které přitom není možné vyjádřit s využitím jazyka DTD. Takovýto validační nástroj pak může pomoci autorům HTML dokumentů v lepším dodržování obecně uznávaných standardů, a tím může přispět ke zlepšení celkové dostupnosti těchto dokumentů a k použitelnosti této technologie vůbec.

První kapitola této práce se zabývá jednotlivými standardy a doporučeními, které vymezují používání jazyka HTML a kladou na něj některá zásadní omezení. Cílem této části je základní zmapování oblasti standardizace jazyka HTML a rozbor jednotlivých typů omezení, která jsou na tento jazyk jednotlivými standardy kladena. Takováto analýza pak slouží jako výchozí bod pro kapitolu druhou.

Cílem druhé kapitoly této práce je výběr několika v praxi používaných validačních jazyků a posouzení jejich vhodnosti pro popis dodatečných omezení vycházejících ze standardů HTML. Výsledkem je pak volba konkrétního jazyka nebo kombinace jazyků, která je dále použita pro formalizaci těchto omezení.

Třetí kapitola popisuje implementaci dodatečných omezení ve vhodném validačním jazyce. Zabývá se tím, jaké přístupy a jaká architektura byla zvolena a jaké jsou její slabé a silné stránky. Popisuje strukturu a modularitu zvoleného formálního zápisu a metodiku jeho implementace.

Čtvrtá kapitola detailně popisuje implementaci a architekturu prototypové aplikace pro validaci HTML dokumentů, která využívá dříve definované formalizace. Zabývá se nejen použitou technologií, ale i uspořádáním jednotlivých komponent a podporovanou funkcionalitou. Posuzuje i využitelnost této aplikace v praxi.

Annotation

The aim of this thesis is to create a tool able to validate HTML documents. Such a tool goes beyond the limits of the commonly used DTD-based validation. Additional restrictions specified in the HTML standards may be expressed, thanks to modern advanced validation languages. Such a validation tool may then help authors of HTML documents adhere better to commonly recognized standards and thereby improve the accessibility of those documents and the usability of this technology in general.

The first chapter of this thesis describes various HTML standards and recommendations and some fundamental restrictions of this language defined in those standards. This chapter analyses the scope of HTML standardization and various types of restrictions involved in those standards. Such analysis will serve as a starting point for the second chapter

The objective of the second chapter is to select an eligible subset of commonly used validation languages. Different characteristics of those languages are considered to choose the right language or combination of languages suitable for formalization of additional restrictions resulting from the HTML standards.

The third chapter describes the particular implementation of the aforementioned restrictions using the chosen validation solution. This chapter discusses the selected approaches, their architecture and relative pros and cons. It describes the modularity of the definition as well as the implementation methodology.

The last fourth chapter is a detailed description of the implementation and architecture of a prototype HTML validating application, which makes use of the validation definitions that have been formely defined. It deals with the used technology as well as different organization of the different components and supported functionality. It also investigates the practical utilization of the application.

Prohlášení

Prohlašuji, že jsem bakalářskou práci vypracoval samostatně a použil pouze literaturu uvedenou v přiloženém seznamu. Nemám námitek proti půjčení práce se souhlasem katedry ani proti zveřejnění práce nebo její části.

V Praze dne 6. května 2005

Petr Nálevka


Obsah

Úvod
1. Analýza omezení a požadavků kladených na HTML a XHTML dokumenty
Úvod
Doporučení W3C
HTML 4.01
Základní konstrukty jazyka SGML používané v HTML 4.01
Omezení deklarovaná v DTD
Další omezení nad rámec DTD
XHTML 1.0
Rozdíly mezi HTML a XHTML
Zpětná kompatibilita XHTML
ISO-HTML
Omezení ISO-HTML
WAI WCAG 1.0
Směrnice 1 – Alternativy pro vizuální i auditivní obsah
Směrnice 2 – Nespoléhejte se pouze na barvy
Směrnice 3 – Správné používání značek a stylů
Směrnice 4 – Přirozený jazyk
Směrnice 5 – Správně se zobrazující tabulky
Směrnice 6 – Interpretace nepodporovaných technologií
Směrnice 7 – Obsah citlivý na čas
Směrnice 8 – Dostupnost vnořených uživatelských rozhraní
Směrnice 9 – Dostupnost nezávislá na vstupním zařízení
Směrnice 10 – Přechodná řešení
Směrnice 11 – Používání technologií a směrnic W3C
Směrnice 12 – Kontextové a orientační informace
Směrnice 13 – Zřetelný navigační mechanizmus
Směrnice 14 – Pochopitelné a srozumitelné dokumenty
Shrnutí
2. Analýza validačních jazyků přesahujících schopnosti DTD a posouzení vhodnosti jejich použití pro doplňkovou validaci
Úvod
XML DTD
XML Schema
Relax NG
Schematron
DSD
Posouzení obecných schopností validačních jazyků
Vlastnosti validačních jazyků
Zabudované datové typy
Atributy
Elementy
Modularita
Čitelnost
Kombinování více validačních jazyků
Závěr
3. Formalizace omezení pomocí vybrané kombinace validačních jazyků
Úvod
Struktura definice
Metodika zápisu formalizací – vývojový cyklus
Příklady implementace některých formalizací
Datové typy
Skládání definic
Využití Schematronu
Úspěšnost formalizace
Formalizace omezení WCAG 1.0
Shrnutí
4. Implementace prototypové validační aplikace
Úvod
Architektura
Validační komponenty
Uživatelské rozhraní
Technologie
5. Závěr
Seznam použité literatury
Slovníček pojmů
A. Definice záznamu o knize v jednotlivých validačních jazycích

Seznam obrázků

1.1. Vztah SGML, XML, HTML a XHTML
1.2. Vztah mutací jazyka HTML
2.1. Modularita definic HTML pro mutaci strict a transitional s fragmentem společných definic
2.2. Modularita definic HTML pro mutace strict a transitional se samostatným fragmentem strict
2.3. Profily validačních jazyků (koncept je převzat z [LEE-CHU] a přizpůsoben této práci)
3.1. Jednotlivé moduly definice a vyjádření mutací jazyka HTML pomocí jejich uskupení
3.2. Vývojový cyklus při formalizaci omezení
4.1. Architektura prototypové aplikace
4.2. Konverze HTML dokumentů do formátu XHTML
4.3. Transformační proces při validaci vnořeného Schematronu
4.4. Využití validační aplikace prostřednictvím prohlížeče Firefox 1.0.2
4.5. Využití validační aplikace prostřednictvím prohlížeče Internet Explorer 6.0
4.6. Stránky abclinux.cz validované v textovém prohlížeči Lynx 2.8.5
4.7. Bezchybný výstup

Seznam tabulek

2.1. Typy obsahu
2.2. Souhrnný přehled schopností validačních jazyků. Tabulka obsahuje i další vlastnosti, které nebyly zmíněny výše.
2.3. Souhrnný přehled schopností kombinací validačních jazyků.

Seznam příkladů

1.1. Příklad nepovoleného vnořování elementů
1.2. Příklad zápisu elementu s atributy
1.3. Komentáře v HTML
1.4. Ukázka komentářů
2.1. Příklad simulace datových typů v Schematronu
2.2. Příklad vylučovacího výběru atributů. Osoba nemůže obsahovat věk a datum narození současně
2.3. Příklad popisu podmíněného výskytu atributu na základě hodnoty jiného atributu
2.4. Příklad podmíněného výskytu atributu na základě výskytu jiného atributu
2.5.
2.6. Příklad Schematronu vnořeného do Relax NG
2.7. NRL
3.1. Datový typ anyURI
3.2. Omezení atributu tabindex
3.3. Datový typ URIs může obsahovat URI, nebo jejich seznam se členy oddělenými mezerou
3.4. Tvar souřadnic elementu <area> v závislosti na hodnotě atributu shape
3.5. Tvar souřadnic elementu <area> v závislosti na hodnotě atributu shape
3.6. Definice elementu <ul> v modulu seznamů
3.7. Definice dodatečných atributů elementu <ul>
3.8. Expanzivní přepis
3.9. Dodatečná restrikce zapsaná ve Schematronu
3.10. Dodatečná restrikce zapsaná v Schematronu
3.11. Dodatečná restrikce zapsaná ve Schematronu
3.12. Kontrola jmen barev
3.13. Proměnné v ISO Schematronu
3.14. Ovládací prvky checkbox a radio by měly mít neprázdnou hodnotu.
3.15. Využití funkce count
3.16. Omezení atributů libovolně vzdálených subelementů
3.17. Titulek musí být uveden minimálně u prvního výskytu zkratky
3.18. Kontrola parametru refresh v hlavičce dokumentu
3.19. Pokud je na libovolném elementu ošetřena událost onclick, měla by být ošetřena i událost onkeypress.
3.20. Kontrola volání funkcí pro otevření dodatečného okna v jazyce javascript a vbscript.
3.21. Explicitní popisky.
4.1. Mapování veřejného identifikátoru dokumentů na validační definice.
4.2. Validace z příkazové řádky.
A.1. Knížka Ferdy Mravence v XML
A.2. Příklad definice omezení knížky v DTD
A.3. Stejná definice v DTD s předdefinovanými typy
A.4. Příklad definice v XML Schema
A.5. Definice v Relax NG s použitím knihovny datových typů z XML Schema
A.6. Stejná definice v Relax NG ve své čitelnější kompaktní formě
A.7. Příklad v DSD
A.8. Příklad v Schematronu

Úvod

S dramatickým rozvojem Internetu v posledním desetiletí rostla stejně dramaticky i obliba jazyka HTML, který se stal de facto standardem pro publikování elektronických dokumentů na této síti. Tak jak je stále více informací publikováno právě v tomto formátu, roste i přirozená potřeba zpřístupnit tyto dokumenty co nejširšímu okruhu uživatelů. HTML tedy musí umožnit autorům vytvářet dokumenty v libovolném přirozeném jazyce tak, aby byly přístupné uživatelům z různých zemí světa. Důležitou otázkou je jistě i dostupnost pro handicapované uživatele. Například pro nevidomé je typická grafická interpretace dokumentů vyloučena. V poslední době výrazně roste na významu také potřeba dostupnosti z alternativních platforem (hardware/operační systém). Toto je pravděpodobně dáno vzrůstající diverzifikací aplikačního prostředí na pracovních stanicích, které jsou právě typicky využívány pro přístup k HTML dokumentům, a také možnostmi přístupu z mobilních zařízení, jakými jsou například mobilní telefony nebo PDA. Tato zařízení jsou vzhledem k omezeným systémovým zdrojům výrazně citlivá na správné dodržování syntaxe jazyka HTML.

Zmíněné trendy vedou nejen k rostoucí potřebě standardizace jazyka HTML, ale hlavně vyvíjí tlak na dostupnost efektivních nástrojů, které mají napomoci dodržování standardu v praxi. Teprve s dostupnými a široce použitelnými validačními nástroji je možné efektivně podporovat autory HTML stránek v dodržování standardů, a zlepšovat tak dostupnost těchto dokumentů nezávisle na použité technologii, jazyku a schopnostech uživatelů.

Za validační nástroj přitom v žádném případě není možné považovat internetový prohlížeč schopný zobrazovat HTML dokumenty (dále jen prohlížeč). Ten totiž nemá standardně definovaný způsob ošetření chyb viz. [HTML4]. Většina všeobecně rozšířených prohlížečů se snaží nějakým způsobem zobrazovat i dokumenty, které nevyhovují standardu, a to dokonce i po stránce struktury dokumentu a nebo základní syntaxe značek. Jde přitom o logický krok. Měřítkem použitelnosti daného prohlížeče pro běžného uživatele jistě bude jeho schopnost zobrazit co nejvíce různých dokumentů v čitelné podobě. V praxi je tedy internetový prohlížeč vhodný pro odladění dokumentů pouze v rámci vizuálního uspořádání. Pro tvorbu dokumentů splňujících standardizační specifikace je nezbytně nutné validovat příslušné dokumenty oproti těmto standardům. S validací mohou výrazně pomoci právě automatické validační nástroje. Ty sice většinou nedokáží kontrolovat všechna omezení, ale s rostoucími schopnostmi a komplexností validačních jazyků, jsou jich schopny popsat stále více. Vynechání validace, jakožto součásti publikačního procesu, může vést k produkci nestandardních dokumentů, které jsou čitelné pouze pro úzký okruh masově používaných prohlížečů.

Tímto mechanizmem zde postupně vzniká jakýsi začarovaný kruh. Kromě standardního HTML jazyka existuje ještě jakýsi pseudo-jazyk, jehož podpora v prohlížečích byla vynucena z historických důvodů a ze snahy zpřístupnit autorům dokumentů některé nadstandardní funkce, které zvyšují atraktivitu daného prohlížeče oproti konkurenci. Podpora takového pseudo-jazyka je stále nutnou součástí každého prohlížeče, který si klade za cíl zpřístupnit maximální množství dokumentů. Takováto podpora je pak velkou zátěží pro vývoj nových použitelných prohlížečů. Výrazně ztěžuje například implementaci odlehčených verzí pro mobilní zařízení a obecně se dá říci, že zhoršuje ve všech směrech dostupnost HTML dokumentů. Zhoršuje také konkurenci na tomto poli, a výrazně tak zpomaluje implementaci nových standardů pro tvorbu a zobrazování HTML dokumentů, což vede k ustrnutí celé oblasti na mrtvém bodě.

Zmíněné nepříznivé vlivy zasahují přitom celou oblast informačních technologií. V případě HTML nejde dnes jen o dokumenty v klasickém slova smyslu. Dynamická podoba HTML se v podstatě stala hlavním prostředkem pro tvorbu distribuovaných uživatelských rozhraní pro Klient/Server aplikace ve firemním, ale i domácím a státním prostředí. Prohlížeč se tak stává jakýmsi univerzálním klientem pro přístup k libovolným datovým zdrojům a službám. V tomto kontextu je důležitá multiplatformnost, jako jedna z klíčových výhod tohoto řešení. Data i aplikační logika pak může být dostupná z libovolného terminálu, třeba i z mobilního zařízení, bez potřeby dalších implementačních úprav. Tato skutečnost potom pomalu spěje k naplnění známé vize IT, že „síť je počítač(the network is the computer). Ovšem dosažení této vize pomocí HTML bude možné jen za předpokladu dostatečného prosazovaní standardizace tohoto jazyka v praxi.

Pomoci v tomto procesu se ostatně snaží i tato práce. Jejím cílem je vytvoření validačního nástroje, který by sloužil autorům HTML dokumentů k automatizovanému a jednoduše použitelnému odhalovaní nesouladů těchto dokumentů se standardy HTML. Oproti již existujícím aplikacím (například DTD validátor od W3C...), přináší nástroj popsaný v této práci validaci některých dodatečných omezení popsaných ve standardech jazyka HTML. Z historických a jiných důvodů je struktura jazyka HTML popsána v jazyce DTD (Document Type Definition). K výhodám tohoto jazyka patří výborná čitelnost, stručnost a jednoduchost užívání. Ovšem jeho vyjadřovací schopnosti nedosahují zdaleka možností, jakými disponují moderní validační jazyky postavené na bázi XML. Jejich vyjadřovací schopnost je daleko za hranicí pouhého definování vzájemných strukturálních vazeb jednotlivých elementů, jak je známe z DTD. Pomocí těchto jazyků lze popsat i složitější omezení definovaná ve standardech, a poskytnout tak autorům jednoduchou cestu, jak dosáhnout většího souladu s nimi. Cílem této práce (hlavně kapitoly dvě) je provést analýzu možností dostupných jazyků a vybrat z nich jeden konkrétní nebo případně jejich kombinaci, která bude nejvhodnější pro formalizaci omezení kladených na HTML dokumenty. V další fázi budou vybrané validační jazyky použity k implementaci této formalizace tak, aby pouze rozšiřovaly omezení, která jsou již popsána stávajícími DTD definicemi. Bude tedy platit, že dokument, který je validní vůči těmto omezením, musí být pokud možno validní i proti oficiálním DTD definicím. Naopak to ovšem zdaleka platit nemusí.

V konečné fázi se tato práce zabývá návrhem a implementací prototypové validační aplikace, která umožňuje uživatelům automatickou validaci dokumentů prostřednictvím webového rozhraní. Poskytuje jim maximum informací o nalezených chybách, včetně čísla řádky a popisu problému, s možným nastíněním postupu k jeho odstranění. Některá testovaná omezení jsou volitelná ze strany uživatele. Je tak možné zvolit si stupeň striktnosti a vybrat skupiny omezení, které mají být zahrnuty do validačního procesu.

Kapitola 1. Analýza omezení a požadavků kladených na HTML a XHTML dokumenty

Úvod

Existuje několik zdrojů omezení, která jsou kladena na dokumenty v jazyce HTML. Hlavním zdrojem standardizačních aktivit je v dnešní době W3C (World Wide Web Consorcium), které vydává tzv. doporučení v podobě specifikací jazyka HTML. Standardizací HTML se zabývá i Mezinárodní organizace pro standardizaci (ISO) spolu s Mezinárodní elektrotechnickou komisí (IEC). Jejich specifikace ISO/IEC 15445 viz. [ISO15445], známá též jako ISO-HTML, vychází z HTML 4.01 od W3C. ISO-HTML je v podstatě podmnožinou HTML 4.01, neboť tuto specifikaci dále omezuje, ale nerozšiřuje. Dá se tedy říci, že dokument, který je validní podle ISO-HTML, bude validní i podle specifikace W3C (nemusí platit obráceně). Kromě zmíněných standardů existuje ještě celá řada dalších, které se snaží nějakým způsobem vést autory k psaní kvalitnějších dokumentů a vývojáře prohlížečů k jejich lepšímu zobrazování. Jedním z nich je i směrnice WCAG, která se snaží o zpřístupnění HTML stránek co nejširšímu okruhu uživatelů. Touto směrnicí se budeme také dále zabývat.

Doporučení W3C

Doporučení W3C definují celou škálu variant jazyka HTML. Pokud pomineme starší verze, které není doporučeno používat, je v dnešní době aktuální HTML 4.01, které je díky dobré kompatibilitě s prohlížeči velice rozšířené. Z tohoto jazyka dále vychází jazyk XHTML 1.0, který není v podstatě ničím jiným než restrikcí HTML 4.01 tak, aby splňoval omezení jazyka XML. To přináší celou řadu výhod. Zpracování takového dokumentu je o poznání jednodušší. Navíc lze využít bohatou škálu nástrojů vyvinutých pro jazyk XML, jako jsou různé parsery, transformační nástroje nebo validační jazyky. Další verze XHTML pak přináší modularizaci jednotlivých konstruktů jazyka, což umožňuje vytvářet libovolné podmnožiny jazyka HTML podle potřeby. V této práci se zaměříme hlavně na XHTML 1.0 a HTML 4.01. Důvodem je jejich široké používání v praxi. Také platí, že HTML 4.01 je v podstatě poslední verzí, kde došlo ke změně množiny elementů a atributů jazyka. Další verze postavené na XML totiž samotný jazyk nijak závažně nemění. Specifické modifikace jazyka, jako je například XHTML Print, XHTML Basic a další, jsou nad rámec této práce.

Doporučení W3C rozeznávají v zásadě dva hlavní adresáty definovaných omezení. Jedni jsou lidé implementující prohlížeče HTML dokumentů. Ti musí vědět, jaký význam přikládat jednotlivým elementům jazyka HTML a jakým způsobem tyto elementy a jejich obsah interpretovat. Těchto omezení se bude tato práce dotýkat pouze okrajově. Už z principu nemohou být předmětem validace HTML dokumentů, a proto ani předmětem validace doplňkové. Druhou skupinou jsou autoři dokumentů. Omezení týkající se autorů budou dále podrobně rozebrána. Právě ta z nich, která nejsou podchycena v oficiálních DTD definicích, budou předmětem doplňkové validace.

Některá doporučení adresovaná autorům dokumentů se zabývají tím, jakým způsobem mají autoři ošetřit některé prezentační aspekty dokumentů ve stylových definicích. Tato omezení nebudou předmětem této práce, protože je není možné automaticky validovat na základě validace samotných HTML dokumentů.

Obrázek 1.1. Vztah SGML, XML, HTML a XHTML

Vztah SGML, XML, HTML a XHTML

HTML 4.01

Základní konstrukty jazyka SGML používané v HTML 4.01

Oproti starším verzím jazyka HTML přidává verze 4.01 viz. [HTML4] některé multimediální funkce, skriptování, podporu stylových definic, podporu tisku a lepší dostupnost dokumentů pro handicapované uživatele. Stejně jako dřívější verze je i tato odvozena z jazyka SGML (Standard Generalized Markup Language).

SGML je v zásadě soubor pravidel, které by měly splňovat značkovací jazyky odvozené ze SGML. K definici odvozených jazyků se používá jazyk DTD. Ten vymezuje jednotlivé elementy (ty definují jednotlivé značky) a vazby mezi nimi. Takovými vazbami rozumíme například vymezení množiny subelementů pro daný element a jednoduchá pravidla jejich výskytu. Dále pak jednoduché definice obsahu elementů, jejich atributů a obsahu těchto atributů.

HTML umožňuje autorům značkovat dokumenty tak, aby vedle obsahu těchto dokumentů vyznačili ještě další strukturální, prezentační a sémantické informace. Základním konstruktem SGML je element. Ten vyznačuje v dokumentu určité struktury s příslušným chováním. Jako příklad můžeme uvést třeba element <p> označující odstavec a nebo elementy popisující tabulkové struktury. Typicky platí, že každá deklarace elementu vymezuje tři základní části. Je to počáteční značka, koncová značka a obsah. Některé elementy v HTML dovolují vynechat počáteční značku, a některé dokonce i koncovou. V tomto ohledu je HTML syntaxe postavená nad SGML velice volná. Některé elementy nemají obsah. Jde o elementy, u kterých by obsah neměl žádný význam. Příkladem je element <br>, který slouží pro označení zalomení řádky. Všechna tato pravidla jsou vyjádřena v DTD definici. SGML definuje i další pravidla pro elementy, například pravidla týkající se jejich vzájemného vnořování. Dále platí, že koncová značka ukončuje i všechny neukončené elementy až zpět k počáteční značce.

Příklad 1.1. Příklad nepovoleného vnořování elementů

<a> text <p> text </a> text </p>

Počáteční značka může obsahovat více atributů, které se zapisují za jménem elementu. Atributy se mohou vyskytovat v libovolném pořadí a mohou (nebo nemusí) mít nějakou hodnotu. Ovšem typicky platí, že atribut je dvojice jméno-hodnota. Hodnotu je možné uzavřít ve dvojici dvojitých, nebo jednoduchých uvozovek. Pokud obsahuje jen alfanumerické znaky a některá interpunkční znaménka, není ji nezbytně nutné takto ohraničovat. Dále platí, že na velikosti písmen ve jménech atributů ani elementů nezáleží.

Příklad 1.2. Příklad zápisu elementu s atributy

<a href="http://www.firmaxy.cz">
  <img src="/images/logo_xy.gif" width=150 height=55 alt="Logo firmy XY">
</a>

Některé znaky, které může být žádoucí zobrazovat v HTML dokumentu, mají specifický význam v rámci HTML/SGML. Abychom se vyhnuli konfliktům, je možné takové znaky vyjádřit jako numerickou, nebo symbolickou zkratku uvozenou znakem „&“ a ukončenou znakem „;“. Takovému vyjádření se říká znaková entita. Například &lt; representuje znak „<“ a podobně. HTML definuje množinu znakových entit, které je možné používat v dokumentech. Kromě entit, které představují lidsky srozumitelnější možnost vkládání znaků, lze libovolný znak ze znakové sady používané dokumentem vyjádřit za pomoci číselné pozice tohoto znaku v této znakové sadě.

Krom běžných značek lze do dokumentů vkládat i komentáře viz. následující ukázka.

Příklad 1.3. Komentáře v HTML

<p>
  text
  <!-- komentář -->
</p>

Komentáře nemají mít žádný vliv na výsledné zobrazení. Po vykřičníku musí neprodleně následovat dvě pomlčky. Není zde povoleno žádné volné místo. Naopak po obou ukončovacích pomlčkách volné místo povoleno je. Uvnitř textu komentáře se nesmí vyskytovat další dvě a více pomlček za sebou.

Omezení deklarovaná v DTD

Elementy a atributy

Každý element jazyka HTML je společně se svými atributy deklarován v DTD. Tam je také popsáno jaké subelementy může daný element obsahovat. Pro tyto subelementy je možné vyznačit jednoduchá pravidla výskytu:

  • element je povinný a vyskytuje se právě jednou,

  • element je povinný a vyskytuje se jednou, nebo vícekrát

  • element se vyskytuje jednou, nebo vůbec,

  • element se vyskytuje jednou, vícekrát, nebo vůbec,

  • element se může vyskytnout,

  • element se nesmí vyskytnout,

  • dva elementy se nesmějí vyskytovat vzájemně,

  • oba elementy jsou povinné v předepsaném pořadí,

  • oba elementy jsou povinné, ovšem mohou se vyskytovat v libovolném pořadí.

Ke každému elementu je možné přiřadit definice jeho atributů. Každý atribut je specifikován svým jménem, datovým typem nebo případně výčtem možných hodnot (enumerací). Navíc je nutné určit, zda je tento atribut povinný, nebo nepovinný. V případě vynechání nepovinného atributu přiřazuje klientská aplikace takovému atributu implicitní hodnotu. Atributy mohou mít i pevně definované hodnoty.

V DTD je možné vymezit i booleovské atributy. Jejich jediná možná hodnota odpovídá názvu atributu. Takové atributy lze potom v HTML zapisovat v jejich zkrácené formě. Stačí napsat pouze samotný název bez hodnoty. Pokud se booleovský atribut v elementu vyskytuje, je mu přiřazena hodnota „pravda“ (a naopak).

Struktura dokumentu

Každý validní HTML dokument se musí skládat alespoň ze tří částí. Jedná se o řádek s informací o verzi jazyka, deklarativní hlavičku a tělo dokumentu. Informace o verzi jazyka zahrnuje i odkaz na DTD, vůči kterému lze dokument validovat. Hlavička slouží k vyjádření dodatečných informací o dokumentu. Jedná se v podstatě o metadata. Typickým příkladem informací, které se mohou vyskytovat v hlavičce, je jméno autora dokumentu, klíčová slova pro využití indexovacími službami, ekvivalenty parametrů HTTP hlaviček pro využití webovými servery a podobně.

V těle dokumentu se pak nalézá samotný obsah. Ten může být různým způsobem reprezentován jednotlivými prohlížeči, ať už jde o grafické, textové nebo jiné prohlížeče. V těle dokumentu se v zásadě mohou vyskytovat dva různé druhy elementů. Jde o elementy blokové (block-level), nebo řádkové (inline). Tyto dva modely vystihují dva základní typy chování elementů v rámci těla dokumentu. V zásadě platí, že blokové elementy mohou obsahovat buď další blokové elementy, nebo řádkové elementy, zatímco řádkové elementy mohou obsahovat pouze text, nebo jiné řádkové elementy. Odlišnosti najdeme i v jejich formátování. Zatímco výskyt blokového elementu sám o sobě determinuje nový řádek, řádkové elementy tuto vlastnost nemají (pokud není jejich klasické chování přepsáno ve stylové definici).

Z důvodů podpory světových jazyků je důležité, aby HTML dokumenty uměly zobrazovat text i zprava doleva. V tomto případě dochází k odlišnému chování blokových a řádkových elementů.

Omezení obsahu blokových a řádkových elementů je plně deklarováno v DTD. Některé elementy obsahují navíc další restrikce. DTD tak v některých případech neumožňuje blokovým elementům obsahovat některé další blokové či řádkové elementy a řádkovým elementům některé jiné řádkové. Takováto pravidla je možné plně postihnout v DTD pomocí hierarchických množin elementů, které lze v definicích libovolně skládat a kombinovat.

Klasickým představitelem blokového elementu je element <div> a řádkového <span>. Tyto elementy tvoří v kombinaci se stylovými definicemi obecný mechanizmus přidávání struktur do HTML dokumentů. Jejich jedinou vlastností je to, že dodržují blokový, nebo řádkový model. Všechny další (hlavně prezentační) vlastnosti mohou být volně definovány ve stylových definicích. Ty je pak možné jednoduše měnit (například vytvořit více verzí), což přináší značnou flexibilitu v prezentační rovině dokumentu.

Strict, Transitional, Frameset

Specifikace HTML 4.01 definuje jazyk ve třech mutacích a pro každou z nich existuje samostatná DTD definice. Jejich vzájemný vztah přibližuje obrázek 1.2 – „Vztah mutací jazyka HTML“. Tento vztah neplatí úplně do důsledku, ale s trochou tolerance můžeme říci, že se v podstatě jedná o podmnožiny. Nejmenší množina se nazývá strict. Vymezuje HTML tak, jak jej jeho tvůrci skutečně zamýšleli. Oproti dřívějším verzím jazyka odpadla celá řada konstruktů, hlavně v důsledku oddělení většiny prezentačních informací, které se z praktických důvodů staly součástí stylových definic. Tato verze zahrnuje také nejvíce omezení a klade největší nároky na autory, kteří jsou zvyklí používat některé konstrukty z předešlých verzí jazyka. Tyto konstrukty pak většinou obsahuje množina s názvem transitional. Ta umožňuje autorům plynulý přechod k HTML 4.01, protože z důvodu kompatibility některé konstrukty zachovává. Ty jsou ovšem často označeny jako depricated. Takovým elementům budeme dále říkat potlačené. Potlačené elementy není doporučeno v nových dokumentech používat. Poslední množina zvaná frameset obsahuje navíc podporu rámů, které umožňují zobrazovat více HTML segmentů v rámci jednoho dokumentu.

Obrázek 1.2. Vztah mutací jazyka HTML

Vztah mutací jazyka HTML

Hlavní důraz je kladen právě na dodržování syntaxe v rámci množiny strict. Ta má zaručit správné oddělení prezentační vrstvy od zbytku dokumentu. To přináší řadu výhod. Například možnost jednoduché změny vzhledu dokumentu bez zásahu do jeho zdroje. Děje se tak pouze v důsledku změny stylové definice.

Datové typy

V DTD definicích jazyka HTML je možné používat pouze primitivní datové typy vycházející ze SGML. Následující seznam ukazuje nejdůležitější z nich.

Vybrané datové typy jazyka SGML používané v DTD definicích jazyka HTML

PCDATA

Parsed Character Data – V DTD definici jazyka HTML se takto označují elementy, které obsahují čistý text (čili posloupnost znaků). Pokud jsou navíc deklarovány nějaké subelementy, mohou být míchány s tímto textem.

CDATA

Character Data – V HTML se takto označují hlavně atributy obsahující dále neomezený text (posloupnost znaků). Případné značky obsažené v atributech s tímto datovým typem nejsou nijak dále interpretovány. Ovšem znakové entity jsou nahrazeny příslušnými znaky. Konce řádek a tabulátory jsou nahrazeny mezerou.

MNTOKEN

Atribut typu MNTOKEN může obsahovat libovolná písmena, číslice nebo speciální znaky. Jde například o pomlčku, podtržení, dvojtečku a nebo tečku.

NAME

Hodnota omezená tímto datovým typem musí splňovat omezení kladená na datový typ MNTOKEN, navíc musí začínat malým, nebo velkým písmenem.

ID

Musí splňovat stejná omezení jako datový typ NAME, ovšem navíc lze na takovýto identifikátor odkazovat pomocí dalšího datového typu IDREF. Proto musí platit, že hodnota atributu s datovým typem ID musí být jedinečná v rámci celého dokumentu.

NUMBER

Sekvence číslic, která obsahuje minimálně jednu číslici.

Relativně expresivní je datový typ definovaný výčtem možných hodnot (enumerace). Hodnota atributu je tedy omezena na některou z deklarovaných hodnot.

Další omezení nad rámec DTD

Ne všechna omezení je možné zachytit v DTD. Některá z nich jsou pouze slovně vyjádřena v textu specifikace. V zásadě existují dva stupně volnosti dodržování těchto omezení. Specifická klíčová slova vyjadřují, zda je popisované omezení závazné a nebo zda jde pouze o doporučení, jehož nedodržení může sice působit komplikace, ale neznamená nutně nesoulad se standardem. Taková klíčová slova a jejich významy vymezuje [RFC2119].

Datové typy

Důležitou oblastí, kde se rozchází text specifikace a definice v rámci DTD, jsou datové typy viz. sekce „Datové typy“. Je to dáno hlavně vyjadřovací silou jazyka DTD. Ten umožňuje přiřazovat elementům a atributům pouze jednoduché datové typy ze SGML a enumerace. Další omezení kladená na jazyk HTML je možné vyjádřit pouze slovně v textu specifikace. Tím je v podstatě znemožněna automatická kontrola dodržování těchto omezení.

Například atributy typu „univerzální identifikátory zdrojů“ (URIuniform resource identifier), které slouží k identifikaci různých externích zdrojů v rámci různých druhů odkazů v dokumentu, mají přesnou syntaxi viz. [RFC2396]. DTD ovšem jejich formát dále nevymezuje. Umožňuje zadat libovolný text splňující omezení kladená na datový typ CDATA.

V mutacích trasitional a frameset se občas vyskytuje atribut popisující barvu některého z elementů. Mutace strict již počítá s tím, že takováto informace je čistě prezentační, a jako taková bude tedy zanesena ve stylové definici. Zatímco DTD popisuje tyto atributy jako CDATA, specifikace jasně definuje povolené hodnoty. Barva může být vyjádřena třemi hexadecimálními čísly (00 až FF, čili celkem 6 znaků) určujícími podíl červené, zelené a modré (RGB). Těmto číslům předchází znak „#“. Dále je možné jako hodnotu atributu zapsat jméno barvy. Pod jménem je rozeznáváno 16 základních barev (Black, Silver, Aqua ...).

Dalším datovým typem používaným v HTML jsou délky. DTD je opět specifikuje pouze jako CDATA. Délka nějakého elementu zobrazovaného v rámci HTML dokumentu může být vyjádřena pomocí procent a nebo v bodech. Délka musí být tedy zapsána jako kladné celé číslo. Pokud je toto číslo navíc zakončeno znakem „%“, pak se jedná o délku v procentech. Některé délky je možné specifikovat i relativně. Pokud máme více elementů, které spolu soupeří o nějaký volný prostor na stránce, může být jejich délka zapsána relativně k tomuto volnému prostoru. Takovou informaci zapisujeme kladným celým číslem následovaným znakem „*“. Pokud zapíšeme pouze znak „*“, automaticky se chápe jako „1*“. Číslo před hvězdičkou udává kolik dílů volného prostoru zaplní element s tímto atributem. Tak jako v předešlých případech i zde platí, že případné chyby v zápisu takových atributů není možné automaticky detekovat pomocí validace oproti DTD.

Pokud chceme do HTML dokumentu vnořit nějaký externí objekt nebo na něj odkazujeme, je potřeba specifikovat typ jeho obsahu. Toho je docíleno atributem, který obsahuje tzv. MIME (Multipurpose Internet Mail Extention) typ. Takový typ by měl odpovídat některému z typů registrovaných a spravovaných organizací IANA. Jméno typu se skládá z jména příslušného média odděleného lomítkem od jména formátu, ve kterém je toto médium uloženo.

Ukázka některých často používaných typů obsahu

text/html

HTML dokument.

image/png

Obrázek ve formátu PNG.

text/css

Kaskádové styly.

Dalším druhem informace, která se vyskytuje v atributech elementů jazyka HTML, je informace o kódování znaků. Ta je vyjádřena jako jméno příslušné kódové tabulky. Tato jména jsou spravována v registru organizace IANA.

Podobně fungují i atributy popisující přirozený jazyk použitý pro obsah určitého elementu nebo jazyk, ve kterém je psán celý dokument. Takový atribut potom obsahuje příslušný kód přirozeného jazyka. Doporučení [RFC3066] se zabývá kódy jazyků, které je možné používat v rámci HTML dokumentů. V zásadě se kód jazyka skládá z povinného primárního kódu a libovolného množství nepovinných sekundárních kódů oddělených vzájemně pomlčkou. Primární kódy jsou rezervované pro zkratky jazyků podle [ISO639]. Každý sekundární kód je chápán jako kód země podle [ISO3166].

Zajímavým prvkem HTML jsou přístupové klávesy, které umožňují přímou aktivaci některých prvků dokumentu pomocí klávesnice. Takto lze označit elementy, jako jsou různé formulářové prvky a nebo odkazy. Hodnotou takového atributu je jeden libovolný znak, který odpovídá příslušné aktivační klávese. Další možností je specifikovat tuto hodnotu jako znakovou entitu. DTD definuje pro tyto atributy datový typ CDATA.

Pro některé elementy HTML je možné specifikovat datum a čas. Jedná se o elementy <ins> a <del>, které umožňují zachovávat přehled o změnách při revizích dokumentů. Každá zachycená změna tak může obsahovat informaci o datu a čase, kdy k této změně došlo. Takováto časová informace musí být zapsána v následujícím formátu:

YYYY-MM-DDThh:mm:ssTZD

YYYY

Rok zapsaný čtyřmi číslicemi.

MM

Dvouciferné pořadové číslo měsíce v roce, čili 01 odpovídá měsíci lednu a podobně.

DD

Dvouciferné pořadové číslo dne v měsíci.

hh

Dvouciferné označení hodiny.

mm

Dvouciferné označení minuty.

ss

Dvouciferné označení sekundy.

TZD

Určení časové zóny. Například velké „Z“ označuje UTC Coordinated Universal Time. „+hh:mm“ specifikuje o kolik je lokální čas před časem UTC a „-hh:mm“ naopak o kolik je za ním.

Tento formát je (kromě jiných) popsán v [ISO8601]. Tato struktura časové značky je definována pouze v textu specifikace. V DTD se jedná o typ CDATA.

Pro odkazy v dokumentech lze specifikovat o jaký typ odkazu se jedná. Tuto informaci potom mohou využívat prohlížeče nebo indexující algoritmy vyhledávacích služeb. Takovéto informace lze vyjádřit v atributech jako seznam jednotlivých typů oddělených mezerami. Kompletní seznam možných typů je vyjádřen v textu specifikace.

Některé vybrané typy odkazů definovaných v HTML dokumentech

Alternate

Alternativní verze dokumentu. Může jít například o verzi přeloženou do jiného jazyka nebo verzi v jiném formátu než je HTML.

Stylesheet

Odkazuje na stylovou definici. V kombinaci s typem Alternate ukazuje alterativní styl dokumentu, který může být vybrán uživatelem.

Start

Ukazuje na první dokument v kolekci dokumentů.

Next

Ukazuje na další dokument z lineární sekvence dokumentů.

Prev

Ukazuje na předchozí dokument z lineární sekvence dokumentů.

Contents

Ukazuje na dokument sloužící jako obsah.

Autoři dokumentů mohou definovat i další typy odkazů nad rámec těch typů, které jsou vyjmenované ve specifikaci. Hodnotu takových atributů nelze tedy omezit výčtem.

Odkazy v HTML dokumentech mohou obsahovat atribut definující média, pro která je tento odkaz určen. Tímto způsobem se dá například přiřadit dokumentu různý styl podle toho, je-li například určen k tisku a nebo se bude zobrazovat na obrazovce. HTML explicitně definuje seznam klíčových slov, které lze použít pro definici vhodnosti pro dané médium. V atributech je potom vhodnost vyjádřena jako seznam těchto klíčových slov oddělených čárkou. Povolené názvy médií jsou následující.

screen

Neodstránkovaná počítačová obrazovka.

tty

Médium s neproporcionálními znaky. Jde například o terminál.

tv

Médium podobné televizi. Má nízké rozlišení a limitovaný posun stránek.

projection

Projektory.

handheld

Kapesní počítače.

print

Odstránkované dokumenty určené k tisku.

braille

Dokument je čten pomocí zařízení, které interaguje s uživatelem pomocí Braillova písma.

aural

Dokument je čten zařízením syntetizujícím lidskou řeč.

all

Dokument je vhodný pro všechny typy médií.

DTD definuje pro takovéto atributy datový typ CDATA. I když je množina povolených označení médií pevně dána, specifikace nezakazuje do atributu zapisovat i jiné hodnoty, které nejsou definovány. Obsahuje-li atribut nějaký název média, který není definován ve specifikaci, má být prohlížečem ignorován. Pokud název média obsahuje nějaké jiné znaky než písmena, čísla nebo pomlčku, je zbytek názvu ignorován. Takže například „handheld with resolution 320x320“ má být interpretováno jako médium „handheld“.

V dokumentech, kde používáme rámy, je možné pro odkazy specifikovat, v jakém rámu se má odkazovaný dokument zobrazit. Jména takových rámů mohou obsahovat pouze písmena. To se ovšem netýká několika rezervovaných jmen, které mají specifický význam.

_blank

Odkaz se otevře v novém okně.

_self

Odkaz se otevře ve stejném rámu.

_parent

Odkaz se otevře v přímém předkovi aktuálního rámu.

_top

Zruší se rámová struktura a odkaz se otevře v aktuálním okně.

Hlavička dokumentu

V hlavičce HTML dokumentů je zajímavý element <title>. Tento element je povinný. Specifikace jasně vyzývá autory dokumentů, aby kvůli dostupnosti používali titulky, které budou popisovat co nejpřesněji obsah těchto dokumentů. V tomto případě se jedná o příklad omezení, které nebude možné kontrolovat automatizovaně ani s využitím expresivnějších validačních jazyků než je DTD. Specifikace totiž v tomto případě neposkytuje exaktnější definici vhodnosti příslušného titulku.

Tělo dokumentu

Elementy obsažené v těle dokumentu mají určitou společnou skupinu atributů. Mezi tyto atributy patří i atribut class. Ten definuje společnou třídu několika elementů v dokumentu. Pokud je takových tříd více, jsou jejich jména oddělena mezerou. Takovým třídám může být později přiřazen specifický způsob prezentace v rámci stylové definice. DTD definuje tento atribut jako CDATA.

Text

V části věnované textu se specifikace zabývá pravidly pro zobrazování a zápis mezer. Autoři dokumentů by neměli spoléhat na prohlížeče, že zobrazí mezeru, která je zapsána bezprostředně po počáteční značce, nebo bezprostředně před značkou koncovou. Proto je důležité, aby autoři pro vnořené řádkové elementy raději psali mezery mezi slovy vně těchto elementů (nikoli uvnitř). Takovéto mezery by nemusely být zobrazeny. Tento požadavek nelze zachytit v DTD.

Autoři dokumentů jsou odrazováni od toho, aby využívali prázdných elementů <p>. Elementy <p> slouží k definici odstavce textu. V tomto případě se nejedná o striktně vyžadované omezení, jde pouze o doporučení.

Element <q> označuje řádkové citace v textu dokumentu. Vizuální prohlížeče by měly označit takový text příslušným citačním znaménkem podle toho, jaký přirozený jazyk je aktuálně používán. Z tohoto důvodu je potřeba, aby se autoři zdrželi označování textu vlastními citačními znaménky, které by se tak objevovaly duplicitně. Toto omezení není formalizováno v DTD.

Elementy <ins> a <del> slouží k uchování historie změn provedených v HTML dokumentech. Zajímavostí těchto elementů je, že nejsou jednoznačně vymezeny. Podle místa jejich použití se chovají jako blokové, nebo jako řádkové elementy. To je ovšem v rozporu s DTD. Podle něj mohou tyto elementy vždy obsahovat jak blokové, tak i řádkové prvky. Následující příklad tedy bezchybně projde validací vůči DTD, ale specifikace takové použití zakazuje.

Příklad 1.4. Ukázka komentářů

<p>
  text ... <ins> <div> ...obsah blokového elementu... </div> </ins> ... text
</p>

Oblast specifikace zabývající se textem obsahuje ještě mnoho dalších omezení. Ta jsou však převážně adresována autorům HTML prohlížečů a zabývají se způsobem zobrazení textu v HTML dokumentech. Tato omezení jsou nad rámec této práce.

Seznamy

Pro seznamy je typické, že obsahují řadu potlačených atributů. Ty není doporučeno nadále používat. Týkají se prezentace seznamů a jejich místo je tedy ve stylové definici. Specifikace pro seznamy neuvádí žádná dodatečná omezení, která by nebyla podchycena v DTD.

Tabulky

Tabulky obecně umožňují řadit data do řádků a sloupců. Specifikace nám radí, abychom nepoužívali tabulky k definici rozvržení stránek. K tomuto účelu by měla sloužit stylová definice. Tabulka by skutečně měla sloužit pouze pro reprezentaci tabulkových dat.

HTML specifikace doporučuje autorům, aby vytvářeli vystihující shrnutí obsahu tabulek. Tato shrnutí by měla pomoci uživatelům nevizuálních prohlížečů k lepšímu pochopení obsahu tabulek. To platí zvláště pro tabulky bez specifikovaného titulku.

Zajímavé je, že autoři dokumentů mohou správným zápisem tabulek v HTML pomoci zefektivnit jejich zobrazování pomocí prohlížečů. Například vyžadované umístění zápisu patičky tabulky před vlastním obsahem těla tabulky a nebo pevné vymezení počtu řádek a sloupců umožňuje prohlížečům vygenerovat tabulku najednou a pak ji jen postupně doplňovat daty. Prohlížeče takto tedy nemusí čekat s vykreslováním až na kompletní načtení všech dat týkajících se příslušné tabulky. Mohou tabulku vykreslovat postupně a umožnit uživatelům co nejrychlejší přístup k datům. Tento princip se nazývá inkrementální vykreslování.

Inkrementální vykreslování tabulek je obtížné i v případě, že definujeme velikost sloupců proporcionálně vzhledem k šířce tabulky a tabulka nemá pevně danou velikost. Stejně problematická je i situace, pokud autor nespecifikuje šířku sloupce vůbec. Řešení tohoto problému je však možné i na straně prohlížečů (hlavně grafických). Ty mohou při inkrementálním vykreslování jednotlivé sloupce postupně roztahovat podle potřeby.

Specifikace exaktně definuje, jakým způsobem mají prohlížeče stanovovat počet sloupců v tabulkách. V zásadě existují dva přístupy. Pokud autor HTML dokumentu definuje explicitně sloupce a skupiny sloupců, je možné určit tento počet z nich. V opačném případě je celkový počet sloupců určen jejich maximálním počtem v řádce. Podstatné je, že je považováno za chybu, pokud si v případě definování sloupců obě zmíněná čísla neodpovídají. Tento požadavek není zachycen v DTD.

Atribut označující šířku jednotlivých sloupců a skupin sloupců tabulek může (oproti klasickým atributům označujícím šířku) obsahovat i zápis „0*“. Takový zápis by za normálních okolností znamenal vyčlenění prostoru nulové šířky. Prohlížeče ovšem zobrazí takovéto sloupce s minimální šířkou tak, aby se do nich vešel celý jejich obsah. V této chvíli je nutné podotknout, že přiřazení takovéto hodnoty tomuto atributu může znemožnit prohlížečům zobrazovat tabulku inkrementálně. Je to dáno tím, že minimální šířku pro udržení obsahu je možné zjistit až po přečtení všech položek ve sloupci.

Přestože atribut určující šířku tabulek není potlačen, specifikace nedoporučuje jeho používání. Šířka i ostatní prezentační informace mají své místo ve stylové definici.

Za chybu se považuje i definování překrývajících se buněk. Toho je možné dosáhnout například s použitím atributů rowspan a colspan. Ten určuje roztažení určité buňky tabulky přes více buněk. Mohou se tak navzájem křížit buňky roztažené přes více sloupců s těmi roztaženými přes více řádek.

Odkazy

Odkazy jsou v podstatě spojením jednoho webového zdroje s jiným. Pomocí odkazů spolu můžeme asociovat různé zdroje různých typů.

Pomocí mechanizmů souvisejících s odkazy je možné označit nějaké místo v dokumentu, ke kterému se chceme v rámci stejného dokumentu odkazovat. Takové místo označujeme jako zakotvení. Jméno takového místa musí být podle specifikace unikátní v rámci celého dokumentu, a to nezávisle na malých a velkých písmenech ve jméně. Tento požadavek není zachycen v DTD. Zde se jedná o datový typ CDATA. Také platí, že autoři by měli chápat odkazy na taková místa v dokumentech jako citlivá na velikost písmen, aby se vyvarovali případných komplikací při použití některých prohlížečů.

Pokud autoři dokumentů odkazují na cizojazyčný zdroj, je pro lepší zacházení s takovým zdrojem ze strany prohlížečů možné specifikovat přirozený jazyk, ve kterém je tento zdroj napsán. Tento atribut je možné použít pouze v případě, že je nastaven i jiný atribut odkazu, který specifikuje to, na jaký zdroj vlastně odkaz ukazuje. Tento podmíněný výskyt atributu je za hranicemi vyjadřovací schopnosti DTD.

Zakotvení může být v dokumentech definováno na libovolném elementu pomocí atributu id. Na některých elementech, jako je třeba <a>, lze zakotvení definovat i pomocí atributu name. Pro oba tyto atributy platí, že sdílejí stejný jmenný prostor a musí být tedy společně unikátní v rámci dokumentu.

Elementy, které mohou obsahovat atribut name, mohou obsahovat zároveň i atribut id, ovšem jejich hodnota musí být stejná. Tento požadavek nelze postihnout v DTD.

Vkládané objekty a obrázkové mapy

Tato část se bude zabývat elementy umožňujícími vkládat prvky multimediálního rázu do HTML dokumentů. V dřívějších verzích HTML se používal element <img> pro vkládání obrázků a element <applet> pro vkládání java-appletů (specifických aplikací běžících na klientské straně). Element <applet> byl nyní potlačen ve prospěch obecnějšího elementu <object>, kterým je možné vkládat kromě obou zmíněných médií i celou řadu jiných objektů.

V zásadě se dá říci, že nároky kladené specifikací na vkládané objekty je možné automaticky validovat pomocí DTD. Výjimkou je snad jen atribut archive. Ten vyžaduje seznam URI identifikátorů, zatímco jeho datový typ v DTD je omezen pouze na CDATA.

V HTML dokumentech je možné definovat mapy oblastí (typicky oblasti obrázku) a přiřazovat jim specifické akce pro případ, že je příslušný region aktivován uživatelem. HTML rozeznává dva druhy takovýchto obrázkových map. První je mapa na straně klienta. Při použití této mapy jsou souřadnice aktivované uživatelem předány prohlížeči, který na základě nich vybere příslušný odkaz. V případě map na straně serveru jsou souřadnice posílány serverovému agentovi, jehož umístění je specifikováno jedním z atributů takové mapy. Způsob interpretace souřadnic je pak dán implementací tohoto agenta.

Pro obrázkovou mapu definuje specifikace zajímavé omezení, které je třeba zmínit. Pokud definujeme souřadnice některého z regionů mapy, formát těchto souřadnic se liší podle toho, jaký tvar oblasti specifikujeme v atributu shape. Například pro kružnici zadáváme souřadnice středu a poloměr. Polygon naopak vyžaduje sérii dvojic souřadnic, kde poslední dvojice odpovídá souřadnicím dvojice první. Tím je dosaženo řádného uzavření polygonu. Ovšem odpovědnost za uzavření polygonu leží na bedrech prohlížečů. Takováto omezení nelze specifikovat v DTD.

Pro obrázkové mapy i pro vkládané objekty jsou důležité alternativní popisy. Ty zlepšují dostupnost pro uživatele nevizuálních prohlížečů. Ovšem obecně platí, že pokud není možné obsah nějakého objektu zobrazit, může alternativní popis výrazně zlepšit orientaci v dokumentu. Proto jsou tyto popisy většinou povinné a specifikace navíc ukládá autorům následující doporučení pro jejich používání. V některých případech je lepší vyplnit jako alternativní popisek pouze prázdný řetězec. Například v případech, kdy obrázek slouží pouze jako určitý dekorativní prvek bez dalšího významu. Alternativní popis by tedy vždy měl přinášet nějakou smysluplnou informaci. Popis typu „bla bla“ nebo „bezvýznamný obrázek“ by mohl být matoucí pro uživatele nevizuálních prohlížečů.

Styly

HTML dokumenty mohou obsahovat stylové informace přímo v sobě. Lze je zapsat v některém ze stylových jazyků, jako je například kaskádový styl (CSS). Mohou také odkazovat na styly externí. Druhý zmíněný způsob přináší jistě větší flexibilitu, neboť umožňuje dynamicky měnit styl dokumentu, aniž bychom museli do dokumentu zasahovat. Navíc je možné sdílet určitý styl mezi více dokumenty.

V prvním případě ovšem specifikace vyžaduje, aby autoři určili použitý stylový jazyk. Pokud se v dokumentu vyskytuje alespoň jeden atribut style, který umožňuje zapsat vnitřní stylovou definici pro daný element, je nutné nastavit použitý stylový jazyk v deklarativní hlavičce, a nebo je nutné, aby tuto informaci poskytoval webový server v HTTP hlavičce. Dokument, který tuto informaci neposkytuje, je chybný. To platí i přesto, že prohlížeče by měly implicitně předpokládat stylový jazyk CSS (kaskádový styl).

Vizuální formátování

Většina elementů a atributů, která byla dříve užívána k vizuálnímu formátování obsahu HTML dokumentů, byla nyní potlačena ve prospěch stylů. I přesto bude dobré zmínit některá omezení, která na ně klade specifikace a která není možné automaticky validovat s využitím DTD. Takové je například i omezení týkající se atributu určujícího velikost písma.

Tuto velikost je možné specifikovat relativně, nebo absolutně. V druhém případě označuje symbol „+“ a „-“ to, zda se má velikost písma zvětšit či zmenšit o hodnotu za tímto symbolem. Výsledné velikosti ovšem vždy náleží do intervalu 1 až 7. Relativní změna velikosti se váže k základní velikosti písma, která je definována pro celý dokument. Pokud tato hodnota není autorem explicitně nastavena, automaticky se předpokládá hodnota 3.

Formuláře a ovládací prvky

Formuláře přinášejí HTML dokumentům možnost interakce s uživatelem. Formuláře mohou kromě jiného obsahovat i ovládací prvky. Těmi jsou různá textová pole, výběry, tlačítka a další. Takto je možné implementovat určitý druh uživatelského rozhraní přímo v HTML dokumentech.

Základním elementem pro definici ovládacích prvků je element <input>. Ten může definovat více typů různých ovládacích prvků. Specifikace explicitně vyžaduje (na rozdíl od DTD), aby byla v případě prvků typu checkbox a radio povinně specifikována jejich hodnota. Pro ostatní typy ovládacích prvků je tato hodnota dobrovolná. Existují ještě další pravidla, kde výskyt některých atributů elementu <input> závisí na zvoleném typu ovládacího prvku. Ovšem specifikace nezakazuje přímo autorům tyto atributy v takovém případě použít, ale naopak nařizuje HTML prohlížečům tyto atributy ignorovat.

Tlačítka lze kromě elementu <input>, definovat i pomocí elementu <button>. Ten přináší další možnosti, a to hlavně možnost vkládat do takového tlačítka další HTML obsah. Například obrázky s textem a podobně. Ne všechny elementy uvnitř takového tlačítka jsou povolené. Jejich vymezení je definováno v DTD. Ovšem jedno pravidlo v DTD podchyceno není. Pokud tlačítko obsahuje nějaký obrázek, tak tento obrázek nesmí být asociován s žádnou obrázkovou mapou.

Element <select> specifikuje výběr z určitého seznamu možností. Každá možnost může být definována jako implicitně vybraná. Jelikož není jasně specifikováno, jakým způsobem se prohlížeče mají chovat, pokud není žádný prvek implicitně vybrán, specifikace doporučuje (nepřikazuje) autorům označit alespoň jednu možnost jako výchozí. Chybou ovšem je, pokud je v seznamech bez možnosti mnohonásobného výběru označeno více prvků jako vybrané.

Zajímavou problematikou je navigace mezi jednotlivými ovládacími prvky ve formulářích. Jednou z možností, jak lze aktivovat některý prvek, je klávesa „tabulátor“. Pořadí aktivace jednotlivých prvků při opětovném stisku této klávesy závisí na atributu tabindex. Specifikace jasně deklaruje, že hodnota tohoto atributu musí být z intervalu 0 až 32767. Toto omezení není zachyceno v DTD.

Skriptování umožňuje dynamický přístup k objektovému modelu HTML dokumentů a v některých případech i dynamické generování obsahu dokumentů. Skripty mohou být volány při načtení dokumentu a nebo při nějaké specifické události, jako je například stisknutí tlačítka. HTML je samo o sobě nezávislé na použitém skriptovacím jazyce. Jeho podpora je dána konkrétním prohlížečem. Pokud je v dokumentu použito skriptování v závislosti na události, je nutné, aby autoři specifikovali implicitní skriptovací jazyk pro daný dokument v jeho hlavičce. Tuto informaci může poskytovat i webový server v HTTP hlavičce. Pokud ovšem tato informace není dostupná v některé z těchto forem, jedná se o chybný dokument.

XHTML 1.0

Specifikace XHTML 1.0 je v podstatě přepracováním HTML 4.01 tak, aby splňovala omezení kladená na jazyk XML (Extensible Markup Language). XHTML je tedy aplikací XML. Množina elementů a atributů je plně poděděna z HTML 4.01. Kromě omezení, která vznikla z důvodu dodržování přísnější syntaxe jazyka XML, definuje specifikace ještě několik doporučených postupů, které mají zajistit zpětnou kompatibilitu XHTML dokumentů s HTML prohlížeči.

Přechod na XML zajišťuje jazyku HTML nemalé výhody. Autoři dokumentů i prohlížečů mohou k editaci i zpracování XHTML dokumentů využívat velkou