
Una vez que sabemos el modo de definir las hojas de un árbol de datos veamos cómo definir sus ramas, es decir los elementos que están formados por otros elementos.
Para definirlos utilizamos referencias a los grupos que los componen tal y como muestra el ejemplo:
<!ELEMENT A (B, C)>
En este caso se ha definido un elemento A que está formado por un elemento B seguido de un elemento C.
¿Y qué sucede cuando un elemento puede aparecer en el documento varias veces, hay que indicarlo de algún modo? Pues sí, también hay que indicar cuando un elemento puede no aparecer. Para ello usamos los siguientes operadores, que nos permiten definir la cardinalidad de un elemento:
- Operador opción, ?. Indica que el elemento no es obligatorio. En el siguiente ejemplo el subelemento trabajo es opcional.
<!ELEMENT telefono (trabajo?, casa )>
- Operador uno-o-más, +. Define un componente presente al menos una vez. En el ejemplo definimos un elemento formado por el nombre de una provincia y otro grupo, que puede aparecer una o varias veces.
<!ELEMENT provincia (nombre, (cp, ciudad)+ )>
Operador cero-o-mas, *. Define un componente presente cero, una o varias veces. En el ejemplo el grupo (cp, ciudad) puede no aparecer o hacerlo varias veces.
<!ELEMENT provincia (nombre, (cp, ciudad)* )>
Operador de elección, |. Cuando se utiliza sustituyendo las comas en la declaración de grupos indica que para formar el documento XML hay que elegir entre los elementos separados por este operador. En el ejemplo siguiente, el documento XML tendrá elementos provincia que estarán formados por el elemento nombre y el cp (código postal), o por el elemento nombre y la ciudad.
<!ELEMENT provincia (nombre, (cp | ciudad) )>
EJEMPLO
Si se tiene la siguiente estructura en un documento XML
<alumno>
<nombre>Olga</nombre>
<dirección>El Percebe 13</dirección>
</alumno>
Un DTD que podría ajustarse sería:
<!ELEMENT alumno (nombre, apellidos, direccion)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT dirección (#PCDATA))>
Cantidad de veces que un elemento puede aparecer en un documento.