모든 XML 파일/스트림/등은 "

모든 XML 파일/스트림/등은 "

저는 파일 형식 감지 작업을 수행 중이며 XML 감지를 보다 강력하게 처리하고 싶었습니다.

<선택적 초기 유니코드 BOM(바이트 순서 표시)과 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, CommentPI모두 " <"로 시작합니다.

관련 정보