3.4. General Entity Declarations
As you learned in Chapter 2, XML predefines five entities for your convenience:
The DTD can define many more. This is useful not just in valid documents, but even in documents you don't plan to validate.
Entity references are defined with an ENTITY declaration in the DTD. This gives the name of the entity, which must be an XML name, and the replacement text of the entity. For example, this entity declaration defines &super; as an abbreviation for supercalifragilisticexpialidocious:
<!ENTITY super "supercalifragilisticexpialidocious">
Once that's done, you can use &super; anywhere you'd normally have to type the entire word (and probably misspell it).
Entities can contain markup as well as text. For example, this declaration defines &footer; as an abbreviation for a standard web-page footer that will be repeated on many pages:
<!ENTITY footer '<hr size="1" noshade="true"/> <font CLASS="footer"> <a href="index.html">O'Reilly Home</a> | <a href="sales/bookstores/">O'Reilly Bookstores</a> | <a href="order_new/">How to Order</a> | <a href="oreilly/contact.html">O'Reilly Contacts</a><br> <a href="http://international.oreilly.com/">International</a> | <a href="oreilly/about.html">About O'Reilly</a> | <a href="affiliates.html">Affiliated Companies</a> </font> <p> <font CLASS="copy"> Copyright 2000, O'Reilly & Associates, Inc.<br/> <a href="mailto:email@example.com">firstname.lastname@example.org</a> </font> </p> '>
The entity replacement text must be well-formed. For instance, you cannot put a start-tag in one entity and the corresponding end-tag in another entity.
The other thing you have to be careful about is that you need to use different quote marks inside the replacement text from the ones that delimit it. Here we've chosen single quotes to surround the replacement text and double quotes internally. However, we did have to change the single quote in "O'Reilly" to the predefined general entity reference '. Replacement text may itself contain entity references that are resolved before the text is replaced. However, self-referential and circular references are forbidden.
General entities insert replacement text into the body of an XML document. They can also be used inside the DTD in places where they will eventually be included in the body of an XML document, for instance in an attribute default value or in the replacement text of another entity. However, they cannot be used to provide the text of the DTD itself. For instance, this is illegal:
Shortly, we'll see how to use a different kind of entity--the parameter entity--to achieve the desired result.
Copyright © 2002 O'Reilly & Associates. All rights reserved.