Saltar al contenido principal

Secciones condicionales

Es posible incluir o ignorar partes de la declaración de un DTD mediante las palabras clave INCLUDE e IGNORE, respectivamente.

El uso de las secciones condicionales suele estar ligado a entidades paramétricas.

La sintaxis es la siguiente:

<![ INCLUDE [ declaraciones ]]>
<![ IGNORE [ declaraciones ]]>

Consideremos el siguiente documento XML:

<?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>

El fichero persona.dtd tiene el siguiente contenido:

<![ %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)>

Ambos archivos son equivalente al siguiente:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE persona SYSTEM "persona.dtd" [
<!ELEMENT persona (nombre, edad)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellidos (#PCDATA)>
<!ELEMENT edad (#PCDATA)>
<!ELEMENT ciudad (#PCDATA)>
]>
<persona>
<nombre>Elsa</nombre>
<edad>23</edad>
</persona>

Es decir, se tiene en cuenta el código DTD dentro de %datos_basicos;.

Consideremos ahora que modificamos los valores de las entidades de la siguiente manera:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE persona SYSTEM "persona.dtd" [
<!ENTITY % datos_basicos "IGNORE">
<!ENTITY % datos_ampliados "INCLUDE">
]>
<persona>
<nombre>Elsa</nombre>
<edad>23</edad>
</persona>

Teniendo en cuenta que el archivo persona.dtd sigue siendo el mismo, ambos archivos son equivalente al siguiente:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE persona SYSTEM "persona.dtd" [
<!ELEMENT persona (nombre, apellidos, edad, ciudad)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellidos (#PCDATA)>
<!ELEMENT edad (#PCDATA)>
<!ELEMENT ciudad (#PCDATA)>
]>
<persona>
<nombre>Elsa</nombre>
<edad>23</edad>
</persona>