Etikettsuppe

Im Web Entwicklung, "Etikettsuppe" ist ein abwertend zum syntaktisch oder strukturell falsch Html geschrieben für a Website. Da Internetbrowser historisch behandelt strukturell oder Syntaxfehler In html nachsichtig wurde für Webentwickler nur wenig unter Druck gesetzt, die veröffentlichten Standards zu befolgen, und daher besteht die Notwendigkeit, dass alle Browser -Implementierungen Mechanismen zur Verfügung stellen, um das Erscheinen von "Tagsuppe" zu bewältigen, zu akzeptieren und zu korrigieren ungültig Syntax und Struktur, wo möglich.

Ein HTML Parser (Teil eines Webbrowsers), der HTML-ähnlich interpretieren kann Markup Auch wenn es ungültige Syntax oder Struktur enthält Tag -Suppe Parser. Alle wichtigen Webbrowser haben derzeit einen Tags -Suppe -Parser für die Interpretation von fehlerhaftem HTML mit den meisten Fehlerbehandlung Elemente standardisiert.

"Tagsuppe" umfasst viele häufige Autorenfehler, wie z. Missgebildete HTML -Tags, falsch verschachtelt HTML -Elemente, und unabgeordnet Charaktereinheiten (insbesondere Amper und &) und weniger als Zeichen (<)).

Ich habe diesen Begriff in meiner Anweisung jahrelang verwendet, um das Durcheinander von Winkelklammern zu charakterisieren, die wie Tags in HTML auf Seiten verhalten, die von Browsern akzeptiert werden. Unsachgemäße Minimierung, überlappende Konstrukte ... Dinge, die wie SGML -Markup aussehen, aber der Schöpfer kann SGML -Regeln für das HTML -Wortschatz nicht kannte oder respektiert. Tatsächlich eine suppige Sammlung von Text und Markup. [...] Ich habe den Begriff nie irgendwo definiert gesehen.

-G. Ken Holman, Re: [xml-dev] Was ist Tag-Suppe?, XML Development Mailingliste, 11. Oktober 2002.

Das Markup -Validierungsdienst ist eine Ressource für Webseitenautoren, um das Erstellen von Tag -Suppen zu vermeiden.

Überblick

"Tagsuppe" ist ein Begriff, der verwendet wird, um verschiedene Praktiken im Webautoring zu verunglimpfen. Einige von diesen (ungefähr von schwersten bis am wenigsten schwersten) umfassen:

  1. Missgebildetes Markup Wo Tags nicht ordnungsgemäß verschachtelt oder falsch geschlossen sind. Zum Beispiel Folgendes:
    <p>Dies ist ein missgebildetes Fragment von <em>Html.p> </em> 
  2. Ungültige Struktur wo Elemente nicht ordnungsgemäß verschachtelt sind DTD für das Dokument. Beispiele hierfür umfassen das Verschachteln eines "UL" -Elements direkt in ein anderes "UL" -Element für eine der HTML 4.01- oder XHTML -DTDs. Dan Connolly zitiert die Verwendung von Titel Element außerhalb der Kopf Sektion.[1]
  3. Verwendung von proprietären oder undefinierten Elementen und Attribute anstelle der in W3C -Empfehlungen definierten. Zum Beispiel die Verwendung des Blinkelement oder der Festzeltelement die nicht standardmäßigen Elemente waren, die ursprünglich nur von gestützt wurden von Netscape und Internet Explorer Browser jeweils.

Ursachen und Implikationen

Missgebildetes Markup

Fehlformiertes Markup ist wohl das schwerwiegendste Problem im Webautoring. Dank besserer Bildung und Informationen und vielleicht mit Hilfe von XHTML wird das Problem des missgebildeten Markups weniger verbreitet. Browser müssen, wenn sie mit missgebildetem Markup konfrontiert sind, die beabsichtigte Bedeutung des Autors erraten. Sie müssen abschließende Tags schließen, bei denen sie sie erwarten, und dann die Eröffnungs-Tags zu anderen Abschlusspags schließen. Die Interpretation kann von einem Browser zum nächsten deutlich variieren.[2]

