Saltar al contenido principal

Declaración

En cualquier caso, la declaración de un DTD debe ir en el DOCTYPE (Document Type Declaration).

En este apartado, se mostrarán las tres formas de integrar un DTD en un XML:

  • De manera externa.
  • De manera interna.
  • De manera mixta.

Declaración externa

En la declaración externa se especifica una ubicación externa donde se encuentra el archivo DTD.

La ubicación externa del fichero puede ser:

  • Privada: se indica en el DOCTYPE mediante la palabra clave SYSTEM.
  • Pública: el fichero es accesible desde una URL pública. En este caso, se utiliza la palabra clave PUBLIC.

Por ejemplo, si el documento es privado, la declaración sería de la siguiente manera:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE email SYSTEM "email.dtd">
<email>
<date>2021-01-20</date>
<to>Tove</to>
<from>Jani</from>
</email>

El fichero email.dtd debe existir y su contenido podría ser el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT email (date, to, from)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT date (#PCDATA)>

Esta forma permite compartir un documento DTD entre varios ficheros XML, evitando tener que escribir el mismo código continuamente. Por este motivo, es la forma más recomendada.

Declaración interna

En la declaración interna, el contenido del DTD se incluye directamente en el DOCTYPE del documento XML.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE email[
<!ELEMENT email (date, to, from)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
]>
<email>
<date>2021-01-20</date>
<to>Tove</to>
<from>Jani</from>
</email>

Declaración mixta

La declaración mixta consiste en combinar la declaración externa con la interna.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE email SYSTEM "email.dtd" [
<!ELEMENT email (date, to, from)>
]>
<email>
<date>2021-01-20</date>
<to>Tove</to>
<from>Jani</from>
</email>

El fichero email.dtd debe existir y su contenido podría ser el siguiente:

<!ELEMENT date (#PCDATA)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>