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:
- Texto, (#PCDATA).
- Otros elementos (hijos).
- Estar vacío, EMPTY.
- Mixto (texto y otros elementos), ANY
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>
- Escribiendo #PCDATA (Parsed Character Data) entre paréntesis "()", se ha indicado que el elemento "ciudad" puede contener una cadena de caracteres analizable.
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/>