dtds

40
DTD Definición de Tipos de Documentos

Upload: aurora-gomez

Post on 29-Mar-2016

216 views

Category:

Documents


1 download

DESCRIPTION

Presentación para los alumnos de 1º del ciclo: DESARROLLO DE APLICACIONES MULTIPLATAFORMA, dentro del módulo: LENGUAJE DE MARCAS Y SISTEMAS DE GESTIÓN DE INFORMACIÓN del IES Julián Marías de Valladolid. Creado por: Mª Aurora Gómez López

TRANSCRIPT

Page 1: DTDs

DTD Definición de Tipos de Documentos

Page 2: DTDs

Se pueden escribir directamente documentos XML sin realizar una DTD previa. Este modo de trabajo

debe emplearse de forma restringida. Consecuencias:

1. Se pierde la posibilidad de crear un lenguaje de etiquetado específico para un determinado

campo.

2. No se pueden validar automáticamente los documentos escritos en dicho lenguaje.

Si existe un DTD el parser podrá comprobar no sólo que el documento está bien formado, sino que

los documentos siguen las reglas del lenguaje creado y son válidos.

Page 3: DTDs

Profesionalmente, antes de elaborar cualquier documento es imprescindible la especificación del DTD

que defina el lenguaje de etiquetado.

En grandes empresas un grupo de personas con conocimientos avanzados crearían los DTD y otro

grupo de personas se dedicarían a elaborar documentos válidos para ese DTD que tienen que ser

capaces de saber interpretar.

El DTD contiene un conjunto de declaraciones de etiquetado que definen la gramática del

nuevo lenguaje.

Page 4: DTDs

Declaración del DTD

Forma parte del prólogo del documento, aparece después de la declaración XML (si existe).

1. Puede incluir directamente declaraciones de etiquetado (subconjunto interno) y/o hacer referencia a entidades externas (normalmente un archivo) que contienen declaraciones de etiquetado (subconjunto externo).

2. Debe especificar cuál es el elemento raíz del documento.

Sintaxis:

<! DOCTYPE elemento_raiz referencia_externa [ declaraciones internas aquí]>

Page 5: DTDs

Si sólo hay declaraciones internas, el documento es autónomo.

Uno de los objetivos de XML es la creación de distintos lenguajes estándar de etiquetado para distintos campos de aplicación. Podemos hacer uso de declaraciones estándar ya publicadas haciendo referencia a ellas.

Page 6: DTDs

Existen dos tipos de referencias externas:

1. DTD no publicados, se especifica la palabra SYSTEM y despues la URL donde está el DTD.

<! DOCTYPE elemento_raiz SYSTEM “archivo_declaraciones.dtd”>

2. DTD publicado, se utiliza la palabra PUBLIC seguida por el identificador público asociado a ese

DTD estándar y la URL donde se encuentra (será usada sólo si no se puede localizar el DTD

usando el identificador público)

<! DOCTYPE elemento_raiz PUBLIC “-//OASIS//DTD DocBook XML V4.2//EN”

“http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd”>

Si un DTD tiene declaraciones internas y externas, las primeras tienen más prioridad que las segundas. Lo que permite adaptar DTD externos mediante declaraciones propias.

Page 7: DTDs

Declaración de tipos de elementos

En el DTD hay que incluir la declaración de los distintos tipos de elementos que forman parte del documento.

La declaración de un tipo de elemento debe indicar el nombre del elemento (válido según reglas vistas, conteniendo letras, dígitos, puntos, guiones y subrayados pero no espacios en blanco) y su contenido.

Una declaración por elemento.

Sintaxis:

<!ELEMENT nombre tipo_contenido>

Page 8: DTDs

Elementos vacíos

Se declaran especificando la palabra EMPTY.

<!ELEMENT nombre EMPTY>

Page 9: DTDs

Elementos que contienen sólo datos

En la declaración se especifica #PCDATA.

