newbie-ish DTD question: am i asking too much of XML, or of my brain?
Ronald Bourret
rbourret at ito.tu-darmstadt.de
Tue Sep 21 19:39:51 BST 1999
Rick Wayne wrote:
> i want my documents to consist of a "model" element. a model can
> contain "topics" and "links", any number, in any order. in turn, topics
> can contain topics and links, in any number, in any order.
>
> in (attempted) XML, with ATTLIST tags removed:
>
> <?XML version="1.0" encoding="UTF-8" standalone="no"?>
> <!ELEMENT model (topic* link*)>
> <!ELEMENT topic (topic* link*)>
> <!ELEMENT link>
Very close, but no cigar. In a content model with multiple entries, the
entries must be separated by a pipe symbol (|) (for choices) or a comma
(for sequences). However, just putting in one of these won't give you what
you want. For example:
<!ELEMENT model (topic* | link*)>
means you can have either a bunch of topics or a bunch of links. Instead,
what you need to do is put the zero-or-more operator (*) on the content
group as a whole and a pipe between:
<!ELEMENT model (topic | link)*>
<!ELEMENT topic (topic | link)*>
Furthermore, you need to declare a content model for the link element, such
as PCDATA (contains text) or EMPTY (contains nothing). For example:
<!ELEMENT link (#PCDATA)>
--or--
<!ELEMENT link EMPTY>
Finally, you need to put your entire DTD in the internal subset (inside the
DOCTYPE statement) or in an external DTD. For example, here's your DTD in
the internal subset:
<?XML version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE model [
<!ELEMENT model (topic | link)*>
<!ELEMENT topic (topic | link)*>
<!ELEMENT link (#PCDATA)>
]>
<model>...</model>
And here's your DTD in an external DTD.
<!ELEMENT model (topic | link)*>
<!ELEMENT topic (topic | link)*>
<!ELEMENT link (#PCDATA)>
Assuming the external DTD file was named model.dtd and that file was in the
same directory as your XML document, you could reference it from a DOCTYPE
statement as follows:
<?XML version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE model SYSTEM "model.dtd">
<model>...</model>
-- Ron Bourret
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