Palabras clave y sintaxis de las DTD
Apéndice - W3C (World Wide Web Consortium)
Las DTDs
Las DTDs (Document Type Definition, Definición de Tipos de Documentos )
- se inventaron para validar documentos SGML (Standard Generalized Markup Language, Lenguaje de Marcado Generalizado eStándar)
- tienen una sintaxis especializada que describe la estructura de documentos HTML, XML y XHTML
Elementos 
La mayor diferencia entre HTML y XML consiste en que el segundo es extensible.
Es decir, a diferenecia de los
documentos HTML que sus elementos ya estan predefinidos en su especificación,
en XML nos podemos crear nuestros propios elementos.
| <!ELEMENT nombreElemento etiquetaOpcional tipo> |
- nombreElemento
- debe ser único en el contexto de la DTD
- etiquetaOpcional
- este campo sólo lo utiliza la DTD de HTML
- nos indica si las etiquetas de los elementos son opcionales
- esta es su sintaxis:
- - - tanto la etiqueta
inicial como la etiqueta final son obligatorias
- - O la etiqueta final se puede omitir
- O O tanto la etiqueta inicial como la final se puieden omitir
- tipo
- vacío
- no contiene ni subelementos ni contenido, pero puede contener atributos
| <!ELEMENT nombreElemento EMPTY> |
- sólo elementos
- sólo contine elementos secundarios. El contenido admitido por un elemento se denomina modelo de contenido
| <!ELEMENT nombreElemento modeloDeContenido> |
- modeloDeContenido
- se especifica por medio de una combinación de simbolos especiales
- los símbolos describen la relación que hay entre los elementos secundarios
y el elemento contenedor
- (...) paréntesis
- engloba una secuencia o un grupo de elementos secundarios
- elementoA , elementoB comas
- separa los elementos de una secuencia y establece el orden de aparición
- elementoA & elementoB ampersands
- separa los elementos de una secuencia y no establece el orden de aparición
- elementoA | elementoB canalización
- separa los elemento de un grupo de alternativas
- elementoA ningún símbolo
- ElementoA debe aparecer una sola vez
- elementoA+ signo más
- ElementoA debe aparecer una o más veces
- elementoA? signo interrogación
- ElementoA debe aparecer cero o una vez
- elementoA* signo asterisco
- ElementoA puede aparecer cero o más veces
- -elementoA signo menos
- ElementoA no debe aparecer
- mixto
- es una combinación de elementos secundarios y datos de caracteres
- hay de dos tipos
- elemento de sólo texto
- es el elemento mixto más sencillo, y se declara para que
sólo contenga datos de caracteres
| <!ELEMENT nombreElemento (#PCDATA)> |
- #PCDATA
- se utiliza para indicar que que el elemento contiene datos
de caracteres analizados sintácticamente. Es decir
un parseador interpretará que el simbolo "<" pertenece al principio de una etiqueta
- elemento 100% mixto
- los elementos pueden escribirse sin un orden preestablecido en el documento XML
- no podemos controlar el número de veces que un elemento puede aparecer
- esta última caracteríatica hace que este tipo de elemento nos pueda conducir a errores
- por ejemplo no podemos controlar que un elemento aparezca repetido en más de una ocasión o que simplemente no aparezca
- en todos estos casos el parser nunca se queja
- por todo lo expuesto, el uso de este elemento es totalmente desaconsejado
| <!ELEMENT nElement (#PCDATA | elemento1 | elemento2 | ...)*> |
- #PCDATA
- siempre se debe especificar primero en el grupo
- *
- siempre
hay que poner el asterisco, para indicar que todo el grupo
es opcional
- ANY
- puede contener
datos de caracteres, tipos de elementos declarados o una mezcla de
ambos
| <!ELEMENT
nombreElemento ANY> |
- debido a que
un elemento ANY es como un elemento mixto con un modelo de contenido
completamente abierto y sin estructura debe evitarse a toda costa
su uso.
Atributos
Los atributos son muy útililes
- para limitar a una lista los
valores de un dato
- para especificar información
adicional acerca de un elemento
| <!ATTLIST
nombreElemento nombreAtributo tipoAtributo valorPredeterminado> |
- nombreElemento
- debe ser único en el contexto de la DTD
- nombreAtributo
- puede estar repetido en
una DTD si está contenido en diferentes elementos
- tipoAtributo
- hay de tres tipos
- atributos de cadena CDATA
- indica que un atributo contiene una cadena sencilla de texto que
puede ser analizada sintácticamente
| <!ATTLIST nomElem nomAtrib CDATA valorPredeterminado> |
- atributos enumerados
y especificación de información adicional
- se componen de atributos cuyos valores están limitados a una lista
de cadenas de texto predefinidas
| <!ATTLIST
precio moneda (dolares | euros | libras) #REQUIRED > |
- el precio sólo se puede mostrar en los tres tipos de moneda indicado por el atributo moneda. En este caso o bien dolares, euros o libras
- si un parser detectara cualquier otro tipo de moneda, indicará que el documento no está bien validado
- atributos con símbolo
- son procesados
como símbolos por los analizadores XML. Es decir el analizador
- convierte
todos los espacios en blanco contiguos en un solo carácter
de espacio y también elimina todos los espacios en
blanco iniciales y finales. A este proceso se le conoce como normalización del valor
del atributo
- valida
el valor en base al tipo de atributo que se declare
- ENTITY
- NMTOKEN
- valorPredeterminado
- Hay cuatro tipos
- #REQUIRED
- el atributo es obligatorio
| <!ATTLIST
precio moneda (dolares | euros | libras) #REQUIRED> |
- #IMPLIED
- el atributo es opcional
| <!ATTLIST
pelicula año CDATA #IMPLIED> |
- por defecto
- si se opta
por no definir el atributo, se presupondrá el valor predeterminado
de "euros"
| <!ATTLIST
precio moneda(dolares | euros | libras) "euros"> |
- #FIXED
- se utiliza
cuando el atributo sólo permite un valor. De esta forma
el analizador suministra ese valor en caso de su ausencia
| <!ATTLIST
Document version CDATA #FIXED "1.0"> |
Entidades paramétricas internas 
Las entidades paramétricas internas
- se utilizan para ayudar a modularizar
la estructura de una DTD almacenando componentes de declaración que
se utilizan en más de una ocasión
- sólo se usan dentro de una DTD
- deben ser declaradas antes de
ser llamadas
- para cumplir este requisito es aconsejable colocarlas al principio
de la DTD
- se definen con la siguiente sintaxis
| <!ENTITY
% nombreEntidad definiciónEntidad> |
| <!ENTITY % dimensiones "ancho, fondo, alto"> |
- y se las referencia de la siguiente forma
<!ELEMENT mesa (%dimensiones;)>
<!ELEMENT silla (%dimensiones;)>
<!ELEMENT sofa (%dimensiones;)> |
Entidades paramétricas externas
Las entidades paramétricas externas
- se utilizan para declarar una
parte completa de una DTD en otro fichero, para así poder reutilizarla
desde cualquier punto de la DTD principal
- sólo es llamada desde
una DTD
- deben ser declaradas antes de
ser llamadas
- para cumplir este requisito es aconsejable colocarlas al principio
de la DTD.
- se definen con la siguiente sintaxis
| <!ENTITY % nombreEntidad SYSTEM URI> |
| <!ENTITY % precio SYSTEM "precio.ent"> |
- se las referencia de la siguiente
forma:
- y se implementan en un fichero como precio.ent
| <!ATTLIST precio moneda (dolares | euros | libras) "euros"> |
Comentarios
| <!-- Esto es un comentario --> |
La especificación de HTML
Ante cualquier duda sobre si un atributo o un elemento son válidos en la version 4.01 de HTML, podemos ir al siguiente vínculo HTML 4.0.1 donde encontraremos la especificación de HTML traducida al español. Esta especificación muestra cada una de las etiquetas en formato DTD con ejemplos y explicaciones.
En esta misma documentación también podemos encontrar una introducción a la sintaxis DTD y como ésta se aplica a HTML en el vínculo HTML 4.0.1/DTD
Infosintesis Solutions Group, S.L.
Formación, asesoramiento y desarrollo de proyectos informáticos