Autor Zpráva
Miloš
Profil
Vím, že originální validátor zařve při chybějícím !DOCTYPE.
Zarazilo mě, že to vadí i validátoru českému.
Poslal jsem mu následující kód:
<title>nesmysl</title>
ahoj

a dozvěděl se, že Vložený kód není validní (chybí deklarace).

Zajímalo by mě tedy, co to znamená, že je dokument validní.
Musí obsahovat !DOCTYPE, aby byl validní?
Je opravdu !DOCTYPE nutnou součástí HTML kódu?
Chamurappi
Profil
Reaguji na Miloše:
Nejsem si tím jistý. Proto se v tomto nepouštím do sporu s oficiálním validátorem.

Vztah XHTML ke XML není úplně stejný, jako HTML k SGML. Syntaxi HTML určuje tzv. SGML deklarace, která se do dokumentů běžně nepíše. HTML i XML lze považovat za podmnožinu SGML lišící se pouze v SGML deklaraci. Krom toho standard SGML definuje určitou výchozí syntaxi, která je podobná HTML, ale není úplně stejná (jsou přidány hexadecimální znakové entity), tudíž kdyby měl obecný SGML parser načítat HTML stránku, mohl by selhat. HTML i XML jsou podmnožinou SGML, HTML 4 je podmnožina HTML a XHTML 1 je podmnožina XML.

Pokud je dovolené přimýšlet si podle okolností (tedy MIME typu) výchozí SGML deklaraci, je možné, že není chybou přimyslet si ani <!doctype>. Nevím, jak přesně SGML definuje validitu. Nevím, jestli se vůbec smí při absenci <!doctypu> dosadit nějaký svůj, jako to dělá i oficiální validátor.

Přemýšlel jsem, že bych z té chybové hlášky udělal jen varování. Stále o tom přemýšlím.
Jirka Kosek
Profil *
Obecně je možné si DOCTYPE domyslet v případě, kdy je to v SGML deklaraci povolené pomocí FEATURES IMPLYDEF DOCTYPE YES. Standardní SGML deklarace pro HTML4 však toto nenastavuje.
Chamurappi
Profil
Reaguji na Jirku Koska:
Což by šlo asi vysvětlit tím, že „IMPLYDEF“ doplnil až Annex K, jehož existenci SGML deklarace pro HTML 4.01 patrně nijak nezohledňuje. Až na použití HCRO*.
Mimochodem, v SGML je dovoleno vynechávat SGML deklaraci?

Podle Jamese Clarka je „IMPLYDEF DOCTYPE“ povolené v XML. Z toho jsem usoudil, že tento přepínač nevypovídá o povinnosti deklarace ve vztahu k validaci (doporučení XML 1.0 říká, že validní dokument musí mít <!DOCTYPE>), ale jen o možnosti rozebrat dokument bez deklarace typu dokumentu stejně, jako kdyby tam byla deklarace odpovídající struktuře dokumentu. Tenhle pohled zřejmě podpírá i kniha SGML Explained. Takže v XML není povinný <!DOCTYPE>, dokument bez něj je pořád OK, jen není validní. Je fakt, že by asi bylo divné, kdyby v SGML/HTML dokument bez <!DOCTYPE> nebyl OK, ale zůstával by validní.

Když už tu jste, vyjasnil byste mi, prosím, co přesně v SGML znamená <!DOCTYPE #IMPLIED SYSTEM>?

*) To je docela zvláštní. Ve starších HTML specifikacích nejsou dovolené hexadecimální znakové entity. Jak bez znalosti SGML deklarace určím, zda jsou tyto entity dovolené?
Jirka Kosek
Profil *
Mimochodem, v SGML je dovoleno vynechávat SGML deklaraci?

Nemám teď bohužel po ruce normu, ale myslím, že spíše není. Nicméně SGML deklaraci si může parser odvodit automaticky z SGML katalogu z deklarací SGMLDECL a DTDDECL. Nicméně v praxi existovala kvanta SGML aplikací, které počítaly s jednou konkrétní deklarací, byl to v podstatě takový předstupeň k XML.

..<!DOCTYPE #IMPLIED SYSTEM>?

Za #IMPLIED se automaticky dosadí jméno kořenového elementu, takže ho není nutné uvádět.

Jak bez znalosti SGML deklarace určím, zda jsou tyto entity dovolené?

Bez znalosti SGML deklarace neurčíte v SGML nic ;-D
Jirka Kosek
Profil *
Sakra, proč má každé fórum jinou syntaxi pro formátování komentářů :-(
Prosím čtenáře, aby si při čtení předchozího příspěvku zapnul parser a vykreslovač HTML.
Chamurappi
Profil
Reaguji na Jirku Koska:
proč má každé fórum jinou syntaxi pro formátování komentářů :-(
Příznačné. Každé fórum si domýšlí k formátu příspěvku jinou SGML deklaraci :-)
Naštěstí má tato diskuse hodné moderátory, kteří umí opravovat špatně zobrazované texty. Kdybyste se tu zaregistroval, mohl byste si projev dodatečně doladit sám.

myslím, že spíše není
Takže je HTML dokument bez SGML deklarace chybný? Posunuly HTML specifikace neoprávněně laťku toho, co je vnímáno pod pojmem „validita“? Standard ISO/IEC 15445:2000 prý vyjasňuje vztah mezi SGML a HTML, ale ani ten se o povinnosti SGML deklarace nezmiňuje.

může parser odvodit automaticky z SGML katalogu z deklarací SGMLDECL a DTDDECL
Pokud si může odvodit automaticky SGML deklaraci, nemůže si odvodit i DTD?

U oficiálního validátoru je na konci SGML katalogu uvedená náhradní DTD, která se používá na bezdoctypové dokumenty začínající na <html>. V takovém případě zařve parser dvě chyby:
1) „prolog can't be omitted unless CONCUR NO and LINK EXPLICIT NO and either IMPLYDEF ELEMENT YES or IMPLYDEF DOCTYPE YES“ — tahle hláška je z výjezdu chyb potlačena (asi proto, že je na běžné smrtelníky moc komplikovaná).
2) „no document type declaration; implying "<!DOCTYPE HTML SYSTEM>"“ — tahle hláška motivuje uživatele k doplnění zmíněné deklarace (což asi není dobrý nápad, neboť v ní chybí URL).
Krom toho vyhodí validátor ještě globální varování: „No DOCTYPE found! Attempting validation with HTML 4.01 Transitional.“

Pokud ve svém validátoru nechám za stejné situace jen varování a provedu validaci proti DTD HTML 4.01 Transitional, poruším tím SGML?

Za #IMPLIED se automaticky dosadí jméno kořenového elementu
Aha. Tohle se mi líbí. Představoval jsem si pod tím něco podstatně složitějšího, protože to OpenSP neumí.

Bez znalosti SGML deklarace neurčíte v SGML nic ;-D
Svět je krutý.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0