The existing definition says:
doctypedecl ::= '<!DOCTYPE' S Name (S
ExternalID)? S? ('['
%markupdecl* ']' S?)? '>'
Now the notational devie of prefixing a production name with %, and
I quote, "specifies that <i>in the external DTD subset</i>..."
(emphasis copied from the definition). But notice that this
%markupdecl is NOT in the external DTD subset at all! Also the
definition of the % device introduces another set of ambiguities
from white space.
Me thinks that the existing official grammar is in desparate need of
a re-write.
Regards, Trevor.
--"Real Men don't Read Instruction Manuals" Tim Allen, Home Improvement