Вопрос по xml – XML комментарии и «-»

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

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

В чем причина усложнения обработки комментариев из-за того, что они не просто "- & gt;" конец комментария и разрешение "-" внутри?

Ваш Ответ

4   ответа
25

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

41

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

[Definition: Comments may appear anywhere in a document outside other markup; in addition, they may appear within the document type declaration at places allowed by the grammar. They are not part of the document's character data; an XML processor may, but need not, make it possible for an application to retrieve the text of comments. For compatibility, the string " -- " (double-hyphen) must not occur within comments.] Parameter entity references must not be recognized within comments.

Так что "за" это совместимость с SGML. Vi.
Я бы назвал это инженерным компромиссом.
Это должно быть изменено IMO, потому что теперь у нас есть параметры CSS, которые начинаются с двойного дефиса и могут быть внутри атрибута стиля в элементе SVG. Комментирование этих элементов нарушит совместимость со стандартом XML только из-за какого-то устаревшего формата, который больше не существует.
20

-- не допускается для совместимости с SGML. ОтНа SGML и HTML:

White space is not permitted between the markup declaration open delimiter("<!") and the comment open delimiter ("--"), but is permitted between the comment close delimiter ("--") and the markup declaration close delimiter (">"). A common error is to include a string of hyphens ("---") within a comment. Authors should avoid putting two or more adjacent hyphens inside comments.

Так в SGML<! а также> открыть и закрыть «объявления разметки»; а также-- открывает и закрывает комментарии.

34

это может быть полезно для кого-то. У меня была проблема, я хотел закомментировать параметр командной строки в 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 - я думаю, что это все же лучше, чем ничего.

Вы также можете использовать escape-последовательность&#45; которая является escape-версией ASCII и немного короче, чем версия Unicode.
или же&#x2D; (ASCII / Unicode в шестнадцатеричном)

Похожие вопросы