You are on page 1of 6

TEMA 3.

DTD

Definición
La declaración XML que se puede escribir al principio de un documento XML, empieza
con los caracteres "<?" y termina con "?>" al igual que las instrucciones de
procesamiento. Sin embargo, la declaración XML no es una instrucción de
procesamiento (o proceso).En un documento XML no es obligatorio que aparezca. Y
no se muestra en el navegador.

Declaración de elementos en una DTD


Elemento raíz: Siempre aparecerá un elemento raíz. Uno y sólo uno.
TIPOS
DTD XML
ELEMENTOS

Texto,
<!ELEMENT
(#PCDATA).Cualquier <ciudad>Roma</ciudad>
ciudad(#PCDATA)>]>
txto.

!ELEMENT ciudad (nombre,


<ciudad>
pais)>

<nombre>Roma</nombre>
Otros <!ELEMENT nombre (#PCDATA)>
elementos(hijos).
<pais>Italia</pais>
<!ELEMENT pais (#PCDATA)>

</ciudad>
<ciudad>

<!DOCTYPE persona [

Empty En este caso <!ELEMENT persona (nombre,


aparecería la mayor_de_edad, ciudad)> <persona><nombre>Elsa</nombre>
etiqueta de apertura <mayor_de_edad/>
<!ELEMENT nombre (#PCDATA)>
y cierre y nada de <ciudad>Pamplona</ciudad></persona>
contenido. <!ELEMENT mayor_de_edad
EMPTY><!ELEMENT ciudad
(#PCDATA)>

<?
xmlversion="1.0"encoding="
UTF-8"?>

Empty con <!DOCTYPEetiquetas_html[ <etiquetas_html>


atributos. No
pueden tener <!ELEMENTetiquetas_html(br <brdescripcion="Saltodelínea"/>
contenido pero sí )>
atributos. </etiquetas_html>
<!ELEMENTbrEMPTY>

<!ATTLIST br descripcion
CDATA#REQUIRED>

<?
xmlversion="1.0"encoding="
ANY. Cualquier UTF-8"?><!DOCTYPEejemplo[ <ejemplo><cualquier_contenido>
contenido.Txto,ele <texto>Texto1</texto>
mentos o ambos. <!ELEMENTejemplo(cualquie <texto>Texto2</texto>
No se le puede r_contenido)> <texto>Texto3</texto>
poner asterisco. </cualquier_contenido></ejemplo>
<!ELEMENT
cualquier_contenidoANY>
CORREGIR ERRORES DE DTD Y XML

29
<paises>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE paises [ <pais>italia</pais>

<!ELEMENT paises (pais, ciudad?)*> <ciudad>florencia</ciudad>

<!ELEMENT pais (#PCDATA)> <pais>portugal</pais>

<!ELEMENT ciudad (#PCDATA)> <ciudad>lisboa</ciudad>

Significado: paises tiene dos elementos hijos <pais>francia</pais>


que se pueden repetir cero o muchas veces.
</paises>
estos elementos hijos pais tiene que aparecer
una y sola una vez y ciudad puede aparecer 0-
n. Por eso a Francia no le aparece ciudad.

28

<?xml version="1.0" encoding="UTF-8"?> <ropa>


<!DOCTYPE ropa [
<nombre>guante</nombre>
<!ELEMENT ropa (nombre, color*)>
<color>rojo</color>
<!ELEMENT nombre (#PCDATA)>
<color>blanco</color>
<!ELEMENT color (#PCDATA)>]>
</ropa>
Ropa tiene dos hijos nombre que solo aparece
una vez y color que puede aparecer 0-n. Estos
hijos sólo pueden aparecer una vez. Hay que
cerrar ropa y volverla a abrir.

CARDINALIDAD DE LOS ELEMENTOS


Los elementos declarados en una DTD sobre los que no actúe ningún operador de cardinalidad,
tendrán que aparecer obligatoriamente una única vez
Aparece ninguna vez o solo
? 0-1
una

Obligatoriamente tiene que


+ 1-n aparecer una vez y puede
aparecer muchas.

Puede no aparecer o aparecer


* 0-n
muchas veces.

ELEMENTOS OPCIONALES
En la DTD asociada a un documento XML se pueden declarar elementos que tengan elementos hijos
opcionales. Para eso se marca con una barra. Y obligatoriamente tendrá que contener uno de ellos
pero sólo uno. Al utilizar el operador de elección (|) en una DTD, si una de las opciones es #PCDATA,
esta debe escribirse en primer lugar y luego las otras opciones. (diapo 41). Si es PCDATA se pone
suelto sin etiqueta (Diapo 42).

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE articulo [

<!ELEMENT articulo (codigo | id)>

<!ELEMENT codigo (#PCDATA)>

<!ELEMENT id (#PCDATA)>]>

]>

Ejemplo en el que si aparecerían los dos y varias veces y en el orden que quieran: (diapo 38)

<!DOCTYPE articulos [

<!ELEMENT articulos (codigo | id)*>

<!ELEMENT codigo (#PCDATA)>

<!ELEMENT id (#PCDATA)>]>

]>

DECLARACIÓN DE ATRIBUTOS
<!ATTLIST nombre-del-elemento nombre-del-atributo tipo-de-atributo valor-del-atributo>

TIPOS DE ATRIBUTOS
CDATA: el atributo contiene caracteres (sin restricciones)

<!ELEMENT f1 (#PCDATA)>
<!ATTLIST f1 pais CDATA "España">

Para el elemento "f1", pais es un atributo definido de tipo CDATA que tiene un valor por defecto que es
España. Si no se le asigna otro será España.

<!ELEMENT f1 (#PCDATA)>

<!ATTLIST f1 pais CDATA "España">

<!ATTLIST f1 fecha_de_nacimiento CDATA #IMPLIED>

<!ATTLIST f1 equipo CDATA #REQUIRED>

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>

Cuando en una DTD,se quiere declarar un atributo que tome un valor fijo, esto se puede hacer con
#FIXED. Todos los elementos apareceran con ese valor en el atributo y además no se puede modificar.

En una DTD, los atributos declarados IDREF son aquellos cuyo valor tiene que existir en otro atributo
ID del documento XML. (Diapo 58). Un atributo IDREF también se le puede especificar un valor
por defecto, un valor fijo o que sea opcional escribirlo, #IMPLIED.

Los identificadores del valor ID tienen que ser únicos. Todo atributo declarado de tipo ID tiene que
ser #IMPLIED (opcional) o #REQUIRED (obligatorio).

<!ELEMENT director (#PCDATA)>

<!ATTLIST director coddirID #REQUIRED>

<!ELEMENT peliculas(pelicula)*>

<!ELEMENT pelicula(#PCDATA)>

<!ATTLIST pelicula direccion IDREF #REQUIRED>

<director coddir="JC">James Cameron</director>

</directores>

<peliculas>

<pelicula direccion="JC">Avatar</pelicula>

<pelicula direccion="CE">MysticRiver</pelicula>

<pelicula direccion="JC">Titanic</pelicula>
</peliculas>

You might also like