Während viele grafische Webeditoren ein gut geformtes Markup produzieren, kann ein Autor, der Code manuell mit einem Text-Eduor und dann nur in einem Browser testen, solche Fehler leicht verpassen. Die Präsentation kann daher von einem Browser zu einem anderen drastisch variieren, da jeder versucht, die Absicht des Autors auf unterschiedliche Weise zu "korrigieren" und dann das Styling auf diese "Korrekturen" anwendet.

Ungültige Dokumentstruktur

Ungültige Dokumentstruktur bedeutet hier nur die Verwendung von Attributen und Elementen, in denen sie nicht gehören. Beispielsweise ist das Platzieren eines "CITE" -attributs für ein "Zit" -Element ungültig, da die HTML- und XHTML -DTDs diesem Attribut dieses Elements keine Bedeutung zuschreiben. In ähnlicher Weise ist auch ein "P" -Element innerhalb des Inhalts eines "EM" -Elements ungültig. Mit der Bewegung zur Trennung von Fehlformed Markup von ungültigem Markup wurden die Probleme mit ungültigem Markup zunehmend als weniger schwerwiegend angesehen. Einige haben begonnen, lockerere Inhaltsmodelle zu befürworten, die eine größere Flexibilität bei der Autoration von HTML -Dokumenten ermöglichen (sei es in HTML oder XHTML). Die Verwendung von ungültigem Markup kann jedoch die beabsichtigte Bedeutung des Autors verwischen, wenn auch nicht so stark wie missgebildetes Markup.

Viele Grafik -Web -Editoren erzeugen weiterhin ungültige Markups. Darüber hinaus achten viele professionelle Webdesigner und Autoren wenig auf Fragen der Gültigkeit. Es ist üblich, in vielen Websites im gesamten World Wide Web ungültig zu sehen.

Verwendung von proprietären/abgebrochenen Elementen

Im frühen Alter des Web (Großteil der neunziger Jahre) wurde das Design der offiziellen HTML -Spezifikation zunehmend angespannt, verglichen mit dem Wunsch der Designer nach Flexibilität bei der Schaffung visuell lebendiger Designs. Als Reaktion auf diesen Druck fügten Browserhersteller HTML, die zu dieser Zeit außerhalb der Standards fiel, einseitig neue proprietäre Merkmale hinzu. Dies bedeutete, dass es in HTML proprietäre Elemente gab, die in einigen Browsern, aber nicht in anderen, funktionierten.

In gewissem Maße wurde dieses Problem durch die Einführung neuer Standards durch das W3C, wie z. und Attribute.

Darüber hinaus wurden in HTML 4 und XHTML 1 viele Elemente entweder durch ein einziges semantisches Konstrukt abgelöst (wie z. Objekt Elemente, die proprietär ersetzen Applet und einbetten Elemente) oder veraltet, weil sie präsentativ sind (wie die Elemente "S", "Streik" und "U").

Trotzdem stellten Browser -Entwickler weiterhin neue Elemente in HTML ein, als sie einen Bedarf wahrnahmen. Einige Browser enthalten Tabindex -Attribute in jedem Element. Entwickler von Apple's Webkit stellte die vor Leinwand Element, einer Version, deren anschließend von übernommen wurde von Mozilla.

Im Jahr 2004, Apple, Mozilla und Oper gründete die Waswgmit der Absicht, eine neue Version der HTML -Spezifikation zu erstellen, mit der das gesamte Browserverhalten übereinstimmt. Dies beinhaltete die Änderung der Spezifikation bei Bedarf, um einen vorhandenen Konsens zwischen verschiedenen Browsern abzustimmen.[3]

Das Leinwand[4] und einbetten[5] Die Elemente wurden anschließend durch das Whatwg standardisiert. Bestimmte Elemente (einschließlich b, i und klein), die zuvor als präsentativ und veraltet angesehen wurden, wurden eingeschlossen, aber eher medienunabhängig als visuell definiert.[6]

Versionen der WhatWg -Spezifikation wurden von der veröffentlicht W3c wie HTML5.[3]

