XHTML del 2

Dette er ikke en tutorial eller generel, enkeltstående artikel om XHTML. Forudsætningen for at få fuldt udbytte af artiklen er, at du har læst den første artikel i serien.

XHTML - overgangen er problemet

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.

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 først fornylig er begyndt at understøtte 'application/xhtml+xml' [ Browser Oversigt ] så, når der f.eks. er tale om en bare lidt ældre IE6, 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/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
... osv, osv.

Stylesheet'et ' copy.xsl' skal så indeholde:

<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">
<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: [ HER ]
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.

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.

Artiklen er skrevet af Olebole aka. Ole Clausen.


Tilføjet af Martin Tygsen den 11-03-2005 - Hits: 3117

Nyhedsbrev

Artikler og tips til webmastere på e-mail:
 
Tilmeld   Afmeld
Nu 9505 modtagere.

Hjemmesider Login

Brugernavn:


Password:



Opret hjemmeside


Annoncering | Information | Presse | Kontakt os | RSS | © HEPHEY 2002 - 2007

XHTML del 2
Her er du  :   HTML   >  XHTML del 2