Redefining Parameter Entities
What makes parameter entity references particularly
powerful is that they can be redefined. If a document uses both
internal and external DTD subsets, then the internal DTD subset can
specify new replacement text for the entities. If ELEMENT
and ATTLIST
declarations in the external DTD
subset are written indirectly with parameter entity references,
instead of directly with literal element names, the internal DTD
subset can change the DTD for the document. For instance, a single
document could add a bedrooms
child element to the listings by redefining the residential_content
entity like
this:
<!ENTITY % residential_content "address, footage, rooms, bedrooms, baths, available_date">
In the event of conflicting entity declarations, the first one
encountered takes precedence. The parser reads the internal DTD
subset first. Thus, the internal definition of the residential_content
entity is used. When
the parser reads the external DTD subset, every declaration that
uses the residential_content
entity will contain a bedrooms
child element it wouldn’t otherwise have.
Modular XHTML, which we’ll discuss in Chapter 7, makes heavy use of this technique to allow particular documents to select only the subset of HTML that they actually need.
Get XML in a Nutshell, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.