No Future

Weblog přesunut na atd.havrlant.net

XHTML Anarchie

24 leden 2006, 14:03
rubrika XHTML-semantika

Ten MIME-type mi prostě nedá spát aneb text/html není ani pro XHTML 1.0.

Už se o tom vedlo dost diskusí a stále v tom nemám jasno. Že XHTML 1.1 nesmí být posíláno jako text/html se už obecně i docela ví, i když jsem se minule pokoušel najít určitou škvírku ve specifikaci, skrze kterou by se text/html dalo propašovat i pro XHTML 1.1. Dneska jsem se spíše pokoušel zamyslet nad jednou větou ve specifikaci. Ta věta zní v originále takto:

XHTML1 defines a profile of use of XHTML which is compatible with HTML 4.01 and which may also be labeled as text/html.

Z předchozího textu vyplývá to, že jestliže je XHTML 1.0 dokument kompatibilní s HTML 4.01, může být odeslán jako text/html. Logicky z toho usuzuji, že jestliže není kompatibilní, nemůže být takto odeslán a musí se použít jiný MIME-type (application/xhtml+xml, application/xml nebo ještě text/xml). Takže teď už zbývá pouze vyřešit otázku, jestli je XHTML 1.0 dokument kompatibilní s HTML 4.01. Přijde mi, že nad touto otázkou se moc lidí nezamýšlí.

Ale ať přemýšlím jak přemýšlím, formálně vzato kompatibilní není. Minimálně jeden důvod by se našel. Aby byl kompatibilní, nesměly by se v XHTML dokumentu vyskytnout značky jako <br/> nebo meta tagy. Proč? Vzpomínáte si na HTML hádanku? Lomítko, které v XHTML vkládáte do prázdných elementů (tj. ty, které mají obsah EMPTY), v HTML ukončuje značku, tudíž následující závorku by prohlížeč měl zobrazit. Narozdíl od XHTML, kde je tento zápis naprosto v pořádku a prohlížeč by žádnou závorku zobrazit neměl. Posíláte-li tedy dokonalou XHTML validní stránku s MIME-typem text/html, prohlížeč ji bude nakonec zpracovávat jako zprasené a nevalidní HTML. Chcete-li psát „moderním“ jazykem, měli byste také posílat „moderní“ MIME-type.

Jak je vidět, Shorthand markup nadělalo zatím více škody než užitku, nicméně to na věci nic nemění. Zvalidujete-li XHTML dokument HTML validátorem, vyhodí vám chybu, protože máte v hlavičce text (ty závorky) a případně ještě zařve na atributy xml:lang a xmlns, používáte-li je. Ale vzhledem k tomu, že atributy, které prohlížeč nezná (formálně vzato by je znát neměl, v HTML obsažené nejsou), by měl ignorovat, nenarušuje to kompatibilitu (narozdíl od ukončování prázdných elementů). Na druhou stranu používáte-li oba atributy lang i xml:lang a máte je různé (překlep, nepozornost…), v XHTML má přednost atribut xml:lang, ale HTML tento atribut nezná, tudíž by se měla brát hodnota lang, takže další nesrovnalost, i když drobná.

Takže sečteno podtrženo – není-li váš XHTML dokument zpětně kompatibilní s HTML, nemůžete odesílat stránku jako text/html. V naprosté většině případů pak kompatibilní není (využívá se vlastně „chyby“ v prohlížečích), leda byste nepoužívali prázdné elementy jako třeba <br> nebo meta tagy či element <link>.

update: určitě si přečtětě Derův článek, věnuje se stejnému tématu, jen to rozebral do větší hloubky ;-).

