This example is more than a little puzzling; at least to those who are reading the spec in order and haven't boned up on parameter-entity (PE) references. PE references are the things between the % and ;; they are a special kind of entity reference, i.e. macro of no arguments, for use in the DTD. Because PE references are expanded before they are actually parsed, this doesn't really show an example of an element declaration. On the other hand, if you look at a real declaration in a real commercial DTD, this kind of thing is what you'll mostly see.
Also, it's worth noting that this example would be flat-out illegal in the internal subset; it would have to occur in the external subset or an external parameter entity.
Copyright © 1998, Tim Bray. All rights reserved.