[22] prolog ::= XMLDecl? Misc* (doctypedecl Misc*)? [23] XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' [24] VersionInfo ::= S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"') [25] Eq ::= S? '=' S? [26] VersionNum ::= ([a-zA-Z0-9_.:] | '-')+ [27] Misc ::= Comment | PI | S
'+' means 'one or more', '?' means 'optional', '*' means 'zero or more'.
Parenthesis group constructs.
'|' (pipe character) means 'or'
'string' means the occurrence of the literal string.
[c-c] is a character class and represents a single character in the specified range.