18 december 2007
XHTML is meer dan HTML in een XML-jasje. MIME types verschillen, XHTML genereert een ander DOM dan HTML, Quirksmode bestaat niet meer en Yellow Screens of Death liggen altijd op de loer. Gevolg: XHTML-code met MIME type text/html gedraagt zich anders dan met MIME type application/xhtml+xml.
De hedendaagse situatie
Massa's websites (Webwereld, HEMA, A List Apart) serveren hun XHTML-code met het MIME-type
text/html. De webbrowser behandelt dit als HTML. Omdat de sytaxis van XHTML wordt gebruikt, wordt error-correctie toegepast op invalide constructies als <br /> en <link />.
Maar belangrijker, de XHTML-code wordt volgens de regels van HTML omgetoverd tot een webpagina. Dit werkt in eerste instantie prima: XHTML is qua syntaxis redelijk backwards compatible met HTML.
Probleem: de overstap naar échte XHTML
Op een dag zal de webmaster inzien dat zijn XHTML-code als HTML wordt behandelt. Hij past zijn Apache-configuratie aan zodat de website met het MIME-type application/xhtml+xml wordt verstuurd. Leetness confirmed. Maar dan gaat het mis.
Unencoded ampersands resulteren in een Yellow Screen of Death, evenals attributen zonder aanhalingstekens er omheen. Het stukje Javascript dat via document.write het inlogformulier op het scherm zette, doet zijn werk niet meer. CSS stijlt de tbody van de tabellen niet meer. Als hij de namespace declaration vergeten is, wordt de boel überhaupt niet meer gestijld.
Na een dag zwoegen zijn bovenstaande problemen opgelost. De webmaster weet niet precies hoe hij het voor elkaar heeft gekregen, maar de boel draait weer. Hij bekijkt voor de zekerheid zijn gastenboek. Maar zijn gastenboek levert nog steeds een Yellow Screen of Death op. Dit probleem is groter, want alle guest entries moet worden omgeschreven naar XML-syntaxis. Het zweet breekt hem uit als de webmaster beseft dat elke gast die het gastenboek tekent, een Yellow Screen of Death kan genereren. Hij zal zijn gastenboek-script ingrijpend moeten veranderen.
Hoe moet het dan wel?
Als webmaster heb je twee keuzes: bij HTML blijven, of naar XHTML gaan. Met HTML is niets mis, en het voldoet voor 99,5% van de hedendaagse websites. Ga je toch over naar XHTML, lees je dan in zodat je weet welke problemen je gaat tegenkomen. Accepteer dat XML wezenlijk anders werkt dan het SGML-dialect dat HTML 4.01 heet.
Om van een interactieve website een XHTML-versie te maken, kun je het beste je backend met DOM laten werken. User generated content lees je in als HTML. Het bijbehorende DOM output je als XML. Zet er een doctype boven, en de webpagina is in elk geval well formed.
De puntjes op de i zetten is lastig. Testen, testen en nog eens testen. Bestudeer de gedocumenteerde verschillen tussen XHTML en HTML en loop de website nog eens goed na.