J'appliquais des commentaires de démarque dans les commentaires xml d'un fichier de configuration lorsque le XmlParser a signalé que deux tirets ( --
) n'étaient pas autorisés dans les commentaires xml.
En vérifiant la spécification XML , il apparaît que le commentaire xml n'est pas conçu pour contenir deux tirets pour des raisons de compatibilité avec les analyseurs SGML.
Pourquoi les analyseurs SGML interdisent-ils les doubles tirets dans les commentaires?
Réponses:
Cette page décrit un peu l'histoire de HTML / SGML et les règles plutôt compliquées de ces deux tirets consécutifs (double tiret).
La partie pertinente sur SGML:
la source
--
dans le commentaire, ma tête tourne autour de la complexité qu'elle introduira plus tard.--
dans un commentaire me semble bon. Mais, existe-t-il un moyen standard pour y échapper? Supposons que je veuille créer (et partager) un filtre de sortie pour m'assurer defoo -- bar
ne jamais causer de problème. Existe-t-il un équivalent SGMLfoo -\- bar
? (Je suis sûr que ce n'est pas une barre oblique inversée!) Ou-
(voir cette réponse ), ou autre chose? Si nous remplaçons simplement--
par-
ou- -
, l'échappement n'est pas réversible.Parce qu'un double trait d'union est le délimiteur de commentaire dans SGML. Le
<!
démarre une instruction SGML, le--
indique un commentaire. Donc, fondamentalement, c'est pour la même raison qu'un commentaire C ++ ne peut pas contenir*/
.la source
-->
c'est le délimiteur de commentaires.<!
démarre une instruction SGML, la>
termine. Dans une instruction SGML--
commence et termine un commentaire.-->
est en fait deux jetons,--
pour délimiter le commentaire et>
pour terminer l'instruction SGML. Maintenant, j'ai une idée d'où<![CDATA[
...]]>
est originaire.