¿Por qué un comentario xml no puede contener dos guiones?

16

Estaba aplicando comentarios de descuento en los comentarios xml de un archivo de configuración cuando XmlParser informó que --no se permiten dos guiones ( ) en los comentarios xml.

Al verificar la especificación XML , parece que el comentario xml no está diseñado para contener dos guiones por razones de compatibilidad con los analizadores SGML.

¿Por qué los analizadores SGML no permiten dobles guiones en los comentarios?

Onésimo Sin consolidar
fuente
2
No creo que obtenga una mejor respuesta que "porque eso es lo que dice el estándar"
jk.
Bueno, esa es la única respuesta, entonces no tengo otra opción :-(, aunque podría haber una mejor respuesta que esa.
OnesimusUnbound

Respuestas:

30

Esta página describe bastante del historial de HTML / SGML y las reglas bastante complicadas de esos dos guiones consecutivos (guión doble).

La parte relevante sobre SGML:

En pocas palabras, el guión doble al inicio y al final del comentario no inicia ni finaliza el comentario. El guión doble indica un cambio en lo que el comentario puede contener. El primero: inicia el comentario y le dice al navegador que el comentario puede contener> caracteres sin finalizar el comentario. El segundo - no termina el comentario. Le dice al navegador que si encuentra un carácter>, debe finalizar el comentario. Si se agrega otro, vuelve a permitir los caracteres>.

Joris Timmermans
fuente
77
La sección a la que te refieres . Cuando leo lo que las especificaciones SGML pretenden --dentro del comentario, mi cabeza da vueltas sobre la complejidad que introducirá más adelante.
Onésimo Sin consolidar
1
El consejo de nunca usar --dentro de un comentario me parece bueno. Pero, ¿hay una forma estándar de escapar? Supongamos que quiero crear (y compartir) un filtro de salida para asegurar que foo -- barnunca cause un problema. ¿Hay un equivalente SGML de foo -\- bar? (¡Estoy seguro de que no es una barra invertida!) ¿O -(vea esta respuesta ), o algo más? Si solo reemplazamos --con -o - -, el escape no es reversible.
fazy
12

Porque un guión doble es el delimitador de comentarios en SGML. El <!comienza una instrucción SGML, el --indica un comentario. Entonces, básicamente es por la misma razón que un comentario de C ++ no puede contener */.

Jörg W Mittag
fuente
1
Creo que -->es el delimitador de comentarios.
Onésimo Sin consolidar
10
No, no es. <!comienza una instrucción SGML, la >termina. Dentro de una instrucción SGML, --ambos comienzan y finalizan un comentario.
Jörg W Mittag
77
Ahh agregue su comentario a la respuesta, esto es esclarecedor porque significa que podría escribir <! SomeRelevantSgmlTag - un comentario - someAttribute = "blabla" - otro comentario -> y el significado semántico sería <! SomeRelevantSgmlTag someAttribute = " blabla ">
Jimmy Hoffa
1
Ah, tiene sentido. --> en realidad son dos tokens, --para delimitar comentarios y >para finalizar la instrucción SGML. Ahora, tengo una idea de dónde <![CDATA[... se ]]>originó.
Onésimo Sin consolidar
He fusionado el comentario.
Joris Timmermans