HTML 5 und XHTML 5 im Vergleich (WHATWG)

Übersetzung eines Artikels der WHATWG vom 27. Februar 2007. Schwerpunkt: Webentwicklung (RSS-Feed fĂŒr alle Themen).

Bitte beachten Sie, dass die hier vorliegenden Informationen auf der aktuellen Spezifikation von (X)HTML 5 basieren. Manche der Themen lassen sich nicht auf vorherige Versionen von HTML anwenden. (Anmerkung des Übersetzers: Zeitgleich ermöglicht dieses Dokument auch einen groben Vergleich zwischen den zurĂŒckliegenden HTML- und XHTML-Spezifikationen.)

Inhalt

  1. Unterschiede zwischen HTML 5 und XHTML 5
    1. MIME-Typen
    2. Parsen (Syntaxanalyse)
    3. Syntax
    4. Markup
    5. Zeichenkodierung
    6. Scripting
    7. Stylesheets
  2. Unterschiede zwischen HTML 4.01 und HTML 5
    1. MIME-Typ
    2. Parsen von HTML
    3. Markup
    4. Zeichenkodierung

Unterschiede zwischen HTML 5 und XHTML 5

Obwohl HTML und XHTML Ähnlichkeiten in ihrer Syntax zu haben scheinen, unterscheiden sie sich in mehrerlei Hinsicht erheblich.

MIME-Typen

  • XHTML muss mit einem XML-MIME-Typ wie application/xml oder application/xhtml+xml ausgeliefert werden.
  • HTML muss als text/html ausgegeben werden.

Der MIME-Typ bestimmt, welche Art von Dokument benutzt wird. Wenn Sie versuchen, XHTML als text/html zu senden, verwenden Sie tatsÀchlich nur HTML, möglicherweise mitsamt Syntaxfehlern.

Technisch gesehen und gemĂ€ĂŸ Spezifikation darf XHTML 1.0 als text/html ausgeliefert werden, aber aufgrund obenstehenden Umstands wird ein solches Dokument als HTML- und nicht als XHTML-Dokument betrachtet.

Parsen (Syntaxanalyse)

XHTML unterliegt XML-Syntaxanalyseanforderungen. HTML gebraucht seine eigenen, die vielmehr dem Àhneln, wie Browser tatsÀchlich heutzutage HTML handhaben.

  • In XHTML sind Wohlgeformtheitsfehler (»Well-Formedness Errors«) fatal. In HTML sind die Fehlerhandhabungsregeln wesentlich toleranter. Wohlgeformtheitsfehler, die ebenso Syntaxfehler in HTML darstellen, sind die folgenden:
    • Nicht kodierte kaufmĂ€nnische Und (& anstatt &amp;) und »Kleiner als«-Zeichen (< anstatt &lt;) (nicht auf CDATA anwendbar).
    • Kommentare, die zusĂ€tzliche Bindestrichpaare beinhalten oder mit einem Bindestrich enden, wie
      • <!-- syntax -- error --> oder
      • <!-- syntax error --->.
    • Inkongruente, unpassende »End-Tags« (nicht anwendbar auf Elemente mit optionalen Tags).
    • Nicht geschlossene Elemente.
    • Unerwartete Zeichen innerhalb von oder vor Attributsnamen.
    • Unerwartetes Vorkommen von EOF.
    • Unerwartete Zeichen vor dem DOCTYPE-Namen.
    • Fehlender DOCTYPE-Name.
    • Ein PUBLIC-Identifikator in einem DOCTYPE ohne SYSTEM-Identifikator. (Anmerkung: Die Benutzung eines der beiden entspricht einem Syntaxfehler in HTML 5; in XML ist nur dem SYSTEM-Bezeichner gestattet, allein vorzukommen.)
    • End-Tags mit Attributen.
    • Unerwartete End-Tags (in HTML kann ein unerwartetes </br> oder </p> dafĂŒr sorgen, dass ein davorstehendes Start-Tag impliziert wird).
  • Die interne Teilmenge ist in XML erlaubt, aber bedeutungslos (und verboten) in HTML.
    • In manchen FĂ€llen wĂŒrde eine interne Teilmenge in HTML teilweise inline gerendert werden.
  • Die Zeichensequenz ]]> entspricht in XHTML, sofern sie nicht das Ende einer CDATA-Sektion markiert, einem Wohlgeformtheitsfehler, ist in HTML jedoch valid.
  • XHTML: <![CDATA[
]]> kennzeichnet einen CDATA-Abschnitt. In HTML ist dies ein falscher Kommentar.
  • <?foo 
