... - in HTML hingegen sind die DTDs so locker gehalten, dass auch implizites schließen durch den Parser ausreicht (was in der Praxis aber kaum funktioniert, weil es keinen wirklich SGML-fähigen Browser gibt).
Demnach dürfte so gut wie keine Webseite in HTML funktionieren. Man bedenke nur die ganze meta- oder br-Elemente. Die funktionieren aber auch nie ;)
Nein, gerade weil es keine SGML-fähigen User Agents gibt, funktionieren die Webseiten - besonders XHTML ausgeliefert als text/html funktioniert nur aus aus diesem Grund - wenn das wirklich korrekt liefe, würde einiges angezeigt werden, was eigentlich nicht da sein soll. Ein Beispiel für einen SMGL-fähigen User Agent ist Emacs/W3 - der ist zwar schon lange tot, aber zeigt deutlich, dass ein standardkonformer Browser (zumindest was den SGML-Teil angeht) keine gute Idee ist.
Und anstatt einen XML- oder SGML-fähigen Browser zu machen, wurde mit HTML5 einfach beschlossen, dass man sich eigene Fehlerkorrekturroutinen aus den Fingern saugt umd das Fehlerkorrekturverhalten zu standardisieren. Der Haken: Standards gab es zuvor auch (eben SGML und danach, weil zu kompliziert eben XML als Teilmenge davon) - gehalten hat sich keiner dran.
XML(-fähige)-Parser gabs vorher auch schon (und wurden und werden auch verwendet). Bessere Webseiten gabs deswegen auch nicht [1].
Ich sprach primär von SGML-fähigen Browsern - einen XML-Parser zu schreiben ist im vergleich zu einem SGML-Parser ein Kinderspiel.
Das Fehlerkorrekturverhalten in HTML5 wurde, wie du sagst, nicht aus irgendwelchen Fingern gezogen (nicht primär) sondern fasst die bereits bestehenden Algorithmen der verschiedenen Browser zusammen.
Bei HTML5 hat man an allen Ecken und Enden das gefühl, dass Hixie schlechtes Zeug raucht und sich irgendwas aus den Fingern saugt. Sollte HTML5 nicht etwas sein, dass das derzeitige Web abbildet? Wie kommen dann so Geschichten wie die cite-Sache zustande wo man nicht auf die Community hört und sein eigenes Ding durchzieht?
Dass es die auch heute noch gibt ist den Autoren von HTML 4.0 anzulasten. Die hätten ja auf bessere Konformität zu SGML hinarbeiten können.
Die Autoren oder die die Browserhersteller? Ich würde eher sagen die Browserhersteller wären hier verlangt gewesen - es hat praktisch nie einen massentauglichen Browser gegeben, der tatsächlich SGML verstand - man war, selbst wenn man es besser wusste, gezwungen nur eine Teilmenge zu nutzen und konnte versehentlich SGML-Features nutzen, die zwar ein Validator als Gültig abstempelt, aber in den meisten Browser nicht funktionieren.
Folgendes ist valide[1]:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<title>foo</>
<p/bar/
Der einzige Browser der das zumindest ansatzweise richtig macht ist Safari - er zeigt zumidnest den Titel richtig an - nicht aber den Inhalt des body. Alle anderen Browser zeigen "foo></> <p/bar/" im Titel an.
Das ist zwar ein krasses Beispiel wo "nichts" funktioniert - aber es zeigt, dass es gewisse Subsets von SGML gibt, die nur bestimmte Browser unstützen.
Ändert man obenstehendes Beispiel z.B. auf folgendes, wird der Titel überall korrekt angezeigt - der Viewport bleibt aber leer. Ausnahme ist der Internet Explorer - der zeigt "<p/bar/" an.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<title>foo</title>
<p/bar/
An den HTML5-Parser halten sich die Browserhersteller: Erst Firefox, dann Chrome, dann IE und jetzt auch Opera.
Ja - aber wie lange wird es dauern bis die ersten Bugs auftauchen? :) Nein, die Regeln sind wenig komplex - das wird hoffentlich nicht passieren.
[1] rebell.at hat momentan 14 Fehler. Ein XML-Parser dürfte die Seite garnicht darstellen. Tatsächlich ignorieren selbst XML-fähige Browser
rebell.at wird als text/html ausgeliefert und _darf_ nicht als XML verarbeitet werden. Würde die Site tatsächlich als XML verarbeitet, käme eine Fehlermeldung des XML-Parsers.
[1] Vor einiger Zeit hat der W3-Validator hier übrigens nichtmal eine Warnung ausgespuckt.