Tutoriales de informática - Abrirllave.com

Abrirllave.com

Cardinalidad de los elementos en una DTD

En una DTD, para definir el número de veces que pueden aparecer los elementos de un documento XML, se pueden utilizar los operadores de cardinalidad mostrados en la siguiente tabla:

Operadores de cardinalidad en DTD
Operador Cardinalidad Significado
? (interrogación) 0-1 El elemento es opcional, pudiendo aparecer una sola vez o ninguna.
* (asterisco) 0-n El elemento puede aparecer cero, una o más veces.
+ (signo más) 1-n El elemento tiene que aparecer, obligatoriamente, una o más veces.

Nota: 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, en el o los documentos XML a los que se asocie.

Operador de cardinalidad "+" (signo más)

EJEMPLO En el siguiente documento XML, el elemento "nombre" tiene que aparecer una o más veces. En este caso, aparece tres veces:

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

<personas>
   <nombre>Ana</nombre>
   <nombre>Iker</nombre>
   <nombre>Elsa</nombre>
</personas>

Operador de cardinalidad "*" (asterisco)

EJEMPLO En la DTD interna del siguiente documento XML, se ha indicado que el elemento "nombre" tiene que aparecer una única vez. Ahora bien, el elemento "ingrediente" tiene cardinalidad (0-n), por tanto, puede aparecer cero, una o más veces:

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

<receta_de_cocina>
   <nombre>Tortilla de patatas</nombre>
   <ingrediente>Huevo</ingrediente>
   <ingrediente>Patata</ingrediente>
   <ingrediente>Aceite</ingrediente>
   <ingrediente>Sal</ingrediente>
</receta_de_cocina>

Operador de cardinalidad "?" (interrogación)

EJEMPLO En la DTD del siguiente documento XML, la cardinalidad del elemento "mayor_de_edad" es (0-1), siendo opcional su aparición:

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

<persona>
   <nombre>Iker</nombre>
   <mayor_de_edad/>
</persona>

Así pues, el siguiente documento también es válido:

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

<persona>
   <nombre>Iker</nombre>
</persona>