Usuario:Lmorillas/modulo lenguajes de marcas/xml/dtd

DTD
Un DTD es el documento que define la estructura que debe tener un documento XML(elementos, atributos, entidades, notaciones, etc, que pueden aparecer, el orden y el número de veces que pueden aparecer, cuáles pueden ser hijos de cuáles, etc.)

Funciones de un DTD

 * Validar documentos
 * Dar valores por defecto a atributos que no existen
 * Declarar y reemplazar entidades
 * Documentar los documentos.

¿Cómo se introduce?

 * declaración DOCTYPE

¿Dónde?
<!DOCTYPE root ... > <!DOCTYPE root SYSTEM "http://...">
 * Pueden aparecer dentro del documento xml, fuera o en ambos sitios.
 * Dentro del doc:
 * Fuera del documento:
 * Primero lee el externo, depués el interno

Declaraciones ELEMENT
<!ELEMENT name EMPTY> <!ELEMENT name (#PCDATA)> <!ELEMENT name (#PCDATA|elem1|elem2|...)*> <!ELEMENT name (elem1|elem2|...)*>
 * Especifican qué pueden contener los elementos
 * No soporte directo de namespaces
 * Los elementos pueden contener:
 * Nada
 * Texto
 * Texto y nuevos elementos (hijos)
 * Hijos

Sintaxis de declaraciones ELEMENT
<!ELEMENT name (ch1, ch2)> <!ELEMENT name (ch1|ch2)> <!ELEMENT name (ch?, ch2?, ch3?)> <!ELEMENT name (child*)> <!ELEMENT name (child+)> Se pueden combinar las posibilidades ((a, b) | (c, d) ((a | b), (c | d))  (a, b, c)? No se puede mezclar, y | en una lista. Usa paréntesis para desambiguar.
 * Secuencia de hijos
 * Elección entre hijos
 * Secuencia de hijos opcionales
 * Cero o más ...
 * Uno o más
 * Elección entre secuencias:
 * Secuencia de opciones
 * Secuencia opcional

Restricciones
(A?, A?)
 * Un modelo mixto no puede restringir cuántas veces y el orden en que aparecen los hijos. Sólo los elementos permitidos.
 * Un modelo de sólo elementos requiere que cada elemento hijo de la instancia coincida exactamente con una parte del modelo. Lo siguente no es legal:

Comodines
<!ELEMENT name ANY>
 * Un elmento que puede contener cualquier elemento declarado en el DTD o texto

Declaración de atributos de un elemento
<!ATTLIST ename attr1 type1 default1 attr2 type2 default2 ...>

Tipos de atributos

 * CDATA
 * sin restricción


 * ID
 * un identificador


 * IDREF
 * tiene que coincidir con un ID de un elemento.


 * NMTOKEN
 * nombre o número


 * IDREFS
 * uno o más IDs separados por espacios


 * NMTOKENS
 * uno o más separados por espacios

Atributos por defecto
#FIXED "value" #REQUIRED "valor" #IMPLIED
 * Valor requerido, lo insertará el parser
 * Atributo requerido, pero sin valor específico
 * Atributo no requerido, con valor por defecto
 * Atributo no requerido, sin valor por defecto:

Declaración de entidades
<!ENTITY nombreEntidad "valorEntidad"> &nombreEntidad;
 * Declaran un nombre para texto que se insertará en el documento
 * Se insertan así:

Entidades parámetro
<!ENTITY %datos_personales "nombre|telefono|email"> <!ENTITY %empleado (departamento, %datos_personales)>

Entidades y notaciones
Combinar datos textuales y no textuales. <!ELEMENT logo EMPTY> <!ATTLIST logo imagen ENTITY #REQUIRED> <!NOTATION GIF SYSTEM "visor_sistemas"> <!ENTITY logo_centro SYSTEM "http://www.miempresa.com/logo.gif"> NDATA GIF>

