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?

OnesimusUnbound
quelle
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.

Joris Timmermans
quelle
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 */.

Jörg W. Mittag
quelle
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