ich hab' mir mal überlegt, was passiert, wenn ein ganz sturer Parser auf eine gültige HTML- oder XHTML-Datei stößt. Da kommt bei HTML sicherlich als erstes die Frage, ob das eine oder andere Attribut nun Anführungszeichen haben muss, oder nicht.
Nicht für den Parser, dafür gibt es klare Regeln die in der Tat sehr leicht zu implmentieren sind (und auch für Autoren zu merken).
Wer ist eigentlich beim W3C auf den Bolzen gekommen, dass man die Dinger manchmal weglassen kann? Imho wird's dadruch wahnsinnig chaotisch...
Auf die Idee ist niemand beim W3C gekommen, die gab es schon lange bevor überhaupt jemand an das World Wide Web gedacht hat.
Noch schöner sind die optionalen oder ganz fehlenden End-Tags - woher soll der Parser (der ja noch nichts von der Bedeutung der Tags weiß!) wissen, ob ein nicht vorhandenes Endtag nun ein Fehler ist oder so ok..?
Das steht in der Dokumenttyp-Definition...
Sicher kann er in der DTD nachsehen, aber dafür muss er erstmal die komplette Dateio gelesen haben
Die DTD? Ja, alternativ kann er sich auch nur so verhalten, als hätte er es getan, aber das ist nebensächlich. Falls du das Quelldokument meinst, muss ich widersprechen.
- es könnte ja sein, dass das Tag (z.B. ein <li>) doch noch irgendwo geschlossen wird...
Nein, der Parser zerlegt das Quelldokument in syntaktische Einheiten. Eine solche wäre das Start-Tag <li>. Danach findet er z.B. Zeichendaten oder andere Elemenente. In dem Moment, wo er ein Start-Tag für ein Element findet, das nicht zum Inhaltsmodell des <li>-Elements gehört (also z.B. <li> selber) schliesst er intern das vorhergehende <li>.
Somit kann also ein stur nach HTML arbeitender Browser auch erst etwas anzeigen, wenn alles geladen ist - vorher weiß er ja nichtnur nicht, ob die Datei gültigt, noch wo nun das eine oder andere Tag nun zu Ende ist. Insbesondere bei einem <li> stellt sich dann auch noch auf der Darstellungs-Ebene die Frage, wo man das Ding nun als "zu Ende" annehmen kann (oder muss).
Das ist einfach nicht richtig. Es gibt sogar sehr genaue Beschreibungen von progressiven Wiedergabemodellen für HTML-Dokumente, ebenso für Dokumente, die CSS nutzen. Der Parser kann doch problemlos
<li>... ... ...
gelesen haben, dann auf ein
<strong>
treffen und den folgenden Text entsprechend unterschiedlich wiedergeben, *während* er liesst. Wo siehst du da ein Problem? Aussenränder sind bei sowas natürlich ein Problem, ein
ul { border: thin solid red }
welches beides oben umschliesst ist natürlich beim laden nicht unebdingt zufriedenstellend anzzeigen, weil u.a. die Dimensionen der Boxen noch nicht geklärt sein müssen, aber das ist nebensächlich. Mit einem langsamen Rechner oder auch nur einer langsamen Verbindung sollte man aktuelle Browser sehr schön beobachten können, wie ihr progressives Wiedergabemodell funktioniert.
Bei XHTML ist dagegen eindeutig geregelt, wo ein Tag zu Ende ist - wenn es mit /> endet sofort, sonst eben erst, wenn ein </li> kommt (um mal bei dem Beispiel zu bleiben.
Die Regeln sind bei HTML genauso klar, der einzige Unterschied ist, dass der Parser die DTD kennen muss und ggf. auf diese Daten zurückgreifen muss, bevor er etwas entscheided, aber der Unterschied ist sehr marginal.
Was ich damit sagen will, ist, dass HTML nicht wirklich logisch ist, es ist eine Aneinanderreihung von Ausnahmen von Ausnahmen, die man kaum verstehen kann, soetwas muss man als Browser eigentlich falsch interpretieren.
Man muss es als Browser nicht einmal selber interpretieren, es gibt frei verfügbare SGML-Parser, die zu nutzen wäre kein Problem. Ein Problem wird die Verarbeitung von HTML-Dokumenten erst dann, wenn sich das Dokument eben *nicht* an die Regeln enthält. Für einen konformen Parser ist es an sich unmöglich, ein nicht-konformes Dokument zu verarbeiten.
Davon abgesehen, ja, syntaktisch gibt es für HTML viele Sonderregeln, aber was kümmert dich das, du kannst praktisch alles in XHTML-Syntax schreiben, nur bei z.B. leeren Elementen funktioniert das nicht. Ich selber finde es angenehmer, wenn ich ein <li> oder <p> nicht schliessen muss, wenn ich den Quellcode von Hand eingebe.
Wie haltet ihr das, benutzt ihr alle "normales" HTML oder wird lieber in XHTML geschrieben?
Beides, der Unterschied kümmert mich nicht, bzw. er besteht eigentlich nur darin, mit welchen Parametern ich HTML-Tidy denn nun aufrufe.