Why would you want multiple declarations? Here's one scenario: normally, all your attribute-list declarations are placed (quite properly) in the external subset of the DTD, so that you can use those declarations to validate lots of different documents.
But these declarations are not just used for validation; they are also very useful for giving attributes default values, which increases maintainability and decreases document size. The key point is that you can do this even when you're not validating. But a non-validating processor is not required to read anything but the internal subset, so if you have any attributes you want to declare defaults for, you might want to insert copies of those declarations in the internal subset for transmission over the network. But doing this would make the document invalid, because the declarations would be duplicated in the internal and external subsets.
Rather than work around this, XML decided, after consultation with the SGML community, simply to drop SGML's existing rule against duplicate attribute lists. While the SGML standard has been revised to make this legal in SGML as well, the pre-1998 inventory of commercial SGML tools absolutely won't allow it.
Back-link to specCopyright © 1998, Tim Bray. All rights reserved.