it-swarm.com.ru

XML комментарии и "-"

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

XML, похоже, не нравится "-" внутри комментариев. Я где-то читал, что '-' переключает некоторые режимы внутри <! ... >, но <!-- -- -- --> (четное число --s), похоже, тоже недопустим. Если это какая-то историческая особенность, что является "про" частью этого? ("Против" - невозможность иметь -- в комментариях).

В чем причина усложнения обработки комментариев, когда не делается просто "->" в конце комментария и допускается "-" внутри?

54
Vi.

Из документа стандартов:

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

[Определение: комментарии могут появляться в любом месте документа за пределами другой разметки; кроме того, они могут появляться в объявлении типа документа в местах, разрешенных грамматикой. Они не являются частью символьных данных документа; XML-процессор может, но не обязательно, позволять приложению получать текст комментариев. Для совместимость строка "-" (двойной дефис) не должна встречаться в комментариях.] Ссылки на сущность параметра должны не быть признанным в комментариях.

42
asawyer

Может быть, это может быть полезно для кого-то. У меня была проблема, я хотел закомментировать параметр командной строки в XML, который начинается с -:

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

так естественно нормальный способ, как это

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

не сработало, но я обнаружил, что если - заменяется его эквивалентом UTF-8 &#x002D;, это работает и может быть допущено в комментариях.

Так что в моем случае строка

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

анализируется правильно и может быть частью комментариев.

Конечно, это выглядит немного уродливо, но если кто-то захочет сохранить строку - как комментарий в его XML - я думаю, что это все же лучше, чем ничего.

35
Daniel

Это одно из тех глупых правил в XML, потому что оно было в SGML, и люди не хотели нарушать совместимость. Почему это в SGML, можно только догадываться: вероятно, потому что он сохранил три строки кода в оригинальном парсере.

27
Michael Kay

-- не разрешен для совместимости с SGML. С в SGML и HTML :

Пробел между символом открытия объявления разметки ("<!") И разделителем открытия комментария ("-") недопустим, но разрешен между разделителем закрытия комментария ("-") и разделителем закрытия объявления разметки ( ">"). Распространенной ошибкой является включение в комментарий строки дефисов ("---"). Авторы должны избегать размещения двух или более соседних дефисов внутри комментариев.

Поэтому в SGML <! и > открывают и закрывают "объявления разметки", а -- открывает и закрывает комментарии.

21
RichardTowers