„V Dodatku C doporučení XHTML 1 se celkem jasně říká, že uvedená pravidla slouží k zajištění zobrazení XHTML dokumentů v existujících HTML prohlížečích.“
V kapitole 1 jsou ovšem dvakrát zmíněné vyhovující HTML prohlížeče. To očividně pravda není.
„Pokud autor ví o dokumentu od W3C, který tvrdí, že XHTML 1.0 při dodržení pravidel kompatibility je syntakticky kompatibilní s HTML 4.01, sem s odkazem.“
RFC 2854 pochází částečně od W3C. Tvrdí: „XHTML 1.0 defines a profile of use of XHTML which is compatible with HTML 4.01“ — poznámka o kompatibilitě se stávajícími prohlížeči tam chybí. Můžete tomu říkat „zavádějící terminologie operující s nepravdivými tvrzeními“.
„… zajímá mne, na základě čeho autor článku dovozuje, že se to nesmí“
Říkám pouze, že takový dokument nebude validní.
„… a že validátor W3C je proto vadný“
1) Oficiální validátor se snaží uhodnout, jaký má užít parser, podle deklarace <!doctype>. Jenže značkovací jazyk musí znát před prvním zakousnutím se do dokumentu, aby vůbec tu deklaraci našel.
2) Veřejný identifikátor v <!doctype> nevypovídá o syntaxi. Normativně jen usnadňuje nalezení DTD, nic víc. Kupříkladu návrh druhého vydání XHTML 1.1 ani FPI nevyžaduje.
3) Pokud validátor při „text/html“ zvolí XML procesor, pak může vidět zcela jinou reprezentaci dat než HTML prohlížeč. Takové chování popírá smysl validace a neopírá se o žádnou autoritativní definici.
„W3C si už navíc pomocí Web SGML Adaptations Annex pojistilo cestičku, jak z toho ven, takže předpokládám, že v nějaké příští HTML specifikaci se objeví EMPTYNRM YES“
Zmíněný Annex K vyšel dva roky před dokončením HTML 4.01. EMPTYNRM je přepínač v SGML deklaraci, která se do HTML dokumentů nepíše, takže minimálně u validátoru by problém částečně přetrval.
„Jednou jsou tam zmíněné vyhovující prohlížeče, jednou existující prohlížeče, je tam odkazován dodatek C, kde je to řečeno dostatečně výmluvně“
Existující a vyhovující se vzájemně nevylučují. Dodatek C počítá pouze s existujícími nevyhovujícími, což ale nikde nepřiznává. Z kontextu to není zřejmé, naopak je v této souvislosti dvakrát užit pojem „vyhovující HTML 4 prohlížeč“. Mysl neposkvrněná znalostí HTML 4 musí po přečtení tohoto doporučení dojít k jednoznačnému (nepravdivému) závěru: XHTML je při dodržení Dodatku C zpětně kompatibilní a HTML prohlížeče ukončující počáteční značku lomítkem jsou chybné.
„Proč? RFC2854 říká, že s mime typem "text/html" můžete dostat jak dokument s HTML syntaxí, tak dokument s XHTML syntaxí“
Ano, RFC 2854 vám dovoluje posílat i nevalidní HTML dokument.
„A jak to chcete prakticky zajistit? Z mime typu to prohlížeč/validátor může zjistit v případě http komunikace.“
Pokud MIME typ mám, syntaxi znám. Pokud ho nemám, hledám jiná vodítka.
„Bude tedy pro stejný kód, který jednou dostane pomocí http, jednou vložením do formuláře, dávat odlišné výsledky?“
Jistěže. Tak to samozřejmě funguje i v oficiálním validátoru. MIME typ má značný vliv na výsledek validace, akorát u „text/html“ je v jednom speciálním případě přebit. Správně by měl mít validátor u přímého vstupu přepínač parserů.
„Stejně tak si může pamatovat, jaká syntaxe odpovídá určitému DTD (byť samotná DTD syntaxi neurčuje).“
Bez znalosti syntaxe deklaraci typu dokumentu nenajde.
„Prakticky jsou dnes jak prohlížeče, tak validátor v situaci, kdy na mime typ mohou těžko spoléhat“
V případě HTML/XHTML se prohlížeče na MIME typ spoléhají stoprocentně a až na ten hack z března 1999 se na něj spoléhá i validátor.
def mojeFunkce(): if neco: delejNeco1() else: delejNeco2()Zadne zbytecne slozene zavorky, zadne kulate zavorky v podminkach, zadne stredniky. Jeste by nemusel mit ty dvojtecky. Vsechny ostatni jazyky maji syntaxi prisernou, protoze predepisuji pouzivat spoustu zbytecnosti. mimochodem cestina je taky blby jazyk ma zbytecna diakriticka znamenka - vsak je mi rozumet i bez nich a bez velkych pismen a interpunkcnich znamenek bychom se taky obesli v naproste vetsine pripadu Tim chci rict, ze nemate pravdu. Nezalezi co gramatika predepisuje, ale jak jsou gramaticka pravidla slozita a kolik maji vyjimek. Kdo neni s to pochopit a naucit se syntaxi XHTML, nedokaze to ani u HTML. Na opak to vsak neplati, je spousta lidi, ktera jednoducha XML pravidla chapou a umi rozpoznat co je spravne a co ne, kdezto u HTML diky spouste vyjimek to rict nedovedou. Jednotnost zapisu cteni rozhodne neztezuje, naopak, dela text prehlednejsi. A myslim ze pro tech par znaku navic ani psani neni slozitejsi, jen je ho nepatrne vic, ale jen teoreticky, protoze vyvojove nastroje, treba editory nam praci zjednodusuji a naopak jednoduchost a jednotnost syntaxe umoznuje editorum a spol. nam praci ulehcovat mnohem lepe. Viz treba syntax hyglighting, ktery je mnohem snazsi implementovat u jednoduche XML syntaxe nez slozite HTML syntaxe.
A stoji tu predevsim otazka, proc bych mel ty sloite a narocne konverze vlastne delat, kdyz prohlizec muze to xml zobrazit primo?Pretože značky v obecnom XML nemajú absolútne žiadnu sémantiku. Sú to obyčajné zátvorky bez akéhokoľvek špeciálneho významu. Ak budeš mať v XML značku trebárs <nadpis>, a naformátuješ si to pomocou css na bold veľkosti 16pt, tak je to niečo úplne iné ako keď v HTML použiješ značku <h1>. V HTML má väčšina značiek sémantický význam, kdežto v obecnom XML nemá žiadna značka žiadny význam.
<br/>
zpracuje tak, že <br/
bude považovat za prázdný tag a >
za přebývající znak (neukončuje žádný tag) který zahodí, od prohlížeče, který nepodporuje NET syntaxi (specifikace jí nevyžaduje) a lomítko uvnitř tagu považuje třeba za neznámý tag, a ignoruje ho? Tedy jinak, než pohledem do zdrojového kódu.
V kapitole 1 jsou ovšem dvakrát zmíněné vyhovující HTML prohlížeče. To očividně pravda není.Jednou jsou tam zmíněné vyhovující prohlížeče, jednou existující prohlížeče, je tam odkazován dodatek C, kde je to řečeno dostatečně výmluvně: "This appendix summarizes design guidelines for authors who wish their XHTML documents to render on existing HTML user agents. Note that this recommendation does not define how HTML conforming user agents should process HTML documents." Možná bychom našli ve specifikaci více vět, které bez kontextu lze úspěšně zpochybnit a napsat o tom článek s hezkým bulvárním titulkem a perexem.
RFC 2854 pochází částečně od W3C. Tvrdí: „XHTML 1.0 defines a profile of use of XHTML which is compatible with HTML 4.01“ — poznámka o kompatibilitě se stávajícími prohlížeči tam chybí. Můžete tomu říkat „zavádějící terminologie operující s nepravdivými tvrzeními“.Ano, souhlasím, je to zavádějící formulace. Je užita v odkazu na dokument, kde je ovšem dostatečně vysvětlena. Myslím, že o předchozích dvou bodech je zbytečné dále diskutovat - je to o tom, jak chápeme některé anglické fráze, jak je pro nás důležitý kontext, tedy do značné míry o osobních pocitech. Já si nemyslím, že si ty (osamoceně) nejasné formulace zaslouží takový humbuk, ale názory na to můžeme mít samozřejmě různé.
„… zajímá mne, na základě čeho autor článku dovozuje, že se to nesmí“ Říkám pouze, že takový dokument nebude validní.Proč? RFC2854 říká, že s mime typem "text/html" můžete dostat jak dokumet s HTML syntaxí, tak dokument s XHTML syntaxí.
1) Oficiální validátor se snaží uhodnout, jaký má užít parser, podle deklarace doctype. Jenže značkovací jazyk musí znát před prvním zakousnutím se do dokumentu, aby vůbec tu deklaraci našel.A jak to chcete prakticky zajistit? Z mime typu to prohlížeč/validátor může zjistit v případě http komunikace. Validátor i prohlížeč ovšem si ovšem poradí i se soubory z disku, validátor se samotným kódem vloženým přes formulář. Bude tedy pro stejný kód, který jednou dostane pomocí http, jednou vložením do formuláře, dávat odlišné výsledky?
2) Veřejný identifikátor v doctype nevypovídá o syntaxi. Normativně jen usnadňuje nalezení DTD, nic víc. Kupříkladu návrh druhého vydání XHTML 1.1 ani FPI nevyžaduje.Mime typ samotný také nic sám o sobě nevypovídá o syntaxi. Prohlížeč/validátor si musí pamatovat, jaká syntaxe odpovídá určitému mime typu. Stejně tak si může pamatovat, jaká syntaxe odpovídá určitému DTD (byť samotná DTD syntaxi neurčuje). Prakticky jsou dnes jak prohlížeče, tak validátor v situaci, kdy na mime typ mohou těžko spoléhat.
Zmíněný Annex K vyšel dva roky před dokončením HTML 4.01. EMPTYNRM je přepínač v SGML deklaraci, která se do HTML dokumentů nepíše, takže minimálně u validátoru by problém částečně přetrval.Praktický význam by ten přepínač neměl víceméně žádný. Víceméně by se poupravila syntaxe shorttags v místě, kde je to stávajícím HTML prohlížečům stejně putna.
V HTML je „>“ znak jako každý jiný, pokud je uvnitř obsahu elementu nebo atributu.
„sice říká, že tag je ohraničen < a >, ale už neříká, co dělat, když na tyto znaky prohlížeč narazí někde jinde“
Pokud za „<“ není znak povolený v názvech, je to obyčejné menšítko. Totéž platí třeba i pro ampersand.
„specifikace povoluje atributy (možná nechtěně) pouze u tagů ukončených >“
To je dost zjednodušená formulace, ono totiž i to ukončovací většítko je někdy nepovinné. Na NET nemají atributy vliv.
Kontakt tam byl, ale doposud jen v nápovědě.
Validace proběhne, protože se SGML parser umí z chyb v DTD zotavit. Nepraktikuje drakonismus, validuje, dokud to jde. Přestože se úspěšně zotavuje, chyby neodpouští, takže dokumentu s vadnou DTD nikdy nedovolí spatřit zelenou hlášku. Stejně jako oficiální validátor i ten český ukazuje ve výjezdu chyb pouze chyby v dokumentu samotném.
O tom, že XML DTD není syntakticky korektní HTML DTD, se zmiňuji i v tomto článku, takže jsem to neopomněl.
„Takže opravený validátor si lže stejně do kapsy jako ten od W3C, akorát v jiných věcech.“
Opravený validátor se chová až na tu opravu identicky.
S těmi třemi „přiznáními“ souhlasím.
Zkuste si do elementu body
vložit jen "<text" (bez uvozovek). WIE7, FF 2.0 i Opera nezobrazí nic – protože po < očekávají název tagu. Stejně legitimní je považovat > za konec tagu, a pokud aktuálně prohlížeč nemá žádný tag, který by mohl ukončit, prostě znak ignoruje.
To je právě problém HTML specifikace, že sice říká, že tag je ohraničen < a >, ale už neříká, co dělat, když na tyto znaky prohlížeč narazí někde jinde.
A ještě jeden detail – specifikace povoluje atributy (možná nechtěně) pouze u tagů ukončených >:
Attribute/value pairs appear before the final ">" of an element's start tag.Jakmile má tag atributy, nemůže lomítko na konci považovat prohlížeč za NET notaci, ale musí jej považovat za vnitřek tagu – nejspíš tedy za neznámý atribut. Takže problém s NET notací se zužuje na tagy
<br />
a <hr />
– a těm stačí doplnit nějakou neutrální třídu, třeba <br class="br" />
. A je po problému, žádné >
nikde nepřebývá.
IANA má typ text/html registrovaný pro HTML, ale XHTML 1.0 říká, že jde použít i pro XHTML.
Vynechal jste ovšem dost podstatnou část: "…i pro XHTML dokument, který splňuje požadavky ze sekce HTML Compatibility Guidelines". Tedy dokument, který je - až na XML deklaraci a deklaraci typu dokumentu - platným HTML dokumentem (přehlédneme-li problém se zkráceným značkováním, který podle všeho přehlédli i autoři specifikace).
"prohlížeče i validátor totiž budou nadále stejně "špatné" a my je budeme nadále používat stejně jako předtím.. :-)Ne tak docela... :-)
Váhám, jestli svůj příspěvek myslíte ironicky nebo vážně. Na otázky „kdo potřebuje“, s klidným svědomím mohu odpovědět, že já.
Pro vkládání matematického textu jako obrázku je prakticky použitelné pouze PNG. Jenže takový obrázek má spoustu nevýhod – nelze jej jednoduše editovat, vzhled nebude v souladu se zbytkem textu, nelze jej zvětšovat jako okolní písmo, není strojově zpracovatelný, není interní součástí stránky… (Pro generování matematických vzorců jako PNG obrázků doporučuji imgTeX. Mimochodem JPEG je na matematické vzorce naprosto nevhodný.)
SVG lze do HTML vložit pomocí elementu object, což je vhodné pro použití SVG jako vektorového obrázku. (Nyní jsou takto vytvořeny např. vlajky na wikipedii.) Jenže SVG má mnohem více možností, které lze použít jen pokud bude součástí XHTML stránky.
Flash se ani zdaleka nevyrovná SVG. Namátkou provázání se zbytkem stránky přes DOM, strojové zpracování (zejména indexování ve vyhledávačích a generování na serveru), jednoduchá editace, podpora 64b prohlížečů…
Když o tom teď přemýšlím, asi jste svůj příspěvek myslel vážně. Omluvou vám budiž nedostatečný rozhled, že jste se s řešením těchto problémů ještě nesetkal.
To, že se (důrazně) nedoporučuje zkrácenou notaci v HTML dokumentu používat, neopravňuje autory prohlížečů chovat se, jako by neexistovala. Je to totéž, jako by prohlížeč ignoroval elementy, které jsou v HTML 4 označeny jako zastaralé.
Vztah mezi HTML a SGML je naprosto jasný: HTML je jednou z aplikací SGML, stejně jako je XHTML jednou z aplikací XML. Právě proto XHTML vzniklo: ne kvůli buzeraci autorů webových stránek, ale kvůli zjednodušení syntaxe a strojového zpracování dokumentů - XML, i když se proti němu spousta lidí z neznalosti bouří, je podstatně jednodušší a praktičtější než SGML. Bohužel většina těch protestujících nemá o nějakém SGML (a jeho vztahu k HTML) ani ponětí a místo formální specifikace HTML je zajímají jen empirické poznatky o tom, co jak zobrazí pár známých prohlížečů (v lepším případě, v horším MSIE).
Díky za článek, o některých věcech jsem dosud nevěděl.
Nicméně myslím, že nemáte tak zcela pravdu s NET notací. V sekci 3.2 specifikace HTML 4.01 se píše:
3.2 SGML constructs used in HTML
The following sections introduce SGML constructs that are used in HTML.
The appendix lists some SGML features that are not widely supported by HTML tools and user agents and should be avoided.
Volně přeloženo:
3.2 Konstrukty SGML použité v HTML
Zde říkáme, co z SGML se používá v HTML.
V příloze najdete vlastnosti SGML, které HTML nástroje běžně neimplementují a neměli byste je používat.
V seznamu konstruktů SGML, které HTML používá, není NET notace uvedena. Naopak, odkazovaná příloha uvadějící SGML konstrukty, které by se neměly používat, je právě tou přílohou, kterou odkazujete ve svém článku jako důkaz o používání NET notace v HTML.
Můj závěr: Specifikace HTML 4.01 nedoporučuje používat NET notaci SGML, tedy <p/text odstavce/ se nedoporučuje používat místo <p>text odstavce</p>. Tvůrci IE, Firefoxe i Konqueroru si to zřejmě vyložili úplně stejně.
Problém myslím spočívá především v ne úplně jasném vztahu mezi HTML a SGML.
text/html
registrovaný pro HTML, ale XHTML 1.0 říká, že jde použít i pro XHTML. Článek předpokládá, že číselník IANA je závaznější než specifikace XHTML 1.0 a proto validátor obviňuje ze lži. Pro validátor je zjevně důležitější XHTML, nicméně vnitřní rozpor v tom, že z dokumentu nemusí být jednoznačně poznat, zda jde o HTML nebo XHTML, validátoru odpárat nejde.