?> entspricht in XHTML einer Verarbeitungsanweisung (»Processing Instruction«), stellt in HTML jedoch einen falschen Kommentar dar.
  • In HTML sorgt der abschließende SchrĂ€gstrich, der zur Syntax leerer Elemente gehört, fĂŒr einen Parsefehler bei nicht-leeren Elementen (siehe unten), wird aber immer ignoriert.
  • In HTML werden script- und style-Elemente als CDATA geparst. (Anmerkung: Die Definition von CDATA unterscheidet sich dabei von der in XML.) In XML werden diese als normale Elemente geparst, was bedeutet, dass Kommentare als echte Kommentare behandelt werden, und Sachen, die wie Start-Tags aussehen, sind auch tatsĂ€chlich Start-Tags.
  • In HTML werden die title- und textarea-Elemente als RCDATA geparst. (Anmerkung: Die Definition von RCDATA unterscheidet sich dabei von der in SGML, und es gibt kein RCDATA in XML.)
  • In HTML wird das noscript-Element, sofern Scripting erlaubt sind, als CDATA geparst. Wenn Scripting nicht aktiviert ist, wird es als PCDATA geparst. In XHTML hat dieses Element keinen Effekt und kann nicht dazu verwendet werden, Inhalte darzustellen, wenn Scripting deaktiviert ist.
  • In HTML werden die iframe-, noembed- und noframes-Elemente als CDATA geparst. In XHTML werden sie als normale Elemente geparst und sorgen dementsprechend nicht dafĂŒr, dass ihre Inhalte nicht verwendet werden.
  • Leerraumzeichen in Attributsnamen werden in XHTML zu Leerzeichen normalisiert.
  • Elemente mit optionalen Tags werden unter bestimmten Bedingungen impliziert.
  • In HTML werden base-, link-, meta-, style- und title-Elemente mit innerhalb des body vorkommenden Tags in den head verschoben. In XHTML bleiben sie an der Stelle, an der sie angegeben wurden.
  • In HTML werden Tags fĂŒr bestimmte Elemente, die außerhalb des Kontexts erscheinen, ignoriert. Dies betrifft caption, col, colgroup, frame, frameset, head, option, optgroup, tbody, td, tfoot, th, thead und tr.
  • Das plaintext-Element besitzt spezielle Parseanforderungen in HTML (es ist jedoch verboten).
  • In HTML gibt es noch viele andere besondere Handhabungen von SonderfĂ€llen und Fehlerbedingungen, die hier nicht alle aufgefĂŒhrt werden.

Syntax

  • In HTML ist der DOCTYPE erforderlich, wĂ€hrend er in XHTML optional ist.
  • In XHTML sind Tag- und Attributsnamen case-sensitive. In HTML ist die Schreibweise unerheblich.
  • In XHTML erfordern nicht-leere Elemente sowohl ein öffnendes als auch ein schließendes Tag. In HTML erlauben bestimmte Elemente die Auslassung von einem von beiden oder beiden:
    • html (beide);
    • head (beide);
    • body (beide);
    • li (End-Tag);
    • dt (End-Tag);
    • dd (End-Tag);
    • p (End-Tag);
    • colgroup (beide);
    • thead (End-Tag);
    • tbody (beide);
    • tfoot (End-Tag);
    • tr (End-Tag);
    • td (End-Tag);
    • th (End-Tag).
  • In XHTML dĂŒrfen leere Elemente entweder die Syntax fĂŒr leere Elemente verwenden (<br/>) oder ein dem Start-Tag unmittelbar folgendes End-Tag besitzen (<br></br>). In HTML ist die Leeres-Element-Syntax (abschließender SchrĂ€gstrich) bei den entsprechenden Elementen gestattet, bei anderen Elementen aber verboten. Dieses Vorgehen mit leeren Elementen dient jedoch keinem Zweck und kann unterlassen werden. Schließende Tags fĂŒr leere Elemente sind in HTML nicht zulĂ€ssig.
    • base, link, meta, hr, br, img, embed, param, area, col und input.
    • Die folgenden Elemente werden aufgrund der Parseanforderungen als leer behandelt, aber der abschließende SchrĂ€gstrich ist nicht erlaubt, da sie obsolet und nicht standardisiert sind: basefont, bgsound, spacer und wbr. (Da diese Elemente nicht erlaubt sind, macht dies aber kaum einen Unterschied.)
  • HTML lĂ€sst Attributsminimierung zu (das Auslassen des Attributswerts), XHTML nicht.
  • HTML erlaubt den Gebrauch nicht in AnfĂŒhrungszeichen gesetzter Attributswerte, XHTML nicht.
  • XHTML erlaubt den Gebrauch von CDATA-Sektionen, HTML nicht.
  • XHTML gestattet die Verwendung von Verarbeitungsanweisungen, HTML nicht.
  • In HTML sind alle EntitĂ€tsreferenzen vordefiniert und erfordern keine DTD. Da es jedoch keine DTD fĂŒr XHTML 5 gibt, können keine EntitĂ€tsreferenzen in XHTML verwendet werden (ausschließlich der fĂŒnf vordefinierten Referenzen: &amp;, &lt;, &gt;, &quot; und &apos;).
    • Sie dĂŒrfen bei Gebrauch Ihres eigenen, validierenden Parsers Ihre eigene DTD bereitstellen; seien Sie sich jedoch darĂŒber im klaren, dass Browser keine validierenden Parser verwenden und die DTD nicht lesen werden.
  • Der gĂŒltige Satz von Unicode-Zeichen in XML 1.0 ist gegenĂŒber dem in HTML begrenzt.
  • NamensraumprĂ€fixes sind in XHTML erlaubt, aber in HTML verboten.

