Secciones condicionales en DTD
En DTD externas se pueden definir las secciones IGNORE e INCLUDE, para ignorar o incluir declaraciones. Las sintaxis empleadas para ello son:
<![ IGNORE [ declaraciones ]]>
<![ INCLUDE [ declaraciones ]]>
El uso de las secciones condicionales suele estar ligado a entidades paramétricas.
EJEMPLO Si en un archivo llamado "persona.dtd" se ha escrito:
<![ %datos_basicos; [
<!ELEMENT persona (nombre, edad)>
]]>
<![ %datos_ampliados; [
<!ELEMENT persona (nombre, apellidos, edad, ciudad)>
]]>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellidos (#PCDATA)>
<!ELEMENT edad (#PCDATA)>
<!ELEMENT ciudad (#PCDATA)>
El siguiente documento XML sería válido:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE persona SYSTEM "persona.dtd" [
<!ENTITY % datos_basicos "INCLUDE">
<!ENTITY % datos_ampliados "IGNORE">
]>
<persona>
<nombre>Elsa</nombre>
<edad>23</edad>
</persona>
También sería válido el documento:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE persona SYSTEM "persona.dtd" [
<!ENTITY % datos_basicos "IGNORE">
<!ENTITY % datos_ampliados "INCLUDE">
]>
<persona>
<nombre>Ana</nombre>
<apellidos>Sanz Tin</apellidos>
<edad>19</edad>
<ciudad>Pamplona</ciudad>
</persona>
- Obsérvese que, en este ejemplo, en los dos documentos XML asociados a la DTD externa escrita en el archivo "persona.dtd", se ha indicado –por medio de IGNORE e INCLUDE– si el elemento "persona" tiene que contener 2 ó 4 hijos, es decir, ("nombre" y "edad") o ("nombre", "apellidos", "edad" y "ciudad").