Sich entwickelnde Spezifikationen zur Lösung von Tagsuppe

Während einige der Probleme der Tag -Suppe auf Mängeln von Browsern zurückzuführen sind und manchmal auf mangelnde Informationen für Webautoren aufgrund fehlender Links in den Webstandards selbst ein Teil der Verbreitung von Tag -Suppe zurückzuführen war. Das W3C hat mehrere Anstrengungen zur Bekämpfung der Mängel der Webstandards vorgenommen. Da immer mehr Browser neuere Überarbeitungen der Standards unterstützen, nimmt der Druck auf Webentwickler, nicht standardmäßige Code zur Lösung von Problemen zu verwenden, ab.

Cascading Style Sheets (CSS)

Cascading Style Sheets (CSS) Stellen Sie einen Mechanismus zur Verfügung, um die Darstellung von Elementen in einem Dokument anzugeben, ohne die Markup -Struktur des Dokuments zu ändern. Bevor CSS alltäglich war, haben Webentwickler möglicherweise auf ein strukturell ungültiges Markup zurückgegriffen, um bestimmte Präsentationsziele zu erreichen - zum Beispiel, einschließlich Blockebene -Elemente innerhalb der Inline -Elemente, um einen bestimmten Effekt zu erhalten oder manchmal eine große Anzahl von zu verwenden und andere displayspezifische HTML-Tags. CSS verwendet Stilregeln, um diese Aufgaben zu erledigen und gleichzeitig das Markup sauberer und einfacher zu lassen.

Xml und xhtml

Xhtml ist eine Neuformulierung der HTML -Sprache basierend auf Xml. XHTML wurde entwickelt, um viele der Probleme im Zusammenhang mit der Tag -Suppe zu lösen.

Mit XML können Parser den Prozess der Dokumentsyntax und seiner Struktur trennen. In html und SGMLEin Parser musste bestimmte Regeln für Elemente während des Parsens kennen, z. B. welche Elemente in anderen Elementen enthalten sein könnten und welche Elemente das vorherige Element implizit schließen. Dies liegt daran, dass in HTML und SGML die Schließen von Tags und sogar Öffnungs -Tags für einige Elemente optional waren. Durch die Forderung aller Elemente können XML -Parser das Dokument analysieren und einen Dokumentbaum ohne Kenntnis des Dokumenttyps analysieren und einen Dokumentbaum erstellen. Auf diese Weise können Parser universell und sehr leicht sein und vom Prozess der Validierung oder Interpretation des Dokuments getrennt werden.

Die XML -Spezifikation definiert deutlich, dass ein konformer Benutzeragent (z. B. ein Webbrowser) kein Dokument akzeptieren und es nicht weiter analysiert, wenn ein syntaktischer Fehler auftritt. Ein Browser, der eine Webseite als XHTML interpretiert, lehnt es daher ab, die Seite anzuzeigen, wenn sie auf einen Formationsfehler stößt. Dies kann dazu beitragen, dass Autoren den XHTML -Code gegen einen konformen Browser testen, wenn sie sofort über Missbildungsprobleme informiert werden: das möglicherweise schwerste Problem für Webbrowser. Wenn der Code fehlerhaft ist, ist die Absicht des Autors mehrdeutig. Ohne die Richtlinien von XML müssen HTML -Browser komplexe Algorithmen verwenden, um die beabsichtigte Bedeutung des Autors in einem weiten Bereich von Fällen zu schließen, in denen eine ungültige Syntax auftritt.

XML und XHTML stellen das Konzept der Namespaces ein. Mit Namespaces können Autoren oder Autorengemeinschaften neue Elemente und Attribute mit neuen Semantik definieren und diejenigen innerhalb ihrer XHTML -Dokumente vermischen. Namespaces stellen sicher, dass Elementnamen aus den verschiedenen Namespaces nicht in Verbindung gebracht werden. Beispielsweise könnte ein "Tabellen -Element" in einem neuen Namespace mit neuen Semantik definiert werden, das sich als das HTML -Tabellenelement unterscheidet, und der Browser kann zwischen den beiden unterscheiden. Bei der Bereitstellung von Namespaces ermöglicht XHTML in Kombination mit CSS Authoring -Communities, das semantische Vokabular von Dokumenten leicht zu erweitern. Dies berücksichtigt die Verwendung proprietärer Elemente, solange diese Elemente dem beabsichtigten Publikum durch vollständige Stylesheckdefinitionen (einschließlich Akku/Sprache und taktile Stile) präsentiert werden können.

