Assembling composite DTDs

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View

How can I best make a composite DTD by including one DTD inside another

There's a pre-existing DTD in an external Apache project. I'd like to
make use of this within our internal project, suitably extended and
wrapped.  With the aid of an internal and external subset I can do
this, as follows:

<?xml version="1.0"?>
<!DOCTYPE Container
       PUBLIC "-//Apache Software Foundation//DTD OJB Repository//EN"
       " "
     <!-- Wrapper element -->
    <!ELEMENT Container (jdbc-connection-descriptor) >

    <!-- Remove the attribute we don't want  -->
    <!ATTLIST jdbc-connection-descriptor jcd-alias      CDATA #IMPLIED
Quoted text here. Click to load it

    <!-- Add a couple of attributes we do want -->
    <!ATTLIST jdbc-connection-descriptor schema         CDATA #IMPLIED
Quoted text here. Click to load it
    <!ATTLIST jdbc-connection-descriptor displayname    CDATA #IMPLIED
Quoted text here. Click to load it


Now obviously I don't want to have to repeat this internal subset into
every one of our documents. I'd like to make a local DTD that
represents this combination of internal and external subsets, as a
single DTD that I can refer to from other documents.  Is there any way
to do this?

AFAIK, it's possible to do this, but _only_ if the original DTD was
written with that in mind (DocBook is an example) and it was already
written as modularised components that defined entitites representing
the DTD content and would be expanded in a wrapper DTD. Changing the
wrapper DTD allows you to incorporate the same entities, but manipulate
them however you like. In the simple case though, the DTD is inflexible
except by the rather clumsy way I've done it above.

Is this the best I can do?  Should I look at a port to XML Schema

Apologies for the x-post to c.i.w.a.h, but the traffic there catches
the eyeballs of some people whose opinion I'd respect on this.

Re: Assembling composite DTDs

Quoted text here. Click to load it

I believe that's correct.

() ASCII Ribbon Campaign  | Joe Kesselman
/\ Stamp out HTML e-mail! | System architexture and kinetic poetry

Re: Assembling composite DTDs

Andy Dingley wrote:

Quoted text here. Click to load it

Create a file, e.g. my.dtd with (untested code warnings!!)

<!-- this will include the repository.dtd -->
<!ENTITY % repository.dtd
  PUBLIC "-//Apache Software Foundation//DTD OJB Repository//EN"
         " ">

<!-- add your own declarations here -->
<!-- Wrapper element -->

and use it as in
<!DOCTYPE Container SYSTEM "path/to/my.dtd">

Quoted text here. Click to load it

If the DTD is designed for customizations, you could declare parameter
entities before including the DTD to adjust some things to you own needs.
If the DTD is not designed for customizations, you can still add attributes,
entities, etc. but the possibilities are rather limited.

Benjamin Niemann
Email: pink at odahoda dot de
WWW: /

Re: Assembling composite DTDs

Quoted text here. Click to load it

See the FAQ on exactly this: /


Re: Assembling composite DTDs


Quoted text here. Click to load it

If you decide to abandon DTDs, RELAX NG is likely to be a better choice
than W3C XML Schema. And the Compact Syntax is even human-writable.


Henri Sivonen /
Validation Service for RELAX NG: /

Site Timeline