It turns out that several kinds of things in XML can have multiple declarations. When this happens, the one that appears first "wins" and subsequent declarations are ignored.
In this case, when one of the declarations is in the internal, and one in the external, subset, the internal subset wins. Instead of just saying this, the spec is playing it a bit cute here and letting this policy fall out of the fact that the internal subset is "considered to appear before" the other. This semantic tap-dance is inherited from SGML.
Copyright © 1998, Tim Bray. All rights reserved.