Just Because There's a DTD...

... doesn't mean you have to check for validity. There is a whole class of XML processors, called non-validating processors which, as their name suggest, do not check the document against the contents of the DTD, whether or not it is provided. In particular, such processors are completely free to ignore any parts of the DTD (such as the external subset, but there are others) that are in other entities.

It turns out that all processors have to read the internal subset, and on top of that, have to use some of the declarations in it. But the existence of the <!DOCTYPE declaration is not a signal to validate.

Back-link to spec

Copyright © 1998, Tim Bray. All rights reserved.