Solution: Extending DTDs for Backward Compatibility

David Megginson ak117 at
Fri Jan 30 00:50:30 GMT 1998

Joe Lapp writes:

 > I need to create DTDs that are extensible.  An application knowing the
 > semantics behind an old DTD may be handed an XML document written with an
 > extended DTD.  The old application should be able to function with the
 > extended document by ignoring the extensions.  I need advice on the best
 > way to go about creating the initial DTD (and subsequent DTDs, should their
 > designs also be a factor).

This falls solidly into the domain of problems for architectural
forms: just use the previous version of the DTD as the base
architecture, and derive any new element types from something that's
already there.  

For example, if you have a DTD with the root element "doc", and you
are creating an extended version by adding an element type named
"foreign", you can derive that from the most similar element type in
the old version of the DTD (say, "emphasis").  Here's how you do it:

 <!ELEMENT foreign (#PCDATA)>
 <!ATTLIST foreign
   doc NMTOKEN #FIXED "emphasis">

Piece o'cake.

<plug role="tactless">
 I've got tons of examples like this in my forthcoming book
 <title>Structuring XML Documents</title>, from Prentice-Hall: it
 should be hitting the bookstores at the end of March.  There's even a
 whole chapter on backwards-compatibility for DTDs. Buy, BUY, BUY!

All the best,


David Megginson                 ak117 at
Microstar Software Ltd.         dmeggins 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