Являются ли множественные объявления XML в документе правильно сформированным XML?

Имеет ли два объявления XML в одном документе правильно сформированный XML?

<?xml version="1.0" encoding="UTF-8"?>
<a>
 <?xml version="1.0" encoding="UTF-8"?>
 <b>
  hello
 </b>
</a>

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

Из расширяемого языка разметки (XML) 1,0

Определение: XML-документы ДОЛЖНЫ начинаться с декларации XML, которая указывает используемую версию XML.

Здесь надоедливое слово "должен". В идеале говорится, что документ начинается с объявления XML. В нем ничего не говорится о наличии другого в документе.

Декларация типа документа ДОЛЖНА появляться перед первым элементом в документе.

Это близко, но это не говорит о самом объявлении XML, даже если оно должно предшествовать этому.

1 ответ

Решение

В правильно сформированном XML допускается только одно объявление XML, и оно должно быть наверху, если где-либо.

Должен быть на вершине

Смотрите определение document в разделе " Хорошо сформированные документы XML" Рекомендации XML:

[1]     document ::= prolog element Misc*

Тогда проверь prolog:

[22]    prolog   ::= XMLDecl? Misc* (doctypedecl Misc*)?

А потом XMLDecl:

[23]    XMLDecl  ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

Итак, мы видим, что EBNF разрешает декларацию XML в верхней части документа.

Только один

Обработка инструкций...

[16]    PI       ::= '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>'
[17]    PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))

... в общем случае может происходить в другом месте, но второе объявление XML исключается в силу определения PITarget и это утверждение:

Имена целей " XML ", " xml " и т. Д. Зарезервированы для стандартизации в этой или будущих версиях этой спецификации.

Другие вопросы по тегам