Являются ли множественные объявления 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 " и т. Д. Зарезервированы для стандартизации в этой или будущих версиях этой спецификации.