<!ELEMENT nombre (#PCDATA)>

Page 10: DTDs

Elementos que sólo contienen elementos

XML define una pequeña gramática de expresiones regulares, que permite especificar qué elementos

hijos puede contener un elemento y en qué orden pueden aparecer. Aparecen dos tipos de relaciones

entre elementos hijos:

1. Secuencia: el elemento contiene una secuencia de los elementos hijos especificados (indica

orden).

La declaración especifica la lista de los elementos hijos separados por comas.

<!ELEMENT nombre_elemento (elemento_hijo1, elemento_hijo2, ..., elemento_hijoN)>

Page 11: DTDs

2. Alternativa: El elemento contiene uno y sólo uno de los elementos especificados.

<!ELEMENT nombre_elemento (elemento_hijo1 | elemento_hijo2 | ..., elemento_hijoN)>

Page 12: DTDs

Podemos indicar cuántas veces aparece cada hijo, una secuencia de hijos o una relación alternativa

(estos dos últimos casos empleando paréntesis para agrupar)

*

Repetición cero o un número ilimitado de veces.

<!ELEMENT nombre_elemento (elemento_hijo1, elemento_hijo2*, ..., elemento_hijoN)>

?

Opcionalidad. El elemento o grupo afectado puede aparecer (una sola vez) o no aparecer

<!ELEMENT nombre_elemento (elemento_hijo1, elemento_hijo2?, ..., elemento_hijoN)>

Page 13: DTDs

+

Repetición una o un número ilimitado de veces.

<!ELEMENT nombre_elemento (elemento_hijo1+, elemento_hijo2, ..., elemento_hijoN)>

Estos “operadores” se pueden combinar para crear definiciones bastante complejas.

Page 14: DTDs

Elementos con contenido mixto (elementos y datos)

Limitaciones del modelo:

● Permite un control limitado sobre la disposición de los elementos hijos y cómo se entremezclan con los datos.

● Sólo se puede especificar qué elementos hijos aparecerán sin establecer su frecuencia de repetición o si forman parte de una secuencia o lista alternativa.

<!ELEMENT elemento (#PCDATA | a | b | c)*>

Esta declaración indica que “elemento” tendrá un contenido mixto donde podrá aparecer cualquiera de los elementos un número ilimitado de veces mezclados con texto.

Page 15: DTDs

<!ELEMENT elemento (#PCDATA | a | b | c)*>

Se trata de un formato rígido de declaración:

● En primer lugar debe aparecer #PCDATA

● Debe especificarse una lista alternativa

● No se pueden aplicar caracteres de repetición a los elementos hijos

● Debe aplicarse obligatoriamente el carácter * al grupo de elementos

Page 16: DTDs

Declaración de tipos de atributos

Los atributos deben declararse en el DTD

Una única declaración para definir una lista de atributos asociados a un elemento

<!ATTLIST elemento atrib1 tipo1 defecto1 atrib2 tipo2 defecto2 ...>

Puede haber múltiples definiciones de listas de atributos para un mismo elemento o pueden aparecer todos en la misma declaración

Page 17: DTDs

Tipos de atributos: CDATA, NMTOKEN, NMTOKENS

CDATAIndica que se trata de una cadena de caracteres.Puede incluir cualquier carácter, a excepción de los especiales, incluidos espacios.

NMTOKENLimita el tipo de caracteres que pueden aparecer como valor de un atributo a los caracteres que pueden usarse en el nombre de un elemento o atributo (letras, dígitos, puntos, guiones y subrayados, nunca espacios en blanco)

NMTOKENSEl valor del atributo puede ser una lista de cadenas de tipo NMTOKEN.

Page 18: DTDs

Tipos de atributos: enumerados

Indican que el valor de un atributo está restringido a un conjunto de valores.

Se usa el carácter | para separar los valores posibles

<!ATTLIST elemento atrib (valor1 | valor2 | valor3 | … ) >

Page 19: DTDs

Tipos de atributos: ID, IDREF, IDREFS

Los elementos, a veces, tienen asociado un atributo que los identifica de forma unívoca (dni para una persona, dirección MAC de una máquina, código de una norma ISO, …)

En un documento no puede haber dos atributos de tipo ID que almacenen el mismo valor, aunque pertenezcan a elementos distintos. El parse nos daría error.

Un atributo ID sólo puede almacenar un valor que sea un nombre XML válido (no puede empezar por un carácter numérico).

La existencia de un identificador asociado a un elemento permite que otros elementos dentro del documento puedan hacer referencia a él.

El parser XML se encarga de asegurar que toda referencia que aparece en el documento se corresponda con un identificador existente en el mismo.

Page 20: DTDs

Valores por defecto para los atributos

Información que aparece en la declaración de un atributo detrás del nombre y el tipo.

Especifica cómo debe comportarse el parser ante la presencia o ausencia de este atributo en un elemento del documento.

Posibilidades:

● #REQUIRED Atributo obligatorio Todo elemento que aparezca en el documento debe incluir este atributo

● #IMPLIED

Opcional. Valor por defecto en un atributo. Puede no aparecer.

Page 21: DTDs

● Valor por defecto Si en el documento aparece el atributo asociado al elemento, el parser le pasará a la aplicación el valor especificado. En caso de no aparecer, se le proporcionará el valor por defecto especificado en la declaración.

● #FIXEDEl atributo tendrá un valor fijo especificado en la declaración. Si aparece el valor en el documento deberá tener ese valor o se producirá un error. Si no aparece, el parser proporcionará a la aplicación ese valor fijo.

Page 22: DTDs

Entidades

En términos generales, una entidad permite dar un nombre (nombre XML válido) a un texto y usarlo en su lugar.

Las entidades pueden mejorar la modularidad y legibilidad tanto de un DTD como de un documento.

Declaración de entidades en un DTD:

<!ENTITY declaración_de_identidad >

Page 23: DTDs

Las entidades se clasifican en función de dos criterios:

● La información que contienen

○ Entidades generales

○ Entidades parámetro

● Dónde está localizada la información contenida

○ Entidades internas (se encuentran en el propio documento)

○ Entidades externas (fuera del documento)

Page 24: DTDs

Entidades generales

Permite dar un nombre a un fragmento de documento XML.

Se define dentro del DTD (como todas las entidades) pero se usa dentro del propio documento.

Entidades de este tipo son las ya conocidas entidades predefinidas (&lt; &gt; &amp;...)

Dependiendo de la localización de la información tenemos:

● Entidades generales internas

● Entidades generales externas

Page 25: DTDs

Entidades generales internas

La declaración de la entidad contiene el fragmento del documento.

<?xml version=”1.0”?><!DOCTYPE elemento_raiz [...<!ENTITY nombre_entidad “fragmento_de_documento”>...]><elemento_raiz>… &nombre_entidad;…</elemento_raiz>

Page 26: DTDs

Entidades generales externas

La declaración de la entidad realiza una referencia externa a un documento que contiene un

fragmento XML.

Se usa la misma sintaxis que en la declaración del subconjunto externo, distinguiéndose referencias

de tipo PUBLIC y SYSTEM).<?xml version=”1.0”?><!DOCTYPE elemento_raiz [...<!ENTITY nombre_entidad tipo_referencia “fichero_con_fragmento”>...]><elemento_raiz>… &nombre_entidad;…</elemento_raiz>

Page 27: DTDs

Entidades parámetro

Una entidad parámetro permite dar un nombre a una información que se corresponde con un conjunto de declaraciones de una DTD. Una vez definida se puede referenciar desde cualquier parte de la DTD.

Funcionan cuando la definición de las reglas del DTD se realiza en un archivo externo.

Para hacer referencia a una entidad parámetro previamente definida:

%nombre_entidad;

Dependiendo de la localización de la información, tenemos:

● Entidades parámetro internas

● Entidades parámetro externas

Page 28: DTDs

Entidades parámetro internas

Las declaraciones DTD que se asocian con la entidad aparecen directamente en la propia declaración

de la entidad .

….<!ENTITY % nombre_entidad “declaración/es DTD” >….%nombre_entidad;.…

Page 29: DTDs

Entidades parámetro externas

En la declaración de la entidad se hace una referencia externa usando la misma sintaxis que en la

definición de subconjunto externo del DTD.

…..

<!ENTITY % nombre_entidad tipo_referencia “fichero_con_declaraciones” >…..%declaraciones;…..

Page 30: DTDs

Entidades generales externas no procesables

Existen otro tipo de entidades externas generales que contienen información que no es de tipo XML y

que no será procesada por el parser (generalmente imágenes).

Su inclusión en un documento requiere varios pasos:

1. Declaración de una notación

2. Definición de una entidad general no procesable

3. Definición de un atributo de tipo ENTITY (y otro de tipo NOTATION) en el elemento al que se

pretende vincular el archivo de datos.

Page 31: DTDs

Entidades generales externas no procesables

1. Declaración de una notación

<!NOTATION nombre_notacion tipo_referencia “idenfificador externo o formato”

Una notación permite asociar un nombre con la identificación de una aplicación capaz de

procesar un determinado formato de datos (no de tipo XML)

También sirve para especificar un formato de datos que no sea XML (image/gif, image/jpg,

image/png...)

Al ser una referencia externa podemos usar PUBLIC o SYSTEM

Page 32: DTDs

Ejemplos:

<!NOTATION GIF89a PUBLIC “-//Compuserve//NOTATION Graphic Interchange Format

89a//EN”>

<!NOTATION GIF SYSTEM “image/gif”>

Page 33: DTDs

Entidades generales externas no procesables

2. Definición de una entidad general (no procesable)

<!ENTITY nombre tipo_referencia “fichero_con_datos” NDATA nombre_notacion >

Asociamos una entidad externa no procesable a la notación

Incluirmos una referencia externa al archivo que contiene los datos (generalmente una imagen).

Page 34: DTDs

Ejemplos:

<!NOTATION GIF89a PUBLIC “-//Compuserve//NOTATION Graphic Interchange Format

89a//EN”>

<!ENTITY logo SYSTEM “logotipo.gif” NDATA GIF89a>

--------

<!NOTATION GIF SYSTEM “image/gif”>

<!ENTITY imagen SYSTEM “Imagen123.gif” NDATA GIF>

Page 35: DTDs

Entidades generales externas no procesables

3. Definición de un atributo de tipo ENTITY ( y otro de tipo NOTATION ) en el elemento al que

se pretende vincular el archivo de datos

<!ATTLIST elemento atributoImagen ENTITY defecto1

atributoImagenFormato NOTATION defecto2 >

……..

<elemento atributoImagen=”nombre_entidad”>

Page 36: DTDs

Secciones condicionales

● Permiten incluir o excluir reglas en un DTD en función de condiciones.

● Sólo se pueden utilizar en DTDs externos.

● Su uso tiene sentido al combinarlas con referencias a entidades parámetro.

● Existen dos tipos:

○ IGNORE

○ INCLUDE

Page 37: DTDs

○ IGNORE

<! [IGNORE[

declaraciones DTD

]]>

○ INCLUDE

<! [INCLUDE[

declaraciones DTD

]]>

Page 38: DTDs

Limitaciones de los DTD

● Un DTD no es un documento XML, no se puede verificar si está bien formado.

● No se pueden establecer restricciones sobre los valores de elementos y atributos (tipo de datos,

tamaño, …)

● No soporta espacios de nombres (Namespaces)

● Sólo se pueden enumerar los valores de atributos, no de elementos.

● Sólo se puede dar un valor por defecto a atributos, no a elementos.

● Existe un control limitado sobre las cardinalidades de los elementos, no se puede concretar el

número de veces que pueden aparecer.

Page 39: DTDs

Supongamos la siguiente situación:

<?xml version=”1.0”?><!ENTITY empleado SYSTEM “empleado.dtd”><!ENTITY libro SYSTEM “libro.dtd”>%empleado;%libro;

Todos los elementos y atributos pasan a formar un único espacio de nombres global.

Si en ambas entidades externas se ha declarado un atributo con igual nombre y distintos proposito. Al

procesar las referencias a estas entidades se producirá un error (se ha declarado dos veces el mismo

elemento).

Solución: estándar Namespaces Permite la existencia de distintos espacios de nombres de

manera que elementos y atributos definidos en distintos módulos no entren en conflicto.

Page 40: DTDs

Herramientas de generación automática de DTDs

● Infieren a partir de un documento XML el DTD genérico que lo valide.

● Muchas restricciones (reglas de negocio ) es necesario añadirlas manualmente.