Da der er temmelig stor forskel på HTML og ægte XHTML, valgte man at 'liste' teknologien ind via et par versioner. Først XHTML2.0 bliver 'ægte' XHTML - altså ren XML uden HTML-understøttelse - og i denne overgangsfase ligger kimen til alle misforståelserne.
Hele idéen med XHTML er som sagt, at koden skal parses af klientens XML-parser. I XHTML version 1.0 kan koden dog både parses som HTML og XML - og i 1.1 burde den kun kunne parses som XML, men parses også som HTML.
Parses koden som HTML, har man ingen fordele ved XHTML fremfor velskrevet HTML4.01. Parses koden derimod som XML, går det væsentligt hutigere - og fordelene ved XHTML slår igennem.
Parses XHTML-kode som HTML, vil HTML-parseren endda opfatte koden som fejlfyldt, da der i HTML ikke er mulighed for at lukke åbne tags som <img src="hest.gif" .... />
Et problem er, at en skræmmende stor del af det XHTML, der bliver skrevet, aldrig bliver parsed som XML ... også selvom koden er hyper-valid XHTML1.0-Strict eller XHTML1.1-Strict (mere om, hvorfor senere).
Det vil sige, at klienten modtager et dokument med en DTD, der fortæller, at der er tale om et XHTML-dokument - på trods af, det ikke kan parses som sådan -> første fejl, der skal repareres! Derefter kommer så alle de lukkede tags, der også skal repareres, før dokumentet endelig kan parses.
Kan dokumentet ikke parses som XHTML, ville browserne altså være bedre stillet, om der var skrevet valid HTML4.01 med den korrekte DTD ;o)
XHTML er andet og mere end lukkede tags
Alle dokumenter har tilknyttet en MIME-type, der fortæller computeren, hvad den skal gøre med det pågældende dokument. Det gælder både lokale filer og webfiler på en server.
Når dokumenter distribueres over nettet, sætter serveren denne MIME-type i dokumentets HTTP-header - i feltet 'Content-type' - og denne MIME fortæller altså klienten, hvad det er for en type dokument, så den kan vide, hvad den skal stille op med det.
Bliver klienten mødt af en MIME-type, den ikke understøtter, vil den normalt åbne en dialog, hvor brugeren bliver tilbudt at downloade dokumentet.
For HTML dokumenter er MIME-typen 'text/html'.
For XHTML dokumenter 'application/xhtml+xml'.
Eller rettere:
For XHTML dokumenter burde MIME-typen være 'application/xhtml+xml'.
Der hersker i øjeblikket et syndigt rod i MIME-types for XHTML - og browsernes understøttelsen af dem. Som hovedregel skal typen være 'application/xhtml+xml', hvis XML-parseren skal tage over.
Sendes typen 'text/html', vil dokumentet altid blive parsed som HTML4.01 - og ikke som XML.
Har man ikke selv foretaget sig noget aktivt for det, vil XHTML dokumenter normalt blive served som 'text/html' - og altså mangle XHTML'ens fordele.
Er der tale om dynamiske dokumenter, er det temmelig let at sætte den korrekte MIME-type. I PHP kan det f.eks. gøres med:
Header("Content-type: application/xhtml+xml");
Er der tale om statiske dokumenter, må man ind og pille i serveren for at få den til at sende dokumenterne med korrekt MIME. Her er der forskellige muligheder, hvis beskrivelse ikke falder ind under ambitionerne for denne artikel.
Endnu et problem er, at IE6 endnu ikke understøtter 'application/xhtml+xml' <a href="http://www.w3.org/ (...) Browser Oversigt ]</a> så, når der f.eks. er tale om en IE, må man altså serve dokumentet med en anden MIME-type.
Her er 'panik-løsningen' at anvende enten 'application/xml' eller 'text/xml'. To XML-typer, der begge tillades som nødløsninger, hvis man (i IE) bruger flg. 'hack':
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="copy.xsl"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/ (...)
<html xmlns="http://www.w3.org/ (...)
<head>
... osv, osv.
Stylesheet'et ' copy.xsl' skal så indeholde:
<stylesheet version="1.0" xmlns="http://www.w3.org/ (...)
<template match="/">
<copy-of select="."/>
</template>
</stylesheet>
Det har bare den bagdel, at når der i koden står noget før DTD'en, går IE i quirks-mode og understøtter således ikke længere CSS-standarden ... ikke mindst box-modellen går det helt galt med.
Helt generelt gælder, at hvis kode skal parses som XML, skal XML-prologen:
<?xml version="1.0" encoding="iso-8859-1"?>
stå før DTD'en. Så kan IE som sagt ikke længere tolke CSS korrekt, hvorfor der skal altså serves speciel CSS til den.
XHTML1.1 er i modsætning til 1.0 ren XML og må som sådan slet ikke serves som 'text/html' - men kun med en XML-relateret MIME-type. Koden parses dog alligevel som HTML, hvis den bliver sendt som 'text/html' ... hvem sagde, XHTML er enkel og logisk at gå til her i overgangsfasen? :o|
Fra XHTML2.0 er det udelukkende MIME-typen 'application/xhtml+xml', der kan bruges. Så er overgangsfænomenerne forbi og dokumentet parses som ren XML - og kan ikke andet.
Til gengæld skal koden holde sig helt strengt til standarderne. Ellers 'vælter' browseren simpelthen og viser en XML-fejl ... så er det endelig slut med sloppy kode ;o)
Du kan selv checke dels dine egne sider og dels kan du jo muntre dig med at se, hvor få sider, du kan finde, der kan parses som XHTML med W3C's udvidede validator-interface: <a href="http://validator.w3.org/ (...) HER ]</a>
Husk, at afkrydse 'Verbose Output', så kan du se, hvad serveren sætter som MIME-type.
XHTML er meget mere end lukkede tags
Udover MIME-problematikken skal der også scriptes anderledes i XHTML, end der skal i HTML - også scripts har afgørende betydning for, hvordan kode parses.
Det kikker vi på i endnu en artikel, hvor jeg også vil gennemgå lidt af de spændende nyheder, der venter på dørtrinnet.
Foreløbig konklusion
En egentlig konklusion bestående af både en samlet, faktuel opstilling og en velbegrundet, personlig vurdering, vil jeg stadig vente med, til serien er helt færdig.
Det er dog svært at skjule, at jeg personligt er en meget varm tilhænger af XML/XHTML og glæder mig som et lille barn til Juleaften til den dag, hvor XHTML2.0 er implementeret i de vigtige browsere.
Indtil da anser jeg det til gengæld for et umådeligt spild af tid, at skrive XHTML. I mellemtiden prøver jeg i stedet at strømline min HTML4.01 kode henimod noget, der kun på ganske få parametre adskiller sig fra XHTML - og det samme gælder min scripting.
På den måde kan jeg skifte til XHTML, overnight - samtidig med, at min kode løbende er valid og så god som den kan blive, set fra browserne ... bedre end XHTML ville være.
Dette er for det første en helt personlig vurdering, som man er mere end velkommen til at være uenig i - og for det andet, kommer der som sagt en mere nuanceret, uddybende og begrundet konklusion på et senere tidspunkt.
-----------------------------------------
Et lille PS:
Brugeren frol har angivet et link til en artikel, der omhandler, hvordan man kan serve sine dokumenter med den korrekte MIME - men dette løser desværre kun 'et hjørne' af problematikken.
For det første bør løsningen kun anvendes, hvis der er _virkelig_ god grund til at anvende XHTML (= hvis det er tvingende nødvendigt). Det er nemlig en temmelig servertung løsning, der frådser kraftigt med serverens resourcer.
Dernæst skal man være opmærksom på, at hvis man bruger scripts, skal disse være skrevet til brug under XML. Almindelig scripting, som det bruges under HTML, kan ikke umiddelbart anvendes under XHTML - der har nogle andre script-DOM bindings.
Det vil der komme mere om i den næste artikel, som jeg desværre endnu ikke har haft tid til at få skrevet færdig .... hav venligst lidt tålmodighed :)
En par kommentarer til brugeren 'tumlehund':
Problemet er jo netop, at ens (java)scripts ikke nødvendigvis er kompatible med XHTML, når version 2.0 bliver en realitet.
Idag spænder browserne sikkerhedsnet ud under kodere, der ikke kan scripte op mod XML-DOM'en - og lader i stedet HTML-parseren overtage dokumentet. Når XHTML2.0 kommer, sker dette ikke længere - og langt de fleste XHTML-sider, der idag ligger på WWW, vil gå ned med en XML-fejl ... hele Eksperten inkluderet ;o)
- og jo, jeg har testet ... både på frontend og backend. Ellers ville der jo blot være tale om hovedløs påståelighed. Uden at jeg i den anledning ønsker at pege fingre, kan jeg ikke undlade at tvivle på, du selv har testet noget somhelst omkring performance og dårlig XHTML-kode kontra god HTML-kode - samt hvad der egentlig skal trækkes af last på serveren ;o)
Til læsere, der finder artiklen er 'farvet':
Hvis græsset er grønt, hvorfor skal jeg så tvinges til at fotografere det i sort/hvidt?
Fordi en vis procentdel af befolkningen er farveblind, skal de, for hvem farverne ikke er skjult (eller fremstår forvrænget), vel ikke luske rundt i dunkle kældre og tale om alle farverne i det skjulte.
Vi skal heller ikke tvinges til at omtale græsset som 'rødt' fire gange, fordi vi har sagt 'grønt' fire gange. Den slags demokratisme er i al respekt ikke noget, jeg agter at ligge under for. Take it or leave it!
Til læsere, der måtte undre sig over brugeren stich's klynkerier, må jeg nøjes med at henvise til en lang række tråde om emnet - afsluttende med denne:
http://www.eksperten.dk/ (...)
Jeg orker ikke at replicere yderligere!