Markup

  • Die Namensraumdeklaration (xmlns-Attribut) ist in XHTML erforderlich. Das xmlns-Attribut darf zudem auf dem html-Element in HTML erscheinen, unter der Bedingung, dass es den Wert https://www.w3.org/1999/xhtml hat.
    • <html xmlns="https://www.w3.org/1999/xhtml">.
    • In HTML hat das xmlns-Attribut keinen Effekt. Es entspricht gewissermaßen einem »Talisman«. Es ist lediglich gestattet, um die Migration von und zu XHTML etwas leichter zu machen. Wenn es von einem HTML-Parser geparst wird, resultiert das Attribut in einem »Null«-Namensraum.
    • In XML (zusammen mit einem XML-Namensraum-bewussten Parser) stellt das xmlns-Attribut einen Teil des Namensraumdeklarationsmechanismus dar, und ein Element kann gar kein xmlns-Attribut im »Null«-Namensraum besitzen.
  • XHTML erlaubt den Gebrauch von Non-XHTML-Elementen und -Attributen (in unterschiedlichen NamensrĂ€umen). HTML erlaubt dies nicht.
  • XHTML verwendet das xml:lang-Attribut, HTML gebraucht statt dessen lang.
  • XML-ID fĂŒhrt xml:id ein, das zusammen mit XHTML verwendet werden kann. In HTML hat dies keinen Effekt.
  • Das noscript-Element darf in HTML eingesetzt werden, ist aber in XHTML verboten.
  • HTML verwendet das base-Element, XHTML gebraucht statt dessen das xml:base-Attribut.
  • In XHTML dĂŒrfen p-Elemente strukturierte Inline-Elemente beinhalten, einschließlich blockquote, dl, menu, ol, ul, pre und table. Bei der HTML-Serialisierung ist dies aufgrund von AbwĂ€rtskompatibilitĂ€tseinschrĂ€nkungen nicht möglich (obwohl durch DOM-Manipulation durchfĂŒhrbar).
  • In XHTML dĂŒrfen table-Elemente tr-Kindelemente beinhalten. Bei der HTML-Serialisierung ist dies aufgrund von AbwĂ€rtskompatibilitĂ€tseinschrĂ€nkungen nicht möglich (obwohl durch DOM-Manipulation durchfĂŒhrbar).

Zeichenkodierung

  • In XHTML darf die XML-Deklaration verwendet werden, um die Zeichenkodierung (Encoding) zu spezifizieren. Die XML-Deklaration ist in HTML verboten.
  • Statt dessen darf in HTML das meta-Element verwendet werden. Das http-equiv-Attribut des meta-Elements ist in XHTML verboten und wird, falls vorhanden, ignoriert.
  • Den XML-Regeln entsprechend ist die Standard-Zeichenkodierung fĂŒr XHTML UTF-8 oder UTF-16. Falls in HTML die Kodierung nicht spezifiziert wird, sollte sie durch implementierungsspezifische Heuristiken oder Fallback auf einen Standardwert bestimmt werden. (Anmerkung: Dieser Abschnitt der Spezifikation wurde noch nicht fertiggestellt.)

