An external parsed general entity reference is declared in the DTD
using an ENTITY declaration. However, instead of
the actual replacement text, the SYSTEM keyword
and a URI to the replacement text is given. For example:
<!ENTITY footer SYSTEM "http://www.oreilly.com/boilerplate/footer.xml">
Of course, a relative URL will often be used instead. For example:
<!ENTITY footer SYSTEM "/boilerplate/footer.xml">
In either case when the general entity reference
&footer; is seen in the character data of an
element, the parser may replace it with the document found at
http://www.oreilly.com/boilerplate/footer.xml.
References to external parsed entities are not allowed in attribute
values. Most of the time, this shouldn't be too big
a hassle because attribute values tend to be small enough to be
easily included in internal entities.
Notice we wrote that the parser may replace the
entity reference with the document at the URL, not that it must. This
is an area where parsers have some leeway in just how much of the XML
specification they wish to implement. A validating parser must
retrieve such an external entity. However, a nonvalidating parser may
or may not choose to retrieve the entity.
Furthermore, not all text files can serve as external entities. In
order to be loaded in by a general entity reference, the document
must be potentially well-formed when inserted into an existing
document. This does not mean the external entity itself must be
well-formed. In particular, the external entity might not have a
single root element. However, if such a root element were wrapped
around the external entity, then the resulting document should be
well-formed. This means, for example, that all elements that start
inside the entity must finish inside the same entity. They cannot
finish inside some other entity. Furthermore, the external entity
does not have a prolog and, therefore, cannot have an XML declaration
or a document type declaration.