Uso de una entidad dentro de otra en una DTD
EJEMPLO En la DTD del siguiente documento XML, se han declarado dos entidades generales internas analizables (color y frase):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE frase [
<!ELEMENT frase (#PCDATA)>
<!ENTITY color "azul">
<!ENTITY frase "El cielo es &color;.">
]>
<frase>&frase;</frase>
- Obsérvese que, la entidad color ha sido referenciada en el valor de la entidad frase. De forma que, si este documento XML se visualizase en un navegador web, se vería:
Referencia circular o recursiva de entidades
EJEMPLO La DTD del siguiente documento XML no es correcta, ya que, la entidad frase1 ha sido referenciada en el valor de la entidad frase2, y al revés también:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE frase [
<!ELEMENT frase (#PCDATA)>
<!ENTITY frase1 "Esta frase incluye a la &frase2;.">
<!ENTITY frase2 "Esta frase incluye a la &frase1;.">
]>
<frase>&frase1;</frase>
Para que dicha DTD fuese correcta, habría que quitar una de las dos referencias a entidades. Por ejemplo escribiendo:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE frase [
<!ELEMENT frase (#PCDATA)>
<!ENTITY frase1 "Esta frase incluye a la &frase2;.">
<!ENTITY frase2 "segunda frase">
]>
<frase>&frase1;</frase>