Warum darf ein XML-Kommentar keine zwei Bindestriche enthalten?


15

Ich habe Abschriftenkommentare in den XML-Kommentaren einer Konfigurationsdatei angewendet, als der XmlParser meldete, dass --in XML-Kommentaren zwei Bindestriche ( ) nicht zulässig sind.

Wenn Sie die XML-Spezifikation überprüfen , scheint der XML-Kommentar aus Kompatibilitätsgründen mit SGML-Parsern keine zwei Bindestriche zu enthalten.

Warum lassen SGML-Parser doppelte Bindestriche in Kommentaren nicht zu?


2
Ich glaube nicht, dass Sie eine bessere Antwort erhalten als "weil das der Standard sagt"
jk.

Nun, das ist die einzige Antwort, dann habe ich keine andere Wahl :-(, obwohl es vielleicht eine bessere Antwort gibt.
OnesimusUnbound

Antworten:


29

Diese Seite umreißt einiges aus der HTML / SGML-Geschichte und den ziemlich verworrenen Regeln dieser beiden aufeinander folgenden Bindestriche (doppelter Bindestrich).

Der relevante Teil über SGML:

Einfach gesagt, der doppelte Bindestrich am Anfang und Ende des Kommentars startet und beendet den Kommentar nicht. Ein doppelter Strich zeigt eine Änderung an, die der Kommentar enthalten darf. Erster - Startet den Kommentar und teilt dem Browser mit, dass der Kommentar> Zeichen enthalten darf, ohne den Kommentar zu beenden. Der zweite - beendet den Kommentar nicht. Er teilt dem Browser mit, dass der Kommentar beendet werden muss, wenn er auf ein> -Zeichen stößt. Wenn ein weiteres - hinzugefügt wird, werden die Zeichen> wieder zugelassen.


7
Der Abschnitt, auf den Sie sich beziehen . Wenn ich lese, wofür die SGML-Spezifikationen --im Kommentar vorgesehen sind, dreht sich mein Kopf um die Komplexität, die später eingeführt wird.
OnesimusUnbound

1
Der Rat, niemals --in einem Kommentar zu verwenden, scheint mir gut zu sein. Aber gibt es eine Standardmethode, um dem zu entkommen? Angenommen, ich möchte einen Ausgabefilter erstellen (und freigeben), um sicherzustellen, dass er foo -- barniemals ein Problem verursacht. Gibt es ein SGML-Äquivalent von foo -\- bar? (Ich bin sicher, es ist kein Backslash!) Oder -(siehe diese Antwort ) oder etwas anderes? Wenn wir nur --mit -oder ersetzen - -, ist die Flucht nicht umkehrbar.
Fazy

11

Da ein Doppel Bindestrich ist die Kommentartrennzeichen in SGML. Das <!startet eine SGML-Anweisung, das --zeigt einen Kommentar an. Aus dem gleichen Grund kann ein C ++ - Kommentar im Grunde genommen keinen enthalten */.


1
Ich denke das -->ist der Kommentarbegrenzer.
OnesimusUnbound

10
Nein ist es nicht. <!Startet einen SGML-Befehl und >beendet ihn. Innerhalb einer SGML-Anweisung wird --ein Kommentar sowohl gestartet als auch beendet.
Jörg W Mittag

7
Ahh, füge deinen Kommentar zur Antwort hinzu, das ist aufschlussreich, weil du <! SomeRelevantSgmlTag - einen Kommentar - someAttribute = "blabla" - einen weiteren Kommentar -> schreiben könntest und die semantische Bedeutung <! SomeRelevantSgmlTag someAttribute = "wäre. blabla ">
Jimmy Hoffa

1
Ah, macht Sinn. --> besteht eigentlich aus zwei Token, die --den Kommentar abgrenzen und >den SGML-Befehl beenden. Jetzt habe ich eine Idee, wo <![CDATA[... ]]>entstanden ist.
OnesimusUnbound

Ich habe den Kommentar zusammengeführt.
Joris Timmermans
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.