PEReferences in ElementDecls (Parsing of DTDs)

Chris Olds colds at
Sat Dec 19 00:11:03 GMT 1998

You ask:
>So the question is: is the XML-grammar inside the XML 1.0 Spec incomplete?
>Is there a new version? What rules do need to be adapted to allow for

The answer is found just after production [28] in the XML spec:
Document Type Definition
[28]  doctypedecl ::=  '<!DOCTYPE' S Name (S ExternalID)? S? ('['
(markupdecl | PEReference | S)* ']' S?)? '>'
[29]  markupdecl ::=  elementdecl | AttlistDecl | EntityDecl | NotationDecl
| PI | Comment

The markup declarations may be made up in whole or in part of the
replacement text of parameter entities. The productions later in this
specification for individual nonterminals (elementdecl, AttlistDecl, and so
on) describe the declarations after all the parameter entities have been
Tim Bray's (excellent) annotation on this says (in part) "This little
paragraph is awfully important. [...] the grammar describes what the text
looks like after [parameter entities ]have all been expanded." (full text is
at ).

Another easily overlooked gotcha about PEs is that they can be used for
parts of a markupdecl ([29]) (e.g. all or part of a content model) in the
external part(s) of a DTD, but can only replace an entire markupdecl in the
internal portion of a DTD.


xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at
Archived as:
To (un)subscribe, mailto:majordomo at the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at

More information about the Xml-dev mailing list