Nested DTDs

Richard L. Goerwitz richard at
Fri Jun 18 16:31:01 BST 1999

James Tauber wrote:

> What you *can* do, or rather what the designer of the report DTD can do, is
> write report.dtd as:
> <!ELEMENT report (title,paragraph+)>
> <!ELEMENT title (#PCDATA)>
> <!ENTITY % paragraph.ext "">
> <!ELEMENT paragraph (#PCDATA| %para.ext; emph)*>
> <!ELEMENT emph (#PCDATA)>

Just for the record, this isn't entirely okay.  You're violating a few
"for interoperability" constraints.

First off, the empty parameter entity replacement text is no good in a
content model.  Secondly, even if you replace it with something like
<!ENTITY % paragraph.ext "stuff |">, that's not strictly okay either,
unless you are tricky and cut and paste tokens by defining them all
inside an internal parameter entity.

This ugly mess will actually pass muster:

<!ELEMENT report (title,paragraph+)>
<!ELEMENT title (#PCDATA)>
<!ENTITY % para.ext "stuff |">
<!ENTITY % paradecl "<!ELEMENT paragraph (#PCDATA| %para.ext; emph)*>">
<!ELEMENT stuff (#PCDATA)>

I'm always wondering why all this "for interoperability" language is
in the spec.  It's hard to know what weight to assign something that's
neither legal nor illegal - or something that's technically valid, but
discouraged in some usage contexts that aren't very clearly defined in
the spec.


Richard Goerwitz
PGP key fingerprint:    C1 3E F4 23 7C 33 51 8D  3B 88 53 57 56 0D 38 A0
For more info (mail, phone, fax no.):  finger richard at

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at
Archived as: and on CD-ROM/ISBN 981-02-3594-1
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