Declaraciones: <! .... >
Existen 4 tipos de declaraciones:
Elemento (ELEMENT)
Atributo (ATTLIST)
Entidad (ENTITY)
Notación (NOTATTION)
Define un elemento (etiqueta) nuevo: <!ELEMENT nombre contenido>
Contenido:
EMPTY (Nada) indica que el elemento no incluye contenido.
ANY indica que puede contener cualquier contenido: elementos o texto
#PCDATA indica que solo puede contener texto.
Modelo de grupo: determina las reglas para la secuencia y la elección de elementos hijos en un documento XML.
Lista:
secuencia: " , " Especifica que los elementos deben aparecer en un orden específico.
elección: " | " Indica que sólo uno de los elementos listados puede aparecer. Por ejemplo, <!ELEMENT A (B | C)> significa que el elemento A puede contener o bien B o bien C, pero no ambos.
ocurrencias:
?: El elemento es opcional (0 o 1 vez).
*: El elemento puede ocurrir cero o más veces.
+: El elemento debe aparecer una o más veces.
Modelo mixto: se refiere a un tipo de declaración de elementos que permite una combinación de elementos y texto PCDATA (Parsed Character Data). El modelo mixto es útil cuando necesitas que un elemento contenga tanto texto como otros elementos, en cualquier orden.
Combinación de Texto y Elementos: Permite mezclar texto libre con elementos definidos.
Orden Flexible: Los elementos y el texto pueden aparecer en cualquier orden.
Uso de *: El asterisco (*) al final índica que la combinación de texto y elementos puede ocurrir cero o más veces.
Crea un DTD para un elemento <pedido> que debe contener un <cliente>, seguido de uno o más <producto>, y opcionalmente un <descuento> al final.
<!ELEMENT pedido (cliente, producto+, descuento?)>
<!ELEMENT cliente (#PCDATA)>
<!ELEMENT producto (#PCDATA)>
<!ELEMENT descuento (#PCDATA)>
Define un DTD para un elemento <contenido> que puede contener o bien una serie de <texto>, o bien una combinación de <imagen> y <video>.
<!ELEMENT contenido (texto* | (imagen, video))>
<!ELEMENT texto (#PCDATA)>
<!ELEMENT imagen (#PCDATA)>
<!ELEMENT video (#PCDATA)>
Diseña un DTD para un elemento <encuesta> que consiste en una serie de preguntas, donde cada pregunta puede ser de tipo <abierta> o <opciones>
<!ELEMENT encuesta (pregunta+)>
<!ELEMENT pregunta (abierta | opciones)>
<!ELEMENT abierta (#PCDATA)>
<!ELEMENT opciones (opcion+)>
<!ELEMENT opcion (#PCDATA)>
Crea un DTD para un <artículo> que contiene un <título>, seguido de <contenido>, que a su vez puede ser una mezcla de párrafos (<p>) y listas (<lista>).
<!ELEMENT artículo (título, contenido)>
<!ELEMENT título (#PCDATA)>
<!ELEMENT contenido (p | lista)+>
<!ELEMENT p (#PCDATA)>
<!ELEMENT lista (item+)>
<!ELEMENT item (#PCDATA)>
Crea un DTD para un elemento <entrada> que puede contener texto, así como elementos <negrita>, <italica> y <enlace>, en cualquier combinación y orden.
<!ELEMENT entrada (#PCDATA | negrita | italica | enlace)*>
<!ELEMENT negrita (#PCDATA)>
<!ELEMENT italica (#PCDATA)>
<!ELEMENT enlace (#PCDATA)>
Diseña un DTD para un elemento <comentario> que puede contener texto y elementos <cita>. Los elementos <cita> también deben ser de modelo mixto, conteniendo texto y elementos <autor>.
<!ELEMENT comentario (#PCDATA | cita)*>
<!ELEMENT cita (#PCDATA | autor)*>
<!ELEMENT autor (#PCDATA)>
Elabora un DTD para un elemento <descripcion> que puede incluir texto, <lista>, y <imagen>. Cada <lista> puede contener varios elementos <item>, que son de modelo mixto con texto y <resaltado>.
<!ELEMENT descripcion (#PCDATA | lista | imagen)*>
<!ELEMENT lista (item+)>
<!ELEMENT item (#PCDATA | resaltado)*>
<!ELEMENT resaltado (#PCDATA)>
<!ELEMENT imagen (#PCDATA)>
Define un DTD para un elemento <dialogo> de una obra de teatro, que puede incluir texto y elementos <personaje>. El elemento <personaje> debe ser de modelo mixto, incluyendo su nombre y líneas de diálogo como texto.
<!ELEMENT dialogo (#PCDATA | personaje)*>
<!ELEMENT personaje (#PCDATA)*>
la declaración de un atributo se utiliza para definir las características adicionales que pueden tener los elementos en un documento XML. Los atributos ofrecen una forma de especificar información adicional sobre los elementos, como identificadores, clases, nombres de archivos, etc.
La sintaxis para declarar un atributo en un DTD es la siguiente:
<!ATTLIST nombre_del_elemento nombre_del_atributo tipo_del_atributo valor_predeterminado>
Donde:
nombre_del_elemento: Es el nombre del elemento XML al que se aplica el atributo.
nombre_del_atributo: Es el nombre del atributo.
tipo_del_atributo: Es el tipo de dato que puede tomar el atributo. Los tipos comunes incluyen:
CDATA para cadena de caracteres,
NMTOKEN es similar a CDATA, pero solo acepta caracteres válidos para nombrar cosas y no acepta espacios en blanco.
NMTOKENS es una lista de NMTOKEN separados por un espacio en blanco
ID para identificadores únicos. Debe empezar por una letra, "_", ":" y el resto letras, dígitos, "_", " : " ," . " o " - "
IDREF hace referencia a un ID a un atributo ya definido como ID en el mismo documento
IDREFS es una lista de IDREF
valor_predeterminado: Define el valor predeterminado del atributo o si es requerido u opcional. Los valores comunes son:
#REQUIRED (requerido)
#IMPLIED (opcional), o un valor predeterminado específico.
#FIXED "valor" (Fijo) al atributo tendrá un valor fijo.
Un ejemplo podría ser el siguiente:
Declaración de un atributo para el elemento <libro>, llamado isbn, que es un identificador único (ID) y es requerido.
<!ELEMENT libro (#PCDATA)>
<!ATTLIST libro isbn ID #REQUIRED>
En este ejemplo, se declara que el elemento <libro> tiene un atributo isbn que es de tipo ID (identificador único) y es obligatorio (#REQUIRED).
Otro ejemplo para un valor determinado podría ser:
Declaración de un atributo para el elemento <pagina>, llamado clase, que es un string y tiene un valor predeterminado "normal".
<!ELEMENT pagina (#PCDATA)>
<!ATTLIST pagina clase CDATA "normal">
El elemento <pagina> tiene un atributo clase de tipo CDATA (string), y si no se especifica, por defecto tendrá el valor "normal".
Crea un DTD para un elemento <libro> que tenga un atributo isbn obligatorio, un atributo edición opcional y un atributo idioma con un valor fijo "español".
<!ELEMENT libro EMPTY>
<!ATTLIST libro
isbn ID #REQUIRED
edicion CDATA #IMPLIED
idioma CDATA #FIXED "español">
Define un DTD para un elemento <conferencia> que tenga un atributo nombre obligatorio, un atributo fecha opcional y un atributo ubicación con un valor fijo "virtual" debido a restricciones de viaje.
<!ELEMENT conferencia (#PCDATA)>
<!ATTLIST conferencia
nombre CDATA #REQUIRED
fecha CDATA #IMPLIED
ubicacion CDATA #FIXED "virtual">
Crea un DTD para un elemento <departamento> con un atributo id obligatorio y un elemento <empleado> que tiene un atributo deptoID que referencia el id del departamento.
<!ELEMENT departamento EMPTY>
<!ATTLIST departamento id ID #REQUIRED>
<!ELEMENT empleado (#PCDATA)>
<!ATTLIST empleado deptoID IDREF #REQUIRED>
Elabora un DTD para un elemento <vehiculo> que tenga un atributo tipo con opciones "coche", "moto" o "bicicleta", siendo "coche" el valor predeterminado, y un atributo color que es opcional.
<!ELEMENT vehiculo EMPTY>
<!ATTLIST vehiculo
tipo (coche | moto | bicicleta) "coche"
color CDATA #IMPLIED>
Define un DTD para un elemento <libro> con un atributo autor obligatorio y un elemento anidado <capitulo> que tenga un atributo título opcional y un número de capítulo fijo.
<!ELEMENT libro (capitulo+)>
<!ATTLIST libro autor CDATA #REQUIRED>
<!ELEMENT capitulo (#PCDATA)>
<!ATTLIST capitulo
titulo CDATA #IMPLIED
numero CDATA #FIXED "1">