So ähnlich liest man es fast überall.
Aber was bedeutet dieses mysteriöse X vor dem HTML eigentlich?
XHTML=»Extensible Hypertext Markup Language= Erweiterbare Hypertext-Auszeichnungssprache«.
Klingt gut.
»XHTML ist eine Neuformulierung von HTML auf der Basis von XML.«
So. Aha. Aber was ist nun schon wieder XML?
XML=»Extensible Markup Language«.
Es ist eine Metasprache, die bestimmte
Regeln für Auszeichnungssprachen aufstellt. Bisher gab es zwar schon
SGML, das jedoch komplizierter im
Regelwerk ist und nicht mehr zeitgemäß erschien. HTML zum Beispiel ist eine Anwendung, die auf SGML beruht.
In XHTML sind die Regeln strenger und eindeutig. Jedes Element, das aufgemacht wurde, muß auch wieder geschlossen
werden. Ebenso müssen Elemente logisch verschachtelt werden. Das nennt man Wohlgeformtheit.
Also:
<element1><element2>Hier dann der Inhalt</element2></element1>.
XHTML sieht ähnlich aus wie HTML, hält sich aber streng an XML-Regeln und wird mit einem XML-Parser geparst. XML-Parser wiederum sind streng und können im Gegensatz zu üblichen HTML-Render-Engines nur wohlgeformte Dokumente anzeigen. Bei einem Fehler der Wohlgeformtheit brechen sie den Parse-Vorgang ab und geben eine Fehlermeldung aus.
XHTML ist kompatibel mit anderen XML-Anwendungen, so z.B.
MathML, eine
mathematische Auszeichnungssprache, Ruby oder SVG.
Es können dann einfach Anwendungen in diesen Sprachen in eine Webseite eingebaut
werden und vom Browser angezeigt werden.
Endlich kann ich auch komplizierte mathematische Formeln online stellen! ;)
Bis hier hin klingt ja alles prima und es spricht auch alles dafür, XHTML zu verwenden. Sauber, logisch und kompatibel mit anderen Anwendungen.
Zur Demonstration habe ich mal eine .xhtml-Seite abgespeichert und hier
hochgeladen.
Öffnet sie mal mit verschiedenen Browsern. Na?
FF — kein Problem. Opera — kein Problem.
IE — nanu? Die Seite wird nicht
geöffnet — er bietet sie zum Download an?
Ja — genau. Der IE kann kein XHTML! Auch nicht die »neueste« Version 6.0.
»Aber es gibt doch tausende von XHTML-Seiten im Netz, und die werden auch
vom IE geöffnet!« höre ich Euch sagen.
Tja, es sind strenggenommen keine XHTML-Seiten. Es sind HTML-Seiten mit falscher Syntax,
weiter nichts. Sie werden mit dem falschen MIME-Typen ausgeliefert.
Jede Ressource hat einen bestimmten MIME-Typ.
Der MIME-Typ sagt dem Empfänger, welcher Art ein Dokument ist,
welchen Parser er verwenden soll und welche syntaktischen Regeln dabei gelten.
HTML-Seiten haben text/html, JPEG-Bilder haben image/jpeg, Flash hat application/x-shockwave-flash usw.
Und XHTML hat eben application/xhtml+xml.
Woher weiß der Browser den MIME-Typ? Normalerweise wird der MIME-Typ vom Server per HTTP angesagt, notfalls wird er durch
die Dateiendung bestimmt (vor allem,wenn kein Server zwischengeschaltet ist auf dem heimischen Computer.
So werden .php-Seiten nach dem Parsen meist als text/html weitergereicht an den Browser.
Dazu braucht man auch nichts einstellen, das ist schon so vom Provider auf dem Server
voreingestellt.
Webseiten, die mit XHTML-Doctype geschrieben wurden, werden meistens einfach
als .html abgespeichert und so auch an den Browser übergeben. Der denkt dann natürlich,
es sei ganz normales HTML und behandelt es entsprechend. Da so viel Unterschied ja nicht
besteht und die Browser eh so programmiert sind, HTML-Fehler möglichst zu übergehen,
wird die Seite auch meist wunschgerecht angezeigt.
Auf diese Weise kann man auch eine Seite mit XHTML-Doctype an den IE ausliefern.
Aber richtiges XHTML ist das natürlich nicht. Und die Vorteile, eben das
eXtensible, fehlen auch. Es ist einfach nur falsches HTML.
Denn strenggenommen würde zum Beispiel nach SGML-Regeln bei einem <br /> der
Slash bereits das Element schließen.
Allerdings macht das kaum ein Browser, und somit wird der Betrachter im Allgemeinen von den
vielen überflüssigen > verschont.
Wie gesagt sind die Browser-Render-Engines schließlich
auf Fehlerkorrektur programmiert.
Kann man schon. Dazu muß man allerdings serverseitig abfragen,
ob der jeweilige Browser XHTML-fähig ist oder nicht, und dementsprechend
den MIME-Typen ausgeben lassen. Gute Browser bekommen dann echtes XHTML, der IE und andere
Krücken bekommen HTML vorgesetzt.
Erlaubt ist dieses Vorgehen bei XHTML 1.0 nach den Kompatibilitätsrichtlinien, die in Anhang C beschrieben sind.
XHTML 1.1 dagegen sollte explizit nicht als text/html
ausgegeben werden. Daher sollte man es heute auch noch nicht einsetzen.
Hier ein PHP-Script, mit dem man eine solche Abfrage starten kann.(Vielen Dank an Thomas Scholz):
<?php
function ua_accepts_xhtml() {
/* Prüft, ob an den UA XHTML ausgeliefert werden darf.
* Gibt TRUE zurück, wenn ja, FALSE, wenn nicht. */
/* In dubio pro HTML. */
$xhtml = FALSE;
$check_pattern = '|application/xhtml\+xml(?!\s*;\s*q=0)|';
/* Behauptet der UA, XHTML zu können? */
if (($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') and
isset($_SERVER['HTTP_ACCEPT']) and
preg_match($check_pattern, $_SERVER['HTTP_ACCEPT'])) {
$xhtml = TRUE;
}
/* Ältere Geckos haben ein paar Crashbugs mit XHTML. */
if(isset($_SERVER['HTTP_USER_AGENT'])) {
if(preg_match("|rv\:0.9|", $_SERVER['HTTP_USER_AGENT'])) {
$xhtml = FALSE;
}
}
return $xhtml;
}
/* Anwendung. */
$content_type = ua_accepts_xhtml() ? 'application/xhtml+xml' : 'text/html';
header('Content-Type: ' . $content_type . ';charset=utf-8');
header('Vary: Accept, User-Agent');
header('Cache-Control: private');
?>
Dieses Script berücksichtigt auch, dass Netscape 6 noch kein XHTML kann, obwohl er es behauptet.
Dieser Browser wird zwar nicht mehr viel benutzt, aber ganz ausschließen sollte man seine User dann doch nicht.
Hier habe ich einmal eine solche Testseite hochgeladen:
Testseite mit unterschiedlicher MIME-Typ-Ausgabe je nach Browser.
Besonders interessant ist es, die unterschiedliche Fehlerbehandlung zu beobachten.
Dazu habe ich hier ein Beispiel,
bei dem ein <br> statt eines <br /> eingefügt wurde.
Der IE übersieht den Fehler (eigentlich ist es ja für HTML auch keiner!),
gute Browser hingegen zeigen dann die Seite nicht mehr an und weisen auf den Fehler hin.
Eine weitere Möglichkeit wird auf dieser Seite beschrieben - sie ist noch eleganter: Browser, die es können, bekommen dann XHTML, alte Browser bekommen dagegen echtes HTML 4.01, die nötigen Änderungen im Quelltext werden dann dynamisch durch das Skript generiert.
Ja. - Und deshalb ist diese Seite in HTML 4.01 Strict geschrieben.
Unter Normalbedingungen rendern alle Browser die Seite im standardkonformen Modus,
ich schreibe ordentliches und valides HTML und benutze CSS zum Gestalten.
Das verstehen alle
Browser und auch alternative Anzeigegeräte problemlos.
Da ich nicht so viele mathematische Formeln anzuzeigen habe, keine SVGs benutze,
und auch sonst keine XML-Anwendungen in die Seite einbauen möchte, vermisse ich
XHTML auch nicht.
Zudem kann es trotz allem Probleme mit der Rückwärtskompatibilität geben.
So gibt es im IE einen Bug, der gelegentlich dazu führt, dass nur ein XML-Parsebaum dargestellt wird
(Stichwort:
Content-Negotiation), und auch in Formularen kann es Probleme geben, weil alte Browser die Langform (z.B. checked="checked")nicht kennen.
Wer Javascript einsetzt, wird feststellen, dass viele Scripte nicht mehr funktionieren
— so kann zum Beispiel kein HTML mehr mit
document.write ausgegeben werden. Genaueres steht bei Ian Hickson:
Why document.write() doesn't work in XML.
Doch im Jahre 2012, wenn der letzte IE6 ausgestorben ist, dann werde ich auch wieder XHTML benutzen, ganz bestimmt.
Denn XHTML ist die Zukunft, nicht die Gegenwart.
Autorin dieses Artikels: Teresia Kuhr