As you learned in Chapter 2, XML predefines five entities for your convenience:
The less-than sign, a.k.a. the opening angle bracket ( < )
The ampersand ( & )
The greater-than sign, a.k.a. the closing angle bracket ( > )
The straight, double quotation marks (")
The apostrophe, a.k.a. the straight single quote (')
The DTD can define many more entities. 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 2004, O'Reilly Media, 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 . Self-referential and circular references are forbidden, however.
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:
<!ENTITY coordinate "((x, y) (y, x) ( q , r) (r, q ))" > <!ELEMENT polygon (&coordinate;, &coordinate;, &coordinate;+)>
Shortly, we'll see how to use a different kind of entitythe parameter entityto achieve the desired result.