There is an IMHO very important issue to use a DTD (maybe together with a XSD if you need in-deep-validation):
In DTD you can define your own entities eg:
<!ENTITY MyName "DrDr.Hannibal Xerxes Utah,MBA and CEO">
In your document you can wherevever needed simply code &MyName; instead typing all this stuff.
Furthermore assume you have a XML-like file (maybe produced by some other application) that consists of a lot of similar tags but no root-tag, eg:
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- you need this when using foreign characters like 'ü' -->
<Book Author="Author1">
<Titel>Erstes Buch</Titel>
</Book>
...
<Book Author="Author5">
<Titel>Fünftes Buch</Titel>
</Book>
Assume this file is named "Booklist.TXT",
Now you can code your master-xml:
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- you need this when using foreign characters like 'ü' -->
<DOCTYPE MyRoot [
<ENTITY AllBooks SYSTEM "Booklist.TXT">
]
<MyRoot>
... some prefix-stuff as needed ...
&AllBooks; <!-- here are all the Books -->
... some post stuff es needed ...
</MyBook>
and whenever you need the books in another context you only must code the surrounding xml and habe not to touch or copy
the booklist itself, furthermore you can maintenance it in one single place and have all changes in any document.