web-dev-qa-db-fra.com

Commentaires XML et "-"

<!-- here is some comment --
                            ^
                            |
                    what can be here apart from '>'?

XML ne semble pas aimer "-" dans les commentaires. J'ai lu quelque part que '-' change certains modes à l'intérieur de <! ... > chose, mais <!-- -- -- --> (nombre pair de --s) semble également invalide. S'il s'agit d'une caractéristique historique, qu'est-ce qui en fait "pro"? (La partie "contra" est l'impossibilité d'avoir -- dans les commentaires).

Quelle est la raison de compliquer le traitement des commentaires en ne faisant pas simplement "->" fin du commentaire et en autorisant "-" à l'intérieur?

56
Vi.

Du document de normes:

http://www.w3.org/TR/REC-xml/#sec-comments

[Définition: les commentaires peuvent apparaître n'importe où dans un document en dehors d'un autre balisage; en outre, ils peuvent apparaître dans la déclaration de type de document aux endroits autorisés par la grammaire. Ils ne font pas partie des données de caractère du document; un processeur XML peut, mais pas nécessairement, permettre à une application de récupérer le texte des commentaires. Pour compatibilité , la chaîne "-" (double trait d'union) ne doit pas apparaître dans les commentaires.] Les références d'entité de paramètre doivent ne pas être reconnu dans les commentaires.

43
asawyer

Cela peut peut-être être utile à quelqu'un. J'ai eu un problème, je voulais commenter un paramètre de ligne de commande en XML qui commence par -:

<arg line="-v --line-break 0" />  

de façon si naturellement normale comme ça

<!-- <arg line="-v --line-break 0" /> -->

n'a pas fonctionné, mais j'ai découvert que si le - est remplacé par son équivalent UTF-8 &#x002D; cela fonctionne et peut être toléré dans les commentaires.

Donc dans mon cas, la chaîne

<arg line="-v &#x002d;&#x002d;line-break 0" />

est analysé correctement et peut faire partie des commentaires.

Bien sûr, cela semble un peu moche, mais si quelqu'un veut garder une chaîne avec - comme commentaire dans son XML - je pense que c'est toujours mieux que rien.

37
Daniel

C'est une de ces règles stupides qui est en XML car elle était en SGML et les gens ne voulaient pas casser la compatibilité. Pourquoi est-il dans SGML est une supposition de quiconque: probablement parce qu'il a enregistré trois lignes de code dans l'analyseur d'origine.

28
Michael Kay

-- n'est pas autorisé pour la compatibilité avec SGML. De Sur SGML et HTML :

L'espace blanc n'est pas autorisé entre le délimiteur ouvert de déclaration de balisage ("<!") Et le délimiteur ouvert de commentaire ("-"), mais est autorisé entre le délimiteur de fermeture de commentaire ("-") et le délimiteur de fermeture de déclaration de balisage ( ">"). Une erreur courante consiste à inclure une chaîne de tirets ("---") dans un commentaire. Les auteurs doivent éviter de mettre deux ou plusieurs tirets adjacents dans les commentaires.

Donc dans SGML <! et > ouvrir et fermer les "déclarations de balisage" et -- ouvre et ferme les commentaires.

21
RichardTowers