Inheritance using DTDs

david at david at
Fri Jan 22 13:27:26 GMT 1999

Avneet Sawhney writes:

 > The more I look into it, I don't see DTD's as an efficient way to
 > support inheritance. The use of internal subsets seems just a
 > workaround. The use of parameter entities and the INCLUDE and
 > IGNORE statements require too much collaboration between the
 > interested parties. I guess you could make every element and
 > attribute an entity, but that does not seem appropriate.

That's exactly what TEI did in their SGML DTD (and more).  Take a look
at the declaration for <p> (paragraph):

  <!ENTITY % p 'INCLUDE' >
  <![ %p; [
  <!ELEMENT %n.p;         - O  (%paraContent;)                    >
  <!ATTLIST %n.p;    ;
	    TEIform            CDATA               'p'            >
If you declare

  <!ENTITY % p 'IGNORE'>

the <p> element will be omitted from the DTD altogether; if you

  <!ENTITY % n.p 'paragraphe'>

Then the element type will be named 'paragraphe' rather than 'p' (but
the TEIform attribute will still be 'p' so that software knows how to
process it).  You can, of course, also influence the content model in
subtle ways.

I'd say that all of this pushes DTD syntax about as far as it should
be pushed, if not several steps further -- it reminds me of all the
C-can-be-object-oriented-with-clever-enough-macros examples that
proliferated early this decade as a rear-guard action against C++.

All the best,


David Megginson                 david at

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