Hopp til innholdet

cjohansen.no

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.

Muligens relatert

2006 - 2012 Christian Johansen Creative Commons Lisens