Ich habe mich oft gefragt, warum beim Erstellen von HTML kein striktes Parsen gewählt wurde. Während des größten Teils der Internetgeschichte haben Browser jede Art von Markup akzeptiert und ihr Bestes versucht, um es zu analysieren. Der Prozess verschlechtert die Leistung, ermöglicht es Benutzern, Kauderwelsch zu schreiben, und erschwert die Einstellung veralteter Funktionen.
Gibt es einen bestimmten Grund, warum HTML nicht streng analysiert wird?
Antworten:
Der Grund ist einfach: Zum Zeitpunkt der ersten grafischen Browser, NCSA Mosiac und später Netscape Navigator, wurde fast alles HTML von Hand geschrieben. Die Browser-Autoren (Netscape wurde von Ex-Mosaic-Leuten entwickelt) erkannten schnell, dass die Benutzer sich weigern würden, falsches HTML zu rendern, und voila!
quelle
Aus der Sicht eines Browsers ist es das Richtige, die besten Vermutungen anzustellen. Berücksichtigen Sie die Situation: Im Idealfall ist der HTML-Code, den Sie erhalten, vollständig korrekt und entspricht den Spezifikationen. Das ist großartig. Der interessante Teil ist jedoch, was passiert, wenn der HTML-Code nicht korrekt ist. da es sich um eine quelle handelt, auf die wir keinen einfluss haben, müssen wir darauf vorbereitet sein. Was können wir tun, wenn das passiert? Wir haben zwei Möglichkeiten: a) Scheitern und b) Bemühen Sie sich, den Fehler zu beheben. Wenn dies fehlschlägt, hat der Benutzer nur eine unnütze Fehlermeldung und kann nichts dagegen tun, da er den Server nicht kontrolliert. Wenn wir uns nach besten Kräften bemühen, hat der Benutzer zumindest das, was wir aus der Seite machen können, und oft ist die Vermutung meistens richtig.
Das einzige wirkliche Problem dabei ist, dass Sie die Fehlermeldungen benötigen , die normalerweise in einer Entwicklungssituation auftreten. Sie möchten sicherstellen, dass der von Ihnen generierte HTML-Code korrekt ist. Wir können es nicht einfach über einen Browser ausführen und prüfen, ob es funktioniert. Wir können nicht den Unterschied zwischen korrektem HTML und falschem HTML feststellen, den der Browser für Sie behoben hat. Dies ist jedoch ein lösbares Problem. Es gibt Browser-Plugins, die Verstöße gegen Standards melden, den W3C-Validator und viele andere ähnliche Tools.
quelle
HTML-Autoren und Authoring-Tools erzeugen beschissene Markups. Browser geben aus Wettbewerbsgründen ihr Bestes: Ein Browser, der die meisten Webseiten nicht in angemessener Weise rendert, wird von Benutzern abgelehnt, denen es egal ist, an wem er schuld ist.
Es ist ziemlich anders als bei Implementierungen von Programmiersprachen. Compiler und Interpreter arbeiten mit Code, von dem angenommen werden kann, dass er von einem Programmierer geschrieben wurde, während jeder und sein Bruder mit minimalem Schulungsaufwand HTML schreiben können oder ohne. HTML-Markup ist in gewissem Sinne Code, aber es sind eher Daten als Anweisungen für Programmiersprachen, und die (gute) Tradition in der Software besteht darin, mit Daten tolerant zu sein.
Bei XHTML gelten grundsätzlich strenge (XML-) Parsing-Regeln, sodass ein mit einem XML-Inhaltstyp bereitgestelltes XHTML-Dokument nur angezeigt wird, wenn es im XML-Sinne wohlgeformt ist. Andernfalls wird dem Benutzer nur der erste Fehler mitgeteilt. Dies wurde im Web-Authoring nie populär - fast das gesamte „XHTML“ wird als Text / HTML-Code ausgegeben und als traditionelle Tag-Suppe auf sehr liberale Weise verarbeitet, nur mit einigen neuen Exzentrizitäten.
quelle
HTML authors and authoring tools produce crappy markup.
- Sie tun, weil Browser es akzeptieren. Wenn Browser es von Anfang an nicht akzeptiert hätten - dann wären diese Tools und Autoren nicht in der Lage gewesen, beschisseneDas kurze daran wäre, dass HTML auf einer anderen, nicht mit Hyperlinks verknüpften Auszeichnungssprache namens SGML basiert, die häufig für Dokumentationen und Handbücher und dergleichen verwendet wird.
Aus einem Artikel über die Geschichte von HTML:
Unter Berücksichtigung des fettgedruckten Teils haben sie im Grunde genommen eine Teilmenge der Tags implementiert, die in dem ihnen bekannten SGML-System verfügbar sind. Sie haben das neue <a> Ankertag hinzugefügt und sich dafür entschieden, eines der vielen Tags zu ignorieren, die sie nicht verwendet haben. ' Sie kümmern sich nicht um oder möchten dies aus irgendeinem Grund unterstützen (z. B. Tags für Bibliografielisten, xmp für "example", "box" -Tag, um ein Kästchen um einen Textblock zu zeichnen usw.). Der einfachste Weg, dies zu tun, besteht darin, dem Parser nicht bekannte Markups zu verzeihen und unbekannte Markups so gut wie möglich zu ignorieren, unabhängig davon, ob die Ursache ein vom Benutzer eingegebenes fehlerhaftes Markup ist oder der schnellste und einfachste Weg, vorhandene Dokumente zu konvertieren Dieses neue HTML-Format fügt einige Hyperlinks zu vorhandenen SGML-Dokumenten hinzu und ignoriert alle Tags, die nicht unterstützt oder implementiert werden.
quelle
Dies ist teilweise ein historischer Überrest des Browserkriegs
IE und netscape konkurrierten um die Marktübernahme und veröffentlichten immer neue Funktionen, die immer "umwerfender" wurden und die Seiten akzeptieren mussten, die für den anderen Browser entwickelt wurden.
Dies bedeutet, dass der Browser unbekannte Tags stillschweigend akzeptiert und ignoriert, nachdem die Komitees angefangen haben, sich einzumischen. Nun, Sie haben ein Komitee, das Dinge entwirft, und infolgedessen viele verschiedene Versionen (mit einigen mehrdeutigen Spezifikationen), von denen der Browser die meisten unterstützen möchte sie, und für jede Version einen eigenen Parser zu erstellen, wäre enorm aufgedunsen. Daher ist es (relativ) einfacher, einen einzelnen Parser mit verschiedenen Modi zu verwenden.
Zum anderen wollten Netscape und IE, dass HTML für den normalen Benutzer zugänglich ist (wie es damals üblich war), was bedeutet, dass versucht wird, das zu tun, was der Benutzer wollte, anstatt das zu tun, was er gesagt hat, und über jedes baumelnde Tag gestolpert wird.
Erschwerend kommt hinzu, dass es auch mehrere "Tutorial" -Seiten gibt, die das Falsche lehren und denken, dass sie richtig sind, weil das, was sie lehren, funktioniert.
Letztendlich bedeutet dies, dass, wenn Sie jetzt einen Browser mit nur striktem HTML-Parsing erstellen, 99% der Websites nicht funktionieren.
quelle
<o24wowzo>
Tag ignorieren<o23wowzo>
, aber ein , aber z Ein Design hätte den "lesbaren" Aspekt von HTML beeinträchtigt.Nun, wir haben versucht, eine nette strenge Option in den Tausendern zu etablieren, aber sie ist nicht aufgegangen, weil Leute, die blind "Best Practices" befolgten, den Browsern die Schuld gaben, wenn ihr falsches Markup im strengen Modus in Stücke ging. Und die Browser-Anbieter wollten nicht beschuldigt werden.
Sie behaupteten, dies liege daran, dass sie das Web für Laien zugänglicher machen wollten, aber niemand wurde daran gehindert, HTML 4 in seiner mildesten Form zu verwenden.
Trotzdem können Sie HTML5 weiterhin als XML bereitstellen, wenn Sie ein Layout im strengen Stil wünschen. IMO kann es eine gute Möglichkeit sein, die Vorteile von Layout- oder Benutzeroberflächen-Arbeiten in einem strengeren Modus zu nutzen, bevor Sie sie an andere Personen weitergeben, die sie möglicherweise ohne wirkliche Risiken so streng wollen oder auch nicht (es ist ihnen untersagt, den Doctype herauszureißen, weil) Eigentlich bevorzugen sie den Macken-Modus - im Jahr 2017 (zum Zeitpunkt dieser Bearbeitung) sollten sie gedreht werden. Es ist also im Grunde immer noch da, aber ich scheine mich daran zu erinnern, dass es einige Vorbehalte gab, die wir mit XHTML nicht hatten Verbreiten Sie einfach nicht die Nachricht, dass dies "der einzige Weg ist, es richtig zu machen", oder die Twits, die sich für diese Art von Gesprächen entscheiden, werden die Idee durchkreuzen, den Browsern erneut die Schuld geben und sie werden die Zähne nehmen von der einzigen strengen Alternative, die wir noch haben. (2017 edit:
http://mathiasbynens.be/notes/xhtml5
quelle