Tutoriales de informática - Abrirllave.com

Abrirllave.com

Declaración de elementos en una DTD

Para declarar un elemento en una DTD se utiliza la siguiente sintaxis:

<!ELEMENT nombre-del-elemento tipo-de-contenido>

En el tipo de contenido se especifica el contenido permitido en el elemento, pudiendo ser:

El contenido de un elemento puede ser texto - (#PCDATA)

EJEMPLO En el siguiente documento XML, el elemento "ciudad" puede contener cualquier texto (cadena de caracteres):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ciudad [
   <!ELEMENT ciudad (#PCDATA)>
]>

<ciudad>Roma</ciudad>

Un elemento puede contener a otros elementos

EJEMPLO En el siguiente ejemplo, el elemento "ciudad" contiene a los elementos "nombre" y "pais":

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ciudad [
   <!ELEMENT ciudad (nombre, pais)>
   <!ELEMENT nombre (#PCDATA)>
   <!ELEMENT pais (#PCDATA)>
]>

<ciudad>
  <nombre>Roma</nombre>
  <pais>Italia</pais>
</ciudad>

Un elemento puede no contener contenido (estar vacío) - EMPTY

EJEMPLO En la DTD interna del siguiente documento XML, se ha declarado el elemento "mayor_de_edad" como vacío, EMPTY. Por tanto, debe escribirse <mayor_de_edad/>:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persona [
   <!ELEMENT persona (nombre, mayor_de_edad, ciudad)>
   <!ELEMENT nombre (#PCDATA)>
   <!ELEMENT mayor_de_edad EMPTY>
   <!ELEMENT ciudad (#PCDATA)>
]>

<persona>
   <nombre>Elsa</nombre>
   <mayor_de_edad/>
   <ciudad>Pamplona</ciudad>
</persona>

Nota: los elementos vacíos no pueden tener contenido, pero sí pueden tener atributos.

Un elemento puede definirse para contener contenido mixto - ANY

EJEMPLO En la DTD interna del siguiente documento XML, se ha indicado que el elemento "persona" puede contener texto y otros elementos, es decir, contenido mixto, ANY:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persona [
   <!ELEMENT persona ANY>
   <!ELEMENT nombre (#PCDATA)>
   <!ELEMENT ciudad (#PCDATA)>
]>

<persona>
   <nombre>Elsa</nombre> vive en <ciudad>Pamplona</ciudad>.
</persona>

Obsérvese que, por ejemplo, también sería válido el siguiente documento XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persona [
   <!ELEMENT persona ANY>
   <!ELEMENT nombre (#PCDATA)>
   <!ELEMENT ciudad (#PCDATA)>
]>

<persona>
   <nombre>Elsa</nombre> vive en Pamplona.
</persona>

O el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persona [
   <!ELEMENT persona ANY>
   <!ELEMENT nombre (#PCDATA)>
   <!ELEMENT ciudad (#PCDATA)>
]>

<persona>
   <nombre>Elsa</nombre>
</persona>

Incluso, si el elemento "persona" estuviese vacío, el documento también sería válido:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persona [
   <!ELEMENT persona ANY>
   <!ELEMENT nombre (#PCDATA)>
   <!ELEMENT ciudad (#PCDATA)>
]>

<persona/>