¿Todos los archivos XML/transmisiones/etc. deben comenzar con un carácter "

¿Todos los archivos XML/transmisiones/etc. deben comenzar con un carácter "

Estoy haciendo algunas cosas de detección de tipos de archivos y quería manejar la detección XML de manera más sólida.

Agregué soporte para una BOM (marca de orden de bytes) Unicode inicial opcional seguida de un <carácter en codificación de 8 bits o UTF-16.

(Esta es solo una prueba inicial. Si esta prueba pasa, procedo a intentar analizarla como XML, pero no lo hago a menos que parezca XML, ya que requiere más recursos).

Miré el estándar XML pero la jerga se estaba volviendo bastante complicada y no estoy seguro de haber seguido todas las reglas gramaticales correctamente, especialmente para las características más esotéricas de XML. Sin embargo, no vi nada específico en el estándar sobre con qué caracteres puede comenzar.

En particular, no estoy seguro de si es legal o no que los archivos o secuencias XML comiencen con espacios en blanco antes del primero.<

Respuesta1

Una entidad de documento siempre debe comenzar con "<", pero si no hay una declaración XML, esto puede ir precedido de un espacio en blanco.

Una entidad analizada externa no requiere un "<" inicial. Las entidades analizadas externas normalmente no se analizan por sí solas, solo cuando se hace referencia directa o indirectamente desde una referencia de entidad en una entidad de documento.

La especificación no es realmente tan complicada.

[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)+

deja bastante claro que si XMLDecl está ausente, entonces el documento puede comenzar con Misc, que incluye la opción de espacios en blanco. Sin embargo, XMLDecl, doctypedecl, element, Commenty PItodos comienzan con " <".

información relacionada