komentáře
  1. Dero - #
    —    24. leden 2006, 17:18   

    Jenže ta kompatibilita je přímo definována: http://www.w3­.org/…l1–200208­01/#…

    Kompatibilita totiž neznamená totožnost, jen schopnost kooperace mezi dvěma formáty. W3C kompatibilitu vymezilo a s úspěchem ověřilo v dostupých prohlížečích. Tohle je ten praktický přístup, který například já propaguji.

    Tedy ano, XHTML 1.0 dokument může být kompatibilní s HTML 4.01. Může tedy být zpracován současnými HTML parsery a také může být správně vykreslen, jsou-li zmíněné body kompatibility splněny. A o to vykreslení a rozparsování jde.

    Ty formáty samozřejmě totožné nejsou, ale v současných prohlížečích jsou kompatibilní. A souhlasím, že kdyby současné parsery správně vyhodnocovaly NET, tak by se teprve děly věci…

  2. Timy - #
    —    24. leden 2006, 18:20   

    Dero: No jak se to vezme. Ano, podle té specifikace ta stránka kompatibilní je, nicméně ta definice kompatibility využívá chyby v prohlížečích. S NET je legrace, škoda, že to prohlížeče nepodporují. Ale kdyby to v současnosti začal některý prohlížeč podporovat, tak by asi daleko nedošel…

    V souvislosti s tím vším: jaký MIME-type posílá tato stránka? Že bychom se nakonec všichni mýlili?

  3. llook - #
    —    24. leden 2006, 18:45   

    XHTML1 definuje profil užití XHTML, které je kompatibilní s HTML 4.01 a které také může být označeno jako text/html.

    Podle mě to znamená dvě věci:

    1. Užití tohoto profilu je kompatibilní s HTML 4.01.
    2. XHTML dokument vyhovující onomu profilu může být označen jako text/html.

    Přestože první bod není pravdivý, jako podmínku text/html z toho chápu užití toho profilu, nikoli kompatibilitu s HTML.

  4. Dero - #
    —    24. leden 2006, 20:23   

    V souvislosti s tím vším: jaký MIME-type posílá tato stránka? Že bychom se nakonec všichni mýlili?

    Tož to je velice úsměvné. :o) (přesto si nemyslím, že se mýlíme)

  5. Timy - #
    —    24. leden 2006, 21:05   

    Koukám, že jsem název článku zvolil i docela vhodně, stručně řečeno, je v tom prostě bordel.

    llook: Pokud užití tohoto profilu ve skutečnosti není kompatibilní s HTML, nemůže být pravdivý ani ten druhý bod, který vychází z prvního bodu. Je to už trochu slovíčkaření, ale myslím, že každý cítí, že tady něco není v pořádku.

    Dero: Ano, W3C je místy dobrým zdrojem zábavy :-)

  6. Dero - #
    —    25. leden 2006, 00:03   

    Ještě k tématu kompatibility: http://lists.w3­.org/…3JanMar/0020

  7. Dero - #
    —    25. leden 2006, 00:12   

    Tak jsem to našel. Ústy W3C naplno o MIME a XHTML: http://www.w3­.org/…ml-mimetype/

    Věděl jsem, že něco takového musí existovat – a jsem rád, že moje domněnky byly správné.

  8. Timy - #
    —    25. leden 2006, 18:49   

    Dero: Předpokládám, že ti jde hlavně o tu větu: The first technique makes your content understandable to the vast majority of web browsers. Přijde mi, že to pořád nic neřeší. Praxe je jasná, NET podporované není, takže se všechno zobrazuje v pořádku. Nicméně dokumenty HTML a XHTML formálně a logicky vzato kompatibilní nejsou, W3C se z toho jenom vykrucuje.

Jméno
Zapamatovat
http://
Zpráva

formátování: *kurzíva* **tučné písmo** `kód` "text odkazu":cíl odkazu

Tady formátuje Texy!

Rubriky

  • No Future
  • Internet
  • Se špetkou ironie
  • XHTML a sémantika
  • Testy
  • Oblíbené weblogy

  • La Trine
  • Derův zápisník
  • Yuhůův weblog
  • acciBlog
  • Martyho weblog
  • Ronnieho weblog
  • zimmiho blog
  • conBLOG
  • Klokynov blog
  • Buchtič blog
  • Dům mlhy
  • Anne’s Weblog
  • Mabfredův básnický blog
  • Další odkazy

  • Sémantika
  • MiSHAK
  • můj starší blog
  • Textpattern česky
  • Textpattern oficiální web
  • Jakpsatweb
  • Kocourek Koudy
  • Webylon