Хорошо сформированный XML? XML-ссылки в именах тегов и атрибутов - PullRequest
4 голосов
/ 08 апреля 2009

Я искал, пытаясь подтвердить свое прочтение спецификации XML. Моя интерпретация заключается в том, что предопределенные сущности и числовые ссылки на символы не допускаются в именах тегов и именах атрибутов, например, это не допускается спецификацией XML 1.0

<root>
<test&apos;&#x27;&#39;tag test&apos;&#x27;&#39;attribute="one"/>
</root>

Однако у меня есть один синтаксический анализатор, который возвращает test'''tag для имени тега и test'''attribute для имени атрибута, в то время как другой синтаксический анализатор возвращает test&apos;&#x27;&#39;tag для имени тега и test&apos;&#x27;&#39;attribute для имени атрибута.

Какой парсер правильный? Или они оба не правы (т. Е. Должны выдавать правильно сформированную ошибку)?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 08 апреля 2009

Мне кажется, что они оба не правы. Согласно spec в стартовом теге должны быть только следующие символы:

":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]

XMLSpy, конечно, тоже не в восторге. Нор <Кислород />.

И ... просто для примера ... вот что .NET должен был сказать по этому поводу:

The '&' character, hexadecimal value 0x26, cannot be included in a name. Line 1, position 12.

Какие парсеры вы используете?

2 голосов
/ 09 апреля 2009

Это очень просто: никакие объекты не могут использоваться в именах . Оба "парсера" здесь не правы. Спецификация XML довольно четко определяет это - здесь нет скрытых правил по умолчанию; если какая-либо конструкция не включена, она не допускается.

Сущности могут использоваться только внутри обычного символьного содержимого и значений атрибутов. И они могут быть включены в некоторые другие места (комментарии, инструкции обработки, подмножества DTD), но не будут расширены (то есть не будут распознаны как объекты).

0 голосов
/ 08 апреля 2009

В поисках на w3.org я нашел следующие важные части:

[41] Атрибут :: = Имя Eq AttValue [VC: Тип значения атрибута] [WFC: Нет ссылок на внешние объекты] [WFC: Нет <в значениях атрибутов] </p>

[WFC: Нет ссылок на внешние объекты] ссылки на:

Правильное ограничение: нет ссылок на внешние объекты
Значения атрибутов НЕ ДОЛЖНЫ содержать прямые или косвенные ссылки на внешние объекты.

Имя ссылки на:

[5] Name :: = NameStartChar (NameChar) *

[4] NameStartChar :: = ":" | [A-Z] | "_" | [a-z] | [# xC0- # xD6] | [# xD8- # xF6] | [# xF8- # x2FF] | [# x370- # x37D] | [# x37F- # x1FFF] | [# x200C- # x200D] | [# x2070- # x218F] | [# x2C00- # x2FEF] | [# x3001- # xD7FF] | [# xF900- # xFDCF] | [# xFDF0- # xFFFD] | [# x10000- # xEFFFF]

[4a] NameChar :: = NameStartChar | "-" | "" | [0-9] | # xB7 | [# x0300- # x036F] | [# X203F- # x2040]

Да, это так же ясно, как грязь! Моя интерпретация этого заключается в том, что вы можете использовать шестнадцатеричные ссылки на сущности, если они попадают в диапазоны, указанные выше, но вы не можете использовать предварительно определенные ссылки.

Я бы ожидал правильно сформированной ошибки, когда имена не соответствуют этому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...