Muss jede XML-Datei/jeder XML-Stream/usw. entweder mit einem „

Muss jede XML-Datei/jeder XML-Stream/usw. entweder mit einem „

Ich arbeite an der Erkennung von Dateitypen und wollte die XML-Erkennung robuster handhaben.

Ich habe Unterstützung für eine optionale anfängliche Unicode-BOM (Byte Order Mark) hinzugefügt, gefolgt von einem <Zeichen in 8-Bit- oder UTF-16-Kodierung.

(Dies ist nur ein erster Test. Wenn dieser Test erfolgreich ist, versuche ich, es als XML zu analysieren. Das mache ich jedoch nur, wenn es wie XML aussieht, da es mehr Ressourcen beansprucht.)

Ich habe mir den XML-Standard angesehen, aber der Jargon wurde ziemlich kompliziert und ich bin mir nicht sicher, ob ich alle Grammatikregeln richtig befolgt habe, insbesondere bei den eher esoterischen Funktionen von XML. Ich habe im Standard jedoch nichts Spezifisches darüber gefunden, mit welchen Zeichen es beginnen kann.

Insbesondere bin ich mir nicht sicher, ob es zulässig ist, dass XML-Dateien oder -Streams mit Leerzeichen beginnen,<

Antwort1

Eine Dokumentenentität muss immer mit „<“ beginnen. Wenn jedoch keine XML-Deklaration vorhanden ist, kann davor ein Leerzeichen stehen.

Eine extern analysierte Entität erfordert kein anfängliches „<“. Extern analysierte Entitäten werden normalerweise nicht allein analysiert, sondern nur, wenn sie direkt oder indirekt von einer Entitätsreferenz in einer Dokument-Entität referenziert werden.

Die Spezifikation ist eigentlich nicht so kompliziert.

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

macht ziemlich deutlich, dass das Dokument mit Misc beginnen kann, wenn XMLDecl fehlt, was die Option von Leerzeichen einschließt. XMLDecl, doctypedecl, element, Comment, und PIbeginnen jedoch alle mit " <".

verwandte Informationen