XHTML -Dokumente können im Internet mit dem bedient werden Internet -Medientyp Anwendung/xhtml+xml oder Text/HTML[7] Aktueller Microsoft Internet Explorer Versionen (6, 7 und 8) zeigen keine XHTML -Dokumente an als als Anwendung/xhtml+xml. IE9 Beta -Veröffentlichungen scheinen konform zu sein. Siehe auch die Diskussion dieses Problems im XHTML -Artikel.

HTML5

HTML5 zielt darauf ab, die vollständigste Lösung für das Problem der Tag-Suppe zu sein und gleichzeitig so weit wie möglich nach hinten und vorwärts zu kompatibel zu sein. Im Gegensatz zu XHTML, das von der Abwärtskompatibilität abweist und den Ansatz verfolgt, dass Parsers weniger tolerant gegenüber schlecht gebildetem Markup werden, erkennt HTML5 an, dass ein schlecht gebildetes HTML -Code bereits in großen Mengen vorhanden ist und wahrscheinlich weiterhin verwendet wird und die Ansicht nimmt, dass dies verwendet wird, und das nimmt das an, dass dies verwendet wird. Die Spezifikation sollte erweitert werden, um eine maximale Kompatibilität mit solchen Code zu gewährleisten.

Daher hat die HTML 5 -Spezifikation ihre Definition der HTML -Syntax sowohl für die heute verwendete gemeinsame Syntax geändert, und um genau zu beschreiben, wie "schlecht gebildeter Code" vom Parser behandelt werden sollte. Der Umgang mit schlecht geformtem Code hat jetzt einen Platz in der Spezifikation selbst und verringert hoffentlich die Notwendigkeit zukünftiger HTML-Parser, zusätzliche, außerspezifizierende Maßnahmen für den Umgang mit Code zu implementieren, den er nicht erkennt.

Werkzeuge zum Reparieren von Tagsuppe

  • HTML Tidy Ist ein Software-Tool für viele Plattformen verfügbar, die ungültige Syntax korrigieren können, und die meisten ungültigen Dokumentenstruktur, wobei HTML-ähnlichen Code in HTML oder XHTML konvertiert wird.
  • Aggiorno ist ein Visual Studio-Add-In, das sich darauf konzentriert, Websites Standards-konform zu machen
  • TagSoup ist eine Java -Bibliothek, die HTML analysiert, sie reinigt und einen Strom von liefert SAXOPHON Ereignisse, die gut geformte XML darstellen (nicht unbedingt gültig xhtml). Diese Tools werden zur Verarbeitung von JNLP -Dateien in der Open -Source -Implementierung des Jnlp Protokoll verfügbar in ICEDTEA-Webein Unterprojekt von Eisteedas Build- und Integrationsprojekt der OpenJDK.
  • Schöne Suppe ist ein Python Dom-Sähnlich Parser für Suppy HTML/XML.[8]
  • TagSoup: Eine Bibliothek für Haskell -Sprache.

Gültige Abweichungen von xhtml

Im Gegensatz zum strengen XHTML, HTML und seinem Vorgänger SGML sind so konzipiert, dass sie von Menschen geschrieben werden und bereits ein erhebliches Maß an Flexibilität in der Syntax haben, um die Kesselplatte zu reduzieren. Diese Unterschiede machen das Dokument nicht ungültig und sind daher keine Tag -Suppe. Folgendes gelten sowohl für HTML 4 als auch für HTML5,[9] und Beispiele stammen aus den ersten Tagen von HTML.[10]

  • Tags wie ... kann oft vollständig weggelassen werden.
  • Der Verschluss von Tags kann häufig weggelassen werden, da die Spezifikation einige Elemente ablehnt, die sich in sich selbst befinden. Zum Beispiel mehrere
  • ...
  • Elemente können ohne Schließen geschrieben werden.

