Nested DTDs
James Tauber
jtauber at jtauber.com
Fri Jun 18 08:33:35 BST 1999
By "nested DTDs" I assume you mean making use of one DTD's vocabulary with a
document that makes use of another DTD's vocabulary. It is possible if the
DTDs are so designed.
Imagine that you have a "report" DTD in the file report.dtd:
<!ELEMENT report (title,paragraph+)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT paragraph (#PCDATA|emph)*>
<!ELEMENT emph (#PCDATA)>
And you also have a "person" DTD in the file person.dtd:
<!ELEMENT person (firstname, lastname)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
It is easy to make a new DTD that combined the vocabularies in the file
combined.dtd:
<!ENTITY % report "report.dtd">
<!ENTITY % person "person.dtd">
%report;
%person;
Ah, you say, but how do I actually use both of these together? How do I
allow, for example, a person to be marked up in a paragraph? You can't
override the content specification for paragraph so that combined.dtd reads:
<!ENTITY % report "report.dtd">
<!ENTITY % person "person.dtd">
<!ELEMENT paragraph (#PCDATA|person|emph)*>
%report; <!-- this is an error -->
%person;
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)>
This makes the content model of the paragraph element type extensible.
Because entity declarations can be overridden (by declaring a new literal
value earlier) you can have a combined.dtd:
<!ENTITY % report "report.dtd">
<!ENTITY % person "person.dtd">
<!ENTITY % paragraph.ext "person |">
%report;
%person;
I hope this helps.
James
xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)
More information about the Xml-dev
mailing list