Должен ли каждый XML-файл/поток и т. д. начинаться либо с символа «

Должен ли каждый XML-файл/поток и т. д. начинаться либо с символа «

Я занимаюсь определением типов файлов и хотел бы более надежно обрабатывать определение XML.

Я добавил поддержку необязательного начального Unicode BOM (Byte Order Mark), за которым следует <символ в 8-битной кодировке или кодировке UTF-16.

(Это всего лишь начальный тест. Если этот тест пройден, я попытаюсь проанализировать его как XML, но я этого не делаю, если только он не похож на XML, поскольку это требует больших ресурсов.)

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

В частности, я не уверен, допустимо ли начинать XML-файлы или потоки с пробела в начале первой строки.<

решение1

Сущность документа всегда должна начинаться с «<», но если XML-декларация отсутствует, то перед ней может стоять пробел.

Внешняя анализируемая сущность не требует начального "<". Внешние анализируемые сущности обычно не анализируются сами по себе, только когда на них ссылаются напрямую или косвенно из ссылки на сущность в сущности документа.

Спецификация на самом деле не такая уж и сложная.

[1]     document       ::=      prolog element Misc*

[22]    prolog     ::=      XMLDecl? Misc* (doctypedecl Misc*)?
[23]    XMLDecl    ::=      '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>'

[27]    Misc       ::=      Comment | PI | S

[3]     S      ::=      (#x20 | #x9 | #xD | #xA)+

делает довольно ясным, что если XMLDecl отсутствует, то документ может начинаться с Misc, что включает опцию пробела. Однако, XMLDecl, doctypedecl, element, Commentи PIвсе начинаются с " <".

Связанный контент