W�hrend HTML eine relativ neue Erfindung ist, existiert das zugrunde liegende Konzept der Auszeichnungssprachen schon viel l�nger. HTML ist lediglich eine Auszeichnungssprache unter vielen, allerdings die bislang weltweit erfolgreichste und bekannteste. Ein Merkmal des Konzepts solcher Auszeichnungssprachen ist, dass ihre Bestandteile nicht einfach "frei erfunden" sind, sondern dass es Meta-Sprachen gibt, mit deren Hilfe die Regeln und Bestandteile solcher Auszeichnungssprachen definiert werden.
Bereits seit 1986 gibt es die als ISO 8879 standardisierte Meta-Sprache SGML (Standard Generalized Markup Language = standardisierte verallgemeinerte Auszeichnungssprache). Diese Meta-Sprache erlaubt das Definieren von Auszeichnungssprachen mit Hilfe so genannter DTDs (Document Type Definitions = Dokumenttyp-Definitionen). In den DTDs wird festgelegt, welche Elemente eine Auszeichnungssprache hat, welche zugeh�rigen Attribute, sowie Regeln, welche Elemente innerhalb welcher anderen Elemente vorkommen k�nnen usw. Nun ist SGML sehr ausgereift, gilt aber gemeinhin als ziemlich "sophisticated". So entschloss man sich dazu, eine reduziertere Variante von SGML zu etablieren, und zwar unter dem Namen XML (Extensible Markup Language = erweiterbare Auszeichnungssprache). XML erlaubt ebenso wie SGML das Definieren von Auszeichnungssprachen mit Hilfe von DTDs.
HTML, das Anfang der 90er-Jahre entstand, wurde mit Hilfe von SGML definiert. Bis einschlie�lich HTML 4.x ist das auch heute noch der Fall. Im Zuge von XML und seiner wachsenden Bedeutung f�r immer mehr Dateiformate, die auch im Web ihren Einsatz finden, entstand der Wunsch, auch HTML mit Hilfe von XML zu definieren anstatt wie bisher mit SGML. Damit kein Versionenwirrwarr entsteht, entschloss man sich dazu, dieses neue, XML-basierte HTML mit einem neuen Namen und eigener Versionenkontrolle auszustatten. Heraus kam dabei XHTML (Extensible HyperText Markup Language = erweiterbare Hypertext-Auszeichnungssprache).
Seit Januar 2000 liegt XHTML 1.0 als Empfehlung des W3-Konsortiums vor und hat damit den gleichen verbindlichen Stellenwert wie etwa HTML 4.0. XHTML 1.0 ist nichts anderes als der Versuch, das SGML-basierte HTML 4.0 mit Hilfe von XML "nachzubauen". Dahinter steckt keine Spielerei von Designern k�nstlicher Sprachen, sondern es gibt gute Gr�nde daf�r:
XHTML ist also XML-gerechtes HTML. Der "Nachbau" von HTML 4.0 in XHTML 1.0 ist so weit gelungen, dass es in XHTML die gleichen Elemente, Attribute und Verschachtelungsregeln gibt wie in HTML. Systembedingt durch die Syntax von XML gibt es jedoch diverse Unterschiede im Detail, die Sie kennen m�ssen, wenn Sie Ihre Web-Seiten in XHTML statt in HTML schreiben wollen.
XHTML hat einen zwiesp�ltigen Charakter, denn einerseits soll es alle Vorteile einer XML-Sprache bieten. Andererseits soll XHTML eine praktische anwendbare Sprache f�r Webseiten sein. XHTML wurde deshalb so angelegt, dass eine Kompatibilit�t mit Browsern, die lediglich auf HTML-Syntax ausgelegt sind oder nicht �ber die n�tigen XML-F�higkeiten verf�gen, m�glich ist. Tats�chlich verarbeiten die verbreiteten Browser XHTML-Dokumente und stellen sie genauso wie HTML-Dokumente am Bildschirm dar. Die Voraussetzung ist, dass Sie einige Unterschiede beim Schreiben des Codes beachten, die auf dieser Seite aufgelistet sind. Einzelne Probleme, besonders mit �lteren Browsern, sind dennoch nicht auszuschlie�en.
Durch diese Kompatibilit�t zu HTML-Browsern ergeben sich zwei Arten der Verarbeitung von XHTML. Bei der Verarbeitung als HTML machen sich die Besonderheiten von XHTML beim Betrachten Ihrer Webseite nicht bemerkbar. Viele der Unterschiede zwischen HTML und XHTML kommen n�mlich erst dann zum tragen, wenn das XHTML-Dokument nach den Regeln von XML verarbeitet wird. Ebenso entfalten sich die Vorteile von XHTML erst dann, wenn beim Erstellen, �ndern oder Lesen tats�chlich XML-Techniken genutzt werden. Neuere Browser, die XHTML korrekt verarbeiten und darstellen k�nnen, sollten ein XHTML-Dokument daher sinnvollerweise als XML verarbeiten. Der Abschnitt MIME-Typen erl�utert, wie sich der Verarbeitungsmodus unter Ber�cksichtigung der Browserf�higkeiten bestimmen l�sst.
Der MIME-Typ f�r gew�hnliche HTML-Dokumente lautet stets
text/html
. XHTML-Dokumente k�nnen diesen MIME-Typ ebenfalls haben, wenn sie die Empfehlungen des W3-Konsortiums zur Abw�rtskompatibilit�t beachten. Gleichzeitig sind jedoch auch die allgemeinen MIME-Typen text/xml
und application/xml
erlaubt, die f�r alle von XML abgeleiteten Sprachen gedacht sind. Das W3-Konsortium hat zus�tzlich den MIME-Typ application/xhtml+xml
speziell f�r XHTML etabliert und empfiehlt, diesen neben text/html
zu benutzen. F�r das Erstellen von XHTML-Dokumenten hat dies direkt zun�chst keine Bedeutung. Wohl aber f�r die Kommunikation zwischen Web-Browser und Web-Server. Wenn der Server dem Browser die angeforderte XHTML-Datei mit dem Typ application/xhtml+xml
sendet, muss der Browser in der Lage sein, diesen MIME-Typ zu verarbeiten und Dateien dieses Typs am Bildschirm anzuzeigen. Anderenfalls kann es beispielsweise passieren, dass der Browser dem Anwender die Datei zum Download anbietet, statt sie ins Anzeigefenster zu laden. Das W3-Konsortium hat eine �bersicht �ber die Browserunterst�tzung der verschiedenen MIME-Typen zusammengestellt.
In der Praxis hat es sich durchgesetzt, XHTML-Dokumente mit dem MIME-Typ text/html
auszuliefern. Nur in den F�llen, in denen der Browser dem Server bei der HTTP-Anfrage �ber die Accept
-Angabe ausdr�cklich mitteilt, dass er application/xhtml+xml
verarbeiten kann, sollte die Datei mit diesem MIME-Typ gesendet werden. Auf der Seite Mit dem Apache XHTML-Seiten ausliefern werden M�glichkeiten vorgestellt, wie Sie XHTML-Dateien je nach F�higkeiten des verwendeten Browsern entweder mit
text/html
oder application/xhtml+xml
ausliefern k�nnen.
Der Unterschied der MIME-Typen ist kein rein theoretischer, denn der MIME-Typ bestimmt die Art der Verarbeitung des XHTML-Dokuments. Bei text/html
nutzen die Browser den herk�mmlichen HTML-Parser bei der Verarbeitung des Quellcodes. Die heute �blichen HTML-Parser der Browser lassen syntaktische Fehler im Dokument einfach durchgehen und versuchen das Dokument "irgendwie" anzuzeigen. Bei
application/xhtml+xml
behandelt ein Browser, der den MIME-Typ korrekt verarbeitet, die XHTML-Datei als echtes XML-Dokument und benutzt daher seinen XML-Parser. Der XML-Parser arbeitet im Gegensatz zum HTML-Parser nach festen, vorgegebenen Regeln. Er erwartet, dass das Dokument die strengen Syntaxregeln von XML einh�lt. Wenn er auf einen syntaktischen Fehler st��t, muss er die Verarbeitung abbrechen. Im Anzeigefenster des Browsers erscheint dann entweder nur eine Fehlermeldung anstelle des Dokuments, oder, wie bei vielen aktuellen Browsern, das Dokument nur bis zur Stelle des Fehlers. Wenn Sie also den MIME-Typ
application/xhtml+xml
verwenden, m�ssen Sie peinlichst darauf achten, dass Ihre XHTML-Dateien wohlgeformt sind. Dies k�nnen Sie beispielsweise mit dem
Validator des W3-Konsortiums pr�fen.
Neuere, XML-f�hige Browser (Internet Explorer ab Version 5.x, Netscape ab Version 6.x) behandeln Dateien je nach Systemkonfiguration abh�ngig von der Dateinamenerweiterung unterschiedlich, wenn sie sonst keine Hinweise (MIME-Typ) darauf haben, wie die Datei zu behandeln ist. Wenn Sie in einer Datei zwar alle Regeln von XHTML einhalten, die Datei aber mit den typischen Endungen .htm oder .html abspeichern, benutzen diese Browser ihre HTML-Parser. Speichern Sie die Datei dagegen mit einer anderen Endung ab, z.B. .xhtml, dann benutzen die Browser unter Umst�nden ihre XML-Parser. Dies wirkt sich genauso aus wie bei den verschiedenen MIME-Typen.
Bei der Darstellung XML-geparster, fehlerfreier XHTML-Dokumente ohne CSS oder andere Stylesheets reagieren die Browser unterschiedlich. Netscape 6 zeigt das Dokument wie ein HTML-Dokument an, also mit den voreingestellten Darstellungen etwa f�r �berschriften, Textabs�tze, Listen, Tabellen usw. Der Internet Explorer stellt solche Dokumente dagegen als reine Element-Baumstruktur dar. Erst wenn Sie die verwendeten Elemente mit Stylesheets formatieren, zeigt der Internet Explorer das Dokument in nicht-schematischer Form an.
Solange Sie also XHTML-Standard-konforme Dateien mit den HTML-typischen Endungen .htm oder .html abspeichern, erreichen Sie eine "normale" Darstellung im Browser, verhindern aber auch, dass die Dateien im Browser auf XML-Basis verarbeitet werden. Speichern Sie die Dateien dagegen unter einer anderen, dem Browser unbekannten oder mit dem MIME-Typ application/xml
verkn�pften Dateiendung ab, werden die Dateien auf XML-Basis verarbeitet - in diesem Fall d�rfen sie jedoch keine syntaktischen Fehler enthalten. Wenn im Anzeigefenster des Internet Explorers etwas anderes als ein Strukturbaum erscheinen soll, m�ssen Sie au�erdem Stylesheets verwenden, um die Elemente zu formatieren.
Der Unterschied hinsichtlich der Dateinamen ist mit dem der MIME-Typen verkn�pft. Ein Web-Server unterscheidet eine HTML-Datei f�r gew�hnlich �ber dessen Dateinamenerweiterung von einer XHTML-Datei. Dementsprechend w�hlt er einen geeigneten MIME-Typ, also etwa text/html
, application/xml
oder application/xhtml+xml
. Beim verbreiteten Web-Server Apache k�nnen Sie unter der Voraussetzung, dass der Server eine aktuelle Konfiguration besitzt, mit der Dateinamenerweiterung
.html
f�r MIME-Typ text/html
arbeiten. F�r application/xhtml+xml
k�nnen Sie die Erweiterung .xhtml
verwenden. Bei veralteten Konfigurationen m�ssen Sie hingegen damit rechnen, dass der Web-Server die Erweiterung .xhtml
nicht erkennt und die Datei stattdessen als Nur-Text sendet.
Das allererste, was am Anfang einer XHTML-Datei notiert werden sollte, ist eine so genannte XML-Deklaration. Damit geben Sie an, dass die folgende Datei XML-gerechte Daten enth�lt und welche
Zeichenkodierung die Datei verwendet (siehe auch
Computer und geschriebene Sprache). Eine solche Deklaration gibt es in HTML 4.0 nicht, sie ist also XHTML-spezifisch.
<?xml version="1.0" encoding="ISO-8859-1" ?>
Notieren Sie diese Angabe so wie in dem Beispiel gezeigt in der ersten Zeile einer XHTML-Datei. Derzeit ist beim Attribut version
der Wert 1.0
sinnvoll. Zwar gibt es bereits Version 1.1 des XML-Standards, Sie sollten jedoch 1.0
angeben, sofern Sie nicht aus bestimmten Gr�nden XML 1.1 verwenden wollen.
Beim Attribut encoding
k�nnen Sie die Zeichenkodierung angeben, nach der die die XHTML-Datei zu verarbeiten ist.
encoding="ISO-8859-1"
steht f�r die Kodierung ISO-8859-1 (Latin-1) f�r westeurop�ische Sprachen. Ein Zeichen belegt in der Datei immer ein Byte.
encoding="UTF-8"
steht f�r eine internationale Kodierung auf Basis der ISO/IEC-10646-Norm ( Unicode). Ein Zeichen belegt in der Datei eine variable Breite, z.B. ein Byte, aber auch zwei, drei oder vier Bytes.
encoding="UTF-16"
steht ebenfalls f�r eine internationale Kodierung auf Basis der ISO/IEC-10646-Norm (Unicode). Ein Zeichen belegt in der Datei je nach Unicode-Position entweder zwei oder vier Bytes.
Die Angabe einer XML-Deklaration ist nicht grunds�tzlich notwendig, aber in F�llen �u�erst ratsam. Denn bei der Verarbeitung als XML kommt der Angabe zur Zeichenkodierung eine besondere Wichtigkeit zu. Wenn Sie n�mlich keine solche Angabe machen, nehmen XML-Parser per Voreinstellung die Unicode-Kodierung UTF-8 an (siehe dazu Standard-Zeichenkodierung und Unicode-Unterst�tzung). Wenn die Kodierung Ihres Dokuments von UTF-8 abweicht, sollten Sie unbedingt eine XML-Deklaration verwenden, um die verwendete Kodierung anzugeben. Ansonsten bricht ein XML-Parser die Verarbeitung mit einer Fehlermeldung ab. Es ist zwar m�glich, die Kodierung der XHTML-Datei dem Web-Browser �ber die Kopfzeilen der HTTP-Antwort mitzuteilen. Dies erfordert allerdings eine spezielle Konfiguration des Web-Servers. Au�erdem ist eine solche Angabe in der Regel nutzlos, wenn der Anwender das Dokument auf seiner Festplatte speichert und ansieht.
Wenn das Dokument hingegen als HTML verarbeitet wird, kann die XML-Deklaration die Dokumenttyp-Weiche des Internet Explorers negativ beeinflussen, sodass Sie sie gegebenenfalls weglassen sollten. In jedem Fall sollten Sie eine
Kodierungsangabe in einem Meta-Element im Kopf des Dokuments einf�gen, damit das Dokument von HTML-Parsern korrekt verarbeitet werden kann.
XHTML 1.0 und HTML 4.0 haben unterschiedliche Dokumenttyp-Deklarationen. Die Dokumenttyp-Deklaration ("Doctype") nimmt Bezug auf die DTD (Dokumenttyp-Definition) und Sprachversion, die Sie in der Datei verwenden und an die Sie sich halten wollen. Ein strenger
Parser kann die Anzeige der Datei z.B. im Browser verhindern, wenn die Datei syntaktische Fehler enth�lt. Ma�geblich daf�r, was ein syntaktischer Fehler ist, ist die DTD, auf die Sie mit der Dokumenttyp-Deklaration Bezug nehmen.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Die Beispiele zeigen, wie Dokumenttypen f�r HTML 4.01 und XHTML 1.0 f�r die HTML-Variante Strict notiert werden. Auch in XHTML 1.0 gibt es die drei Varianten Strict, Transitional und Frameset, genau wie in HTML 4.0. Die beiden anderen Varianten f�r XHTML lauten:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
So wie oben notiert, kann ein strenger XML-Parser eine bestehende Internet-Verbindung erfordern und sich die DTD von der angegebenen Web-Adresse laden, um das Dokument gegen die darin formulierten Regeln zu pr�fen. Sie k�nnen die DTDs in Ihr eigenes Web-Projekt integrieren. Angenommen, Sie haben eine Startdatei namens index.htm und die xhtml1-strict.dtd in einem eigenen Unterverzeichnis namens html-dtd abgelegt, dann k�nnen Sie in der index.htm notieren:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "html-dtd/xhtml1-strict.dtd">
Sie k�nnen die erforderlichen DTDs f�r XHTML downloaden. Die Zip-Datei (31 KByte) enth�lt die DTDs f�r alle drei Varianten Strict, Transitional und Frameset sowie drei zus�tzliche Dateien mit Definitionen f�r benannte Zeichen.
Das einleitende <html>
-Tag hat in HTML meistens keine Attribute. In XHTML m�ssen Sie jedoch den Namensraum f�r XHTML explizit angeben.
<html> <!-- Inhalt der Datei --> </html>
<html xmlns="http://www.w3.org/1999/xhtml"> <!-- Inhalt der Datei --> </html>
Notieren Sie in XHTML im einleitenden <html>
-Tag immer das Attribut xmlns
, das einen XML-Namensraum bezeichnet, und weisen Sie ihm den Wert http://www.w3.org/1999/xhtml
zu. Dies ist ein spezieller URI, der nicht dazu gedacht ist, eine aufrufbare Web-Adresse anzugeben, sondern lediglich das Schema der Web-Adressierung nutzt, um einen weltweit eindeutigen Namen f�r den Namensraum zu vergeben. Die Web-Adresse existiert zwar, weil das W3-Konsortium so freundlich war, damit die H�ufung unn�tiger Aufruffehler auf ihrem Server zu vermeiden - doch die Adresse bedeutet nichts anderes als ein beliebiger eindeutiger Name.
Wenn Sie in HTML die Elemente html
, head
und body
weglassen, jedoch das Element title
und ansonsten g�ltiges HTML notieren, dann ist es aus Sicht von HTML ein fehlerfreies und vollst�ndiges Dokument. In XHTML besteht diese Freiheit nicht. Hier muss eine HTML-Datei zwingend das �bliche Grundger�st einhalten und ein head
- und ein body
-Element enthalten.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title>Titel</title> <h1>Text</h1>
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Text</title> <!-- gegebenenfalls andere Elemente im Kopfbereich --> </head> <body> <h1>Text</h1> </body> </html>
Zwar ist die gezeigte Form, ein HTML-4.0-Dokument zu notieren, f�r die Praxis alles andere als empfehlenswert, aber zumindest ist sie nicht verkehrt. Bei einem XHTML-Dokument muss dagegen immer das vollst�ndige Grundger�st notiert werden.
In HTML 4.0 ist es egal, ob Sie <TABLE BORDER="0">
, <TABLE border="0">
oder <Table Border="0">
notieren. HTML unterscheidet bei Namen von HTML-Elementen und Attributnamen nicht zwischen Gro�- und Kleinschreibung. Nur bei der Wertzuweisung an manche Attribute wird Gro�-/Kleinschreibung unterschieden - aber auch nur im Hinblick etwa auf Script-Sprachen. Bei Attributen mit festen erlaubten Werten, wie etwa align
, ist es egal, ob Sie CENTER
oder center
notieren. Nicht so bei XHTML. XML unterscheidet n�mlich strikt zwischen Gro�- und Kleinschreibung. Das bedeutet, <TABLE>
ist etwas anderes als <table>
. F�r XHTML wurde festgelegt, dass alle Elementnamen und Attributnamen klein geschrieben werden. Das Gleiche gilt auch f�r die festen Wertzuweisungen wie center
.
<OBJECT DATA="Video.mpg" TYPE="video/mpeg" ALIGN="LEFT"></OBJECT>
<object data="Video.mpg" type="video/mpeg" align="left"></object>
Schreiben Sie in XHTML immer alle Elementnamen wie object
oder Attributnamen wie data
oder type
klein. Schreiben Sie Wertzuweisungen im Zweifelsfall ebenfalls immer klein, also beispielsweise bei align="left"
. Nur dort, wo in einer Wertzuweisung die Gro�schreibung von bestimmten Buchstaben erforderlich ist, wie im Beispiel beim Dateinamen Video.mpg
, k�nnen Sie den Wert so schreiben wie es erforderlich ist.
In HTML 4.0 gibt es diverse leere Elemente. Das sind Elemente ohne Inhalt. Das Abschluss-Tag ist deshalb verboten, weil die Elemente als inhaltsleer definiert sind. Beispiele:
<img>
, <br>
, <input>
, <hr>
.
In XML-basierten Sprachen, also auch in XHTML, m�ssen solche leeren Elemente gesondert gekennzeichnet werden.
<p>Text mit<br>Zeilenumbruch</p> <p><img src="bild.png" alt="ein Bild"></p>
<p>Text mit<br />Zeilenumbruch</p> <p><img src="bild.png" alt="ein Bild" /></p>
Notieren Sie unmittelbar vor der schlie�enden spitzen Klammer des alleinstehenden Tags einen Schr�gstrich, sodass am Ende die Zeichenfolge />
steht. Vor dem Schr�gstrich sollte ein Leerzeichen stehen, um die Funktionalit�t in alten Browsern zu gew�hrleisten. Alternativ dazu k�nnen Sie auch ein Element mit Anfangs- und End-Tag notieren, z.B. <br></br>
. Dabei darf jedoch nichts, auch kein Leerzeichen und kein Zeilenumbruch, zwischen dem Anfangs- und dem End-Tag stehen, ansonsten ist es ung�ltiges XHTML.
Wenn Sie Elemente, die Inhalt haben k�nnen, ohne Inhalt verwenden, z.B. <p></p>
, dann notieren Sie sie in XHTML jedoch besser in dieser Form und nicht in der Form <p />
. Denn die verbreiteten HTML-Parser behandeln <p />
wie <p>
.
In HTML 4.0 gibt es diverse Elemente mit optionalem Abschluss-Tag. Beispiele:
<body>
, <td>
, <dd>
, <dt>
, <option>
.
Notieren Sie solche Elemente in XHTML immer mit Anfangs- und Abschluss-Tag.
<select name="Auswahl" size="1"> <option>1. Eintrag <option>2. Eintrag <option>3. Eintrag </select>
<select name="Auswahl" size="1"> <option>1. Eintrag</option> <option>2. Eintrag</option> <option>3. Eintrag</option> </select>
Alle Elemente, die Inhalt haben k�nnen, m�ssen in XHTML mit Anfangs- und Abschluss-Tag gekennzeichnet werden.
In HTML d�rfen Sie Attributen Werte zuweisen, ohne diese mit Hochkommata zu umschlie�en. In XHTML ist dies zwingend erforderlich.
<a name=anker>Anker</a>
<a name="anker">Anker</a>
Alle Attributwerte m�ssen in XHTML innerhalb von Anf�hrungszeichen notiert werden.
In HTML 4.0 gibt es diverse Attribute, die keine Wertzuweisung erhalten. Beispiele:
<input checked>
, <textarea readonly>
, <input disabled>
, <select multiple>
, <hr noshade>
, <td nowrap>
, <script defer>
.
In XML-basierten Sprachen dagegen muss allen Attributen ausdr�cklich ein Wert zugewiesen werden. Da diese Attribute nur einen m�glichen Wert annehmen k�nnen, hat man sich darauf verst�ndigt, als Wert einfach den Attributnamen zu nehmen.
<td nowrap>Inhalt</td> <p>Text mit<hr noshade>Trennlinie</p>
<td nowrap="nowrap">Inhalt</td> <p>Text mit<hr noshade="noshade" />Trennlinie</p>
Weisen Sie leeren Attributen in XHTML einfach ihren eigenen Namen als Wert zu. Bei den meisten bekannten Browsern gibt es damit keine Probleme.
Bei Wertzuweisungen an Attribute m�ssen Sie in XHTML besser aufpassen als in HTML. Leerzeichen sind erlaubt wo erforderlich, doch Zeilenumbr�che sollten Sie vermeiden.
<p title="Anfang der Geschichte">Text Text Text</p>
<p title="Anfang der Geschichte">Text Text Text</p>
Sie sollten sich nicht darauf verlassen, dass die Browser mit Zeilenumbr�chen in Attributwerten so umgehen, wie Sie es erwarten. Verwenden Sie m�glichst keine Zeilenumbr�che.
In HTML k�nnen Sie Verweise zu Ankern notieren, z.B.
<a href="#anker">Verweis</a>
. Der entsprechende Anker ist dann notiert mit <a name="anker">irgendwas</a>
. Auch andere Attribute verwenden diese Technik, wie etwa das usemap
-Attribut beim img
-Element zum Verweis auf ein map
-Element, bei dem ein entsprechendes name
-Attribut notiert ist.
In XHTML funktionieren solche Verweise nicht. XML ben�tigt Namen vom Typ "ID", also dokumentweit eindeutige Bezeichner, um solche Beziehungen aufl�sen zu k�nnen. In XHTML k�nnen Sie das Universalattribut
id
verwenden, um solche Verweise zu realisieren. Es ist zwar bereits in HTML 4 m�glich, einen Anker alleine mit dem id
-Attribut zu realisieren, z.B. <h2 id="anker">�berschrift</h2>
, aber dennoch interpretieren manche alte Browser wie Netscape 4 nur <a name="anker">irgendwas</a>
als Anker. Sie sollten daher beide Attribute notieren, damit sowohl �ltere als auch neueren Browser den Anker verstehen und der Anker auch dannn funktioniert, wenn der Browser den XHTML-Verarbeitungsmodus einsetzt.
<a href="#anker">Verweis</a> <p>viel Inhalt</p> <a name="anker">irgendwas</a>
<a href="#anker">Verweis</a> <p>viel Inhalt</p> <a id="anker" name="anker">irgendwas</a>
<a href="#anker">Verweis</a> <p>viel Inhalt</p> <a id="anker">irgendwas</a>
Notieren Sie in dem a
-Element f�r den Anker beide Attribute id
und name
. Weisen Sie beiden Attributen exakt den gleichen Namen zu. Ein Browser, der den Verweis nach XHTML-Logik ausf�hrt, ben�tigt das id
-Attribut, w�hrend ein Browser, der den Verweis nach HTML-Logik ausf�hrt, das name
-Attribut zur Ermittlung des Ankers verwendet. In XHTML 1.1 darf das name
-Attribut nicht mehr verwendet werden.
XML-basierte Sprachen benutzen normalerweise anstelle von lang
das XML-Universalattribut xml:lang
. Da das lang
-Attribut in XHTML jedoch ebenfalls zur Verf�gung steht, existieren also zwei Attribute f�r die gleiche Sache. XHTML-Parser bevorzugen im Zweifelsfall das Attribut xml:lang
, das aber von reinen HTML-Parsern nicht erkannt wird. Notieren Sie deshalb in der Praxis stets beide Varianten, falls Sie das Attribut verwenden.
<html lang="de"> <!-- Inhalt der Datei --> </html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de"> <!-- Inhalt der Datei --> </html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de"> <!-- Inhalt der Datei --> </html>
Die Sprache des Dokuments wird durch die Angabe lang="de"
im html
-Element dokumentweit festgelegt. Im XHTML 1.0-Beispiel kommt, neben der Namensraumangabe, zus�tzlich das Attribut
xml:lang="de"
hinzu. Die Reihenfolge der Attribute spielt keine Rolle. In XHTML 1.1 entf�llt das lang
-Attribut zugunsten von xml:lang
.
In HTML 4.0 ist der Inhalt der Elemente script und
style als "CDATA" festgelegt, w�hrend er in XHTML als "PCDATA" behandelt wird. Im Klartext bedeutet das, dass bei HTML 4.0 innerhalb eines
Script-Bereichs oder
Style-Bereichs HTML-eigene Zeichen wie
<
, >
, &
und "
nicht maskiert werden m�ssen. Nicht so in XHTML. Wenn Sie beispielsweise in einem JavaScript innerhalb einer Bedingung vergleichen, ob ein Wert kleiner oder gr��er als ein anderer Wert ist, m�ssen Sie die spitzen Klammern au�erhalb einer Zeichenkette notieren und k�nnen sie daher an der Stelle auch nicht maskieren. Um das Problem zu l�sen, k�nnen Sie das Script in einen
CDATA-Abschnitt anschlie�en. Dies ist eine XML-typische Notation.
Da XML-Parser HTML-Kommentare (und damit auch den enthaltenen JavaScript-Code) entfernen d�rfen, sollte auf die fr�her �bliche Auskommentierung des Scripts verzichtet werden, die f�r die heute verwendeten Browser auch nicht mehr erforderlich ist.
<script type="text/javascript"> <!-- /* JavaScript-Kommentar: jetzt folgt ein kleines Script */ if (parseInt(navigator.appVersion) < 5) alert("Oh, ein sehr alter Browser"); /* und damit ist das Script auch schon zu ende */ //--> </script>
<script type="text/javascript"> /* <![CDATA[ */ /* JavaScript-Kommentar: jetzt folgt ein kleines Script */ if (parseInt(navigator.appVersion) < 5) alert("Oh, ein sehr alter Browser"); /* und damit ist das Script auch schon zu ende */ /* ]]> */ </script>
Der "CDATA"-Abschnitt beginnt mit <![CDATA[
und endet mit ]]>
. Ohne diese Umklammerung w�rde ein XML-Parser das <
-Zeichen innerhalb des Scripts als Fehler ankreiden. Damit der Browser die Anfang- und Endmarkierung des CDATA-Abschnitts nicht als JavaScript-Code zu interpretieren versucht, werden sie durch JavaScript-Kommentare vor ihm versteckt. Den Inhalt von
style
-Elementen k�nnen Sie ebenso umschlie�en und analog die Markierungen mit CSS-Kommentaren vor dem CSS-Parser verbergen.
Um Fehler bei JavaScript-Interpretern zu vermeiden, bleibt die M�glichkeit, JavaScript in separaten Dateien zu notieren. Auch bei Stylesheets besteht die M�glichkeit,
Formate zentral in einer separaten CSS-Datei zu definieren.
In der Dokumenttyp-Definition von HTML 4.0 sind einige Ausnahmen bei Verschachtelungsregeln f�r Elemente definiert. Dies ist beispielsweise bei dem a
-Element n�tig, das kein anderes a
-Element enthalten darf. Die DTD kann zwar festgelegen, dass ein a
-Element nicht direkt ein a
-Element enthalten darf, sodass <a><a>...</a></a>
nicht erlaubt ist. Ein a
-Element darf jedoch andere Elemente enhalten, die ihrerseits ein a
-Element enthalten d�rfen, z.B. span
. In diesem Fall greifen die normalen Regeln nicht und es ist eine Ausnahmeregel n�tig, um z.B. <a><span><a>...</a></span></a>
zu verbieten.
Mit Hilfe von SGML ist die Formulierung solcher Ausnahmen m�glich. So ist beispielsweise festgelegt, dass ein a
-Element auch als indirektes Kindelement kein anderes a
-Element enthalten darf. XML dagegen bietet keine M�glichkeit, solche Ausnahmen zu formulieren. In den XML-basierten Dokumenttyp-Definitionen von XHTML fehlen solche Verschachtelungsverbote daher. Somit ist z.B. <a><a>...</a></a>
gem�� den Regeln der DTDs von XHTML zun�chst erlaubt. Um eine m�glichst hunderprozentige Kompatibilit�t zwischen HTML und XHTML zu erreichen, blieb dem W3-Konsortium nur der Ausweg, diese Verschachtelungsverbote verbal als "normativen Anhang" zu den DTDs zu erkl�ren.
Folgende Verschachtelungsregeln sind betroffen:
a
-Elemente d�rfen keine weiteren a
-Elemente enthalten.pre
-Elemente d�rfen keine Elemente img
, object
, big
, small
, sub
oder sup
enthalten.button
-Elemente d�rfen keine Elemente input
, select
, textarea
, label
, button
, form
, fieldset
, iframe
oder isindex
enthalten.label
-Elemente d�rfen keine weiteren label
-Elemente enthalten.form
-Elemente d�rfen keine weiteren form
-Elemente enthalten.Wenn Sie Ihr XHTML-Dokument z.B. mit dem W3C-Validator auf syntaktische Korrektheit pr�fen, werden solche Verschachtelungsfehler nicht gefunden, denn dieser Validator pr�ft das Dokument unter Ber�cksichtigung der Dokumenttyp-Definition. Alternativ k�nnen Sie den
XHTML 1.0 Schema-Validator verwenden, der neben anderen strengeren Tests die Einhaltung der genannten Verschachtelungsregeln �berpr�ft.
Das folgende Beispiel zeigt ein vollst�ndiges XHTML-Dokument, in dem Sie die Unterschiede zu HTML noch einmal im Zusammenhang sehen k�nnen. Sie k�nnen das zugeh�rige Anzeigebeispiel einmal als Datei mit der Endung .htm, einmal als Datei mit der Endung .xhtml und einmal als Datei mit der Endung .xml aufrufen, um selber zu testen, was in Ihrem Browser dann passiert. Es handelt sich um exakt den gleichen Inhalt, nur die Dateinamen sind unterschiedlich.
Anzeigebeispiel: So sieht's aus (beispiel.htm)
Anzeigebeispiel: So sieht's aus (beispiel.xhtml)
Anzeigebeispiel: So sieht's aus (beispiel.xml)
<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" /> <title>Wenn HTML zu XHTML wird</title> </head> <body> <h1><a name="start" id="start">Wenn HTML zu XHTML wird</a></h1> <p>Dann müssen alle Elemente mit Inhalt ein End-Tag haben.</p> <p>Leere Elemente<br />müssen einen Schrägstrich am Ende haben.</p> <hr noshade="noshade" /> <p>Leere Attribute erhalten ihren eigenen Namen als Wert zugewiesen.</p> <p><a href="#start">Verweise zu Ankern</a> springen zum Zielelement aufgrund des id-Attributs, nicht das name-Attributs.</p> <script type="text/javascript" src="zeitstempel.js"></script> <!-- So werden Scripts am sichersten eingebunden. --> </body> </html>
Bei der Dokumenttyp-Deklaration ist nur xhtml1-transitional.dtd
als URI notiert, ohne weitere Web-Adresse oder Pfadangabe. Das liegt daran, dass die DTD mit dem Namen xhtml1-transitional.dtd im gleichen Verzeichnis wie das Dokument selber liegt.
![]() | |
![]() |
![]() |
![]() |
![]() |
![]() ![]() ![]() |
© 2007 Impressum