Trotz ihrer Gültigkeit erfordern diese Auslassungen immer noch einen speziellen Parser mit Kenntnis von HTML (im Gegensatz zu dem starreren XML), um zu analysieren. Darüber hinaus ist es üblich, dass Tools auch diese Strukturen "reparieren". Zum Beispiel, HTML Tidy Ermöglicht das Auslassen optionaler Tags, aber Standardeinstellungen, um dies nicht zu tun.[11]

Siehe auch

Anmerkungen

Verweise

  1. ^ Winer, Dave (12. Oktober 2002). "Was ist Tag -Suppe?". Skriptnachrichten. Dave Winer. Archiviert von das Original am 26. Februar 2004. Abgerufen 23. November 2017. Das Beispiel, das er zitierte, ist das <title> -Element. Es macht wirklich nur Sinn im <kopf> eines Dokuments, aber anscheinend würde ein oder mehrere Browser Sie den Titel einer Seite im Körper der Seite festlegen! Es ist nicht so, als würde das die Erde zusammenbrechen oder der Himmel fallen, alles kann normal weitergehen, aber es ist falsch, es dort zu tun, und die Welt wäre ein (leicht) besserer Ort, wenn Browser es nicht zulassen.
  2. ^ Hickson, Ian (21. November 2002). "Tagsuppe: Wie uas mit <x> <y> </x> </y> umgehen". Abgerufen 11. September 2020.
  3. ^ a b Waswg. "1.6 Geschichte". HTML Standard.
  4. ^ Waswg. "4.12.5 Das Canvas -Element". HTML Standard.
  5. ^ Waswg. "4.8.6 Das Einbettelement". HTML Standard.
  6. ^ Waswg. "FAQ". Whatwg.org.
  7. ^ "XHTML 1.0 Die erweiterbare Hypertext -Markup -Sprache (zweite Ausgabe) Eine Neuformulierung von HTML 4 in XML 1.0, Appendic C. HTML -Kompatibilitätsrichtlinien". W3C -Empfehlung. 1. August 2002 [26. Januar 2000]. Abgerufen 2008-09-13. XHTML -Dokumente, die den in Anhang C angegebenen Richtlinien "HTML -Kompatibilitätsrichtlinien" folgen, können mit dem Internet -Medien -Typ "Text/HTML" [RFC2854] gekennzeichnet werden, da sie mit den meisten HTML -Browsern kompatibel sind. Diese Dokumente und jedes andere Dokument, das dieser Spezifikation entspricht, können auch mit dem Internet -Medien -Typ "Anwendung/XHTML+XML" bezeichnet werden, wie in [RFC3236] definiert. Weitere Informationen zur Verwendung von Medientypen mit XHTML finden Sie im informativen Hinweis [XHTMLMIME].
  8. ^ Tagliaferri, Lisa (20. Juli 2017). "Wie man Webseiten mit wunderschöner Suppe und Python 3 kratzt". Digital Ocean Tutorials. Digitaler Ozean. Archiviert von das Original am 2. September 2017. Abgerufen 23. November 2017. Die schöne Suppe ist derzeit als wunderschöne Suppe 4 und mit Python 2.7 und Python 3 kompatibel. Die schöne Suppe erzeugt einen analysierten Baum aus analysierten HTML- und XML-Dokumenten (einschließlich Dokumente mit nicht entworfenen Tags oder Tags-Suppe und anderem missgebildeter Markup).
  9. ^ "§3 auf SGML und HTML". HTML 4.01 -Spezifikation. W3c. 24. Dezember 1999. §3.2.1 Elemente.; HTML 5.1 2. Ausgabe § 8.1.2.4. Optionale Tags
  10. ^ Siehe Quelle von HTML 2 Spec § Dokumentstruktur für Unterlassung von LI und li, und Das ursprüngliche HTML -Tags -Dokument Für Unterlassung von Schließen von P und Kopf.
  11. ^ "HTML Tidy 5.7.0 Optionen Schnelle Referenz". api.html-tidy.org.