Declaración de atributos en una DTD
La sintaxis básica para declarar un atributo en una DTD es:
<!ATTLIST nombre-del-elemento nombre-del-atributo tipo-de-atributo valor-del-atributo>
Declaración de un atributo indicando un valor por defecto
EJEMPLO En la DTD del siguiente documento XML se ha indicado que el elemento "f1" puede tener el atributo "pais":
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE deportistas [
<!ELEMENT deportistas (futbol | f1 | tenis)*>
<!ELEMENT futbol (#PCDATA)>
<!ELEMENT f1 (#PCDATA)>
<!ATTLIST f1 pais CDATA "España">
<!ELEMENT tenis (#PCDATA)>
]>
<deportistas>
<f1 pais="Alemania">Sebastian Vettel</f1>
<f1>Fernando Alonso</f1>
<tenis>Rafael Nadal</tenis>
</deportistas>
- Para el elemento "f1", pais es un atributo definido de tipo CDATA (Character DATA), es decir, su valor será una cadena de caracteres.
- Al no indicarse el país de Fernando Alonso, por defecto es "España".
- Para Sebastian Vettel, al atributo pais se le ha asignado "Alemania", que es un valor distinto al valor-del-atributo, que por defecto es "España".
Al visualizar el documento XML en un navegador web, se verá algo parecido a:
Declaración de varios atributos en un elemento
EJEMPLO En la DTD del siguiente documento XML se ha indicado que el elemento "f1" puede tener tres atributos (pais, fecha_de_nacimiento y equipo):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE deportistas [
<!ELEMENT deportistas (futbol | f1 | tenis)*>
<!ELEMENT futbol (#PCDATA)>
<!ELEMENT f1 (#PCDATA)>
<!ATTLIST f1 pais CDATA "España">
<!ATTLIST f1 fecha_de_nacimiento CDATA #IMPLIED>
<!ATTLIST f1 equipo CDATA #REQUIRED>
<!ELEMENT tenis (#PCDATA)>
]>
<deportistas>
<f1 pais="Alemania" fecha_de_nacimiento="03/07/1987" equipo="Ferrari">Sebastian Vettel</f1>
<f1 equipo="McLaren">Fernando Alonso</f1>
<tenis>Rafael Nadal</tenis>
</deportistas>
- Obsérvese que, en este ejemplo, el atributo equipo es obligatorio escribirlo, #REQUIRED. Mientras que, el atributo fecha_de_nacimiento es opcional, #IMPLIED.
En una DTD, cuando se declara más de un atributo para un elemento –como se ha hecho en este caso– no es necesario escribir varias veces <!ATTLIST, pudiéndose escribir, por ejemplo:
<!ATTLIST f1 pais CDATA "España"
fecha_de_nacimiento CDATA #IMPLIED
equipo CDATA #REQUIRED>