XHTML som XML
XHTML 1.0 er "en reformulering av HTML 4.01i XML". Altså skal XHTML-dokumenter være XML-dokumenter. Alikevel er det svært få nettsteder basert på XHTML som faktisk blir behandlet som XML. Dette skyldes i hovedsak to ting: Internet Explorer (inkludert versjon 7) støtter IKKE XHTML som XML og mange vet ikke hvordan.
Hva skal så til for at en XHTML-side blir behandlet som XML? Ressurser på nettet blir behandlet i nettleserene på forskjellig måte utifra deres "Mime type"/"internet media type". En slik typebenevnelse sier noe om hva slags innhold som finnes på en gitt ressurs. For bilder kan aktuelle Mime-typer være for eksempel "image/gif" eller "image/jpeg" som betegner henholdsvis en gif og en jpg.
For HTML finnes Mime-typen "text/html", som brukes av så å si alle offentlig tilgjengelige nettsteder. I XHTML finnes det også flere aktuelle Mime-typer; "text/html", "application/xhtml+xml", "application/xml" og "text/xml". Av disse fire er det kun den første som er gyldig for HTML-dokumenter, mens alle fire kan brukes for XHTML, selvom det er "application/xhtml+xml" som er den anbefalte for de fleste XHTML-dokumenter. Når du bruker "text/html" behandler nettleseren siden som HTML. Med en av de andre tre behandler nettleseren siden som XML, dersom den støtter XHTML.
Hvordan?
Statiske filer
Så for at XHTML-sidene dine skal oppføre seg som XML må serveren din konfigureres til å sende riktig Mime-type. Lokalt kan dette gjøres ved å bruke filendelsen .xhtml istedet for .html. Hvis du prøver å åpne en .xhtml-fil i Firefox eller Opera vil du se XHTML behandlet som XML.
.xhtml-filer under Apache
Under Apache kan du legge til en AddType-deklarasjon som får serveren til å behandle .xhtml-filer som XML:
AddType application/xhtml+xml .xhtml
Andre applikasjoner
Hvis sidene dine er resultatet av et program på server-siden, kan du (før du sender innhold til nettleseren) sette Content-Type-headeren. Eksempel med PHP:
<?php header('Content-Type: application/xhtml+xml; Charset=utf8'); ?>
Hvilken forskjell utgjør det?
Når sidene behandles som XML fremfor HTML vil man kunne oppleve noen åpenbare og noen diskrete forskjeller. Den mest åpenbare er det som i XML kalles drakonsk feilbehandling. Dette er et hett tema, og mange har klaget sin nød mot det. XHTML-dokumenter som behandles som XML MÅ være velformet. Er de ikke det er det bare en tom side med en XML-feilmelding. Hardt og brutalt. Ett eneste tegn i feil tegnsett, en eneste & som ikke er kodet, eller andre feil (manglende tagger, feil nesting osv) fører til full stopp i rendring.
Ingen implisitte tagger
I HTML vil du kunne style noen elementer selvom de ikke finnes eksplisitt i koden. For eksempel er det fullt mulig å utelate tbody i en tabell, men tbody i CSS-velgere vil forsatt gi ventet resultat. Sånn fungerer ikke XHTML som XML.
Forskjeller i Javascript
document.write fungerer ikke. Dette er tett knyttet til det faktum at XHTML behandles med drakonsk feilbehandling. document.write kan potensielt resultere i at et i utgangspunktet velformet dokument blir ikke-velformet og kan derfor ikke brukes. Den samme grunnen ligger bak det at innerHTML i XML kun er lesbar.
Forskjeller i CSS
body-elementet dekker ikke hele den synlige delen av nettleseren. Trenger du en bakgrunn på hele siden må du nå style html-elementet i stedet.
Støtte
Så til den avslørende delen. Setter du XHTML-dokumentene dine til å sendes som XML oppdager du fort at Internet Explorer rett og slett ikke støtter det. Selv ikke versjon 7 som kom i år, 8 år etter at XHTML-standarden var ferdig fra W3C. Med en andel fortsatt på 80-90% gir det seg selv at dette er en showstopper. Sammen med det faktum at W3C bruker veldig lang tid på XHTML2, som i tillegg ikke blir bakoverkompatibelt har dette drevet frem initiativet som lager HTML5/XHTML5.
Kommentarer
hans
31. oktober, 19:32
"Altså skal XHTML-dokumenter være XML-dokumenter. Alikevel er det svært få nettsteder basert på XHTML som faktisk blir behandlet som XML."
Men at XHTML dokumenter skal være velformet XML betyr ikke at nettlesere skal tolke dem som XML.
Christian
(http://www.cjohansen.no)
1. november, 22:19
I tillegg kan XML-dokumenter lett brukes sammen med andre XML-teknologier. For eksempel kan XHTML brukes sammen med MathML, takket være det faktum at begge teknologiene er XML i bunnen. Selvfølgelig, nettleserene kan implementere en dedikert xhtml-mathml-parser og tilsvarende parsere for alle spesialtilfeller, men litt av poenget vil da forsvinne. Siden begge teknologiene (og andre tenkelige kombinasjoner) er XML-baserte kan nettleseren komme langt med en generisk XML-parser fremfor én parser for HTML, én for MathML osv.
Uansett - hvis man spør seg hvorfor nettleseren skal håndtere XHTML som XML, kan jeg ikke da også spørre hvorfor XHTML skal baseres på XML? Hvis man ikke vil ha dette kan man jo bruke HTML 4.01, og støtte opp under HTML 5-prosjektet ;)