Scripting

  • document.write() und document.writeln() können nicht in XHTML, aber in HTML eingesetzt werden.
  • In XHTML erfordert der Gebrauch der innerHTML-Eigenschaft, dass die Zeichenkette ein wohlgeformtes XML-Fragment darstellt.
  • DOM-APIs sind in XHTML case-sensitive, wĂ€hrend sie in HTML zum Teil case-insensitive sind. (Dies gilt nicht fĂŒr Elemente, die sich nicht im HTML-Namensraum befinden.)
    • Element.tagName, Node.nodeName und Node.localName geben den Wert in Großschrift zurĂŒck.
    • Document.createElement() ist case-insensitive (die kanonische Form ist in Kleinschrift).
    • Element.setAttributeNode() Ă€ndert den Attributsnamen in Kleinschrift.
    • Document.getElementsByTagName() und Element.getElementsByTagName() sind case-insensitive.
    • Document.renameNode(): Wenn der neue Namensraum dem HTML-Namensraum entspricht, muss der neue qualifizierte Name in Kleinschrift konvertiert werden, bevor die Umbenennung stattfindet.
  • In HTML kreiert Document.createElement() ein Element im HTML-Namensraum. In XML (einschließlich XHTML) wird der Namensraum sowohl durch DOM 2 als auch DOM 3 als »Null« definiert.
    • In XHTML fehlt es Browsern in dieser Hinsicht an InteroperabilitĂ€t. In Firefox ist der Namensraum abhĂ€ngig vom MIME-Typ, in Opera hĂ€ngt er vom Root-Element ab, und in Safari ist er immer Null.

Stylesheets

  • Selektoren, wie sie in CSS verwendet werden, sind in XHTML abhĂ€ngig von der Schreibweise (case-sensitive), sind in HTML jedoch fallunabhĂ€ngig.
  • CSS erfordert eine spezielle Handhabung des body-Elements in HTML, um den Hintergrund der Leinwand zu gestalten, die nicht fĂŒr XHTML gilt.

Unterschiede zwischen HTML 4.01 und HTML 5

MIME-Typ

Sowohl HTML 4.01 als auch HTML 5 verwenden text/html.

Content-Type: text/html; charset=UTF-8

Parsen von HTML

  • HTML 2.0 bis HTML 4.01 basieren formell auf SGML, aber von Browsern wurden keine SGML-Parser implementiert. Beachten Sie hierzu 4.2 (SGML) und B.3 (SGML-Implementierungsanmerkungen) der HTML-4.01-Spezifikation. Diese entsprechen non-normativen Abschnitten der Spezifikation, stellen aber bereits den Unterschied zwischen HTML- und SGML-User-Agents heraus.
  • HTML 5 wird durch seine eigenen Parseanforderungen definiert, die darauf beruhen, wie Browser tatsĂ€chlich mit HTML umgehen.

Markup

Obsolete Attribute

Manche der in HTML 4 definierten Elemente werden nicht in HTML 5 berĂŒcksichtigt. Es folgt eine aktuelle Liste der obsoleten Attribute (diese kann sich Ă€ndern, bitte beachten Sie die Spezifikation).

  • html@version;
  • head@profile;
  • a@rev, link@rev;
  • a@target, area@target, base@target, form@target (wie in Web Forms 2.0 erwĂ€hnt), link@target;
  • a@charset, link@charset, script@charset;
  • table@summary;
  • td@headers, th@headers;
  • td@axis, th@axis;
  • param@valuetype;
  • object@standby;
  • meta@scheme;
  • object@archive.

Dazu umfasst HTML 5 keins der prĂ€sentationsbezogenen Attribute, die es in HTML 4 gibt (einschließlich der von table). Jegliche bei Elementen definierten Attribute, die es nicht in HTML 5 gibt, gibt es (offensichtlich) auch nicht in XHTML 5.

Obsolete Elemente

Die folgenden Elemente gibt es in HTML 4, werden aber nicht in HTML 5 spezifiziert:

  • acronym (verwenden Sie statt dessen abbr);
  • applet (verwenden Sie statt dessen object);
  • basefont;
  • big;
  • center;
  • dir;
  • font;
  • frame;
  • frameset;
  • isindex;
  • noframes;
  • noscript (nur in XHTML);
  • s;
  • strike;
  • tt;
  • u.

Zeichenkodierung

HTML-4-Algorithmus
  1. HTTP-charset-Parameter in einem Content-Type-Feld;
  2. meta-Deklaration mit auf Content-Type gesetztem http-equiv-Attribut und einem fĂŒr charset gesetzten Wert;
  3. charset-Attribut bei einem eine externe Ressource designierenden Element.

Quelle: 5.2.2 (Angabe der Zeichenkodierung), HTML-4.01-Spezifikation.

HTML-5-Algorithmus

Dieser ist in der Spezifikation gegenwÀrtig noch nicht definiert. Beachten Sie bitte die Dokumentation zur Zeichenkodierungsermittlung.