Tema IV. XML III. Document Type Definitions Desarrollo de Aplicaciones para Internet Curso 12 13
Índice 1.Introducción 2.Documentos XML con DTDs 3.Declaraciones i. ELEMENT ii. ATTLIST iii.entity 4.Limitaciones 5.Referencias
Índice 1.Introducción 2.Documentos XML con DTDs 3.Declaraciones i. ELEMENT ii. ATTLIST iii.entity 4.Limitaciones 5.Referencias
Introducción Las DTDs permiten definir tipos de documentos Si un documento cumple las definiciones de una DTD se dice que es válido para dicha DTD Una DTD permite definir: Un vocabulario (etiquetas) Los atributos asociados a cada etiqueta La estructura de un documento (la jerarquía de los elementos)
Índice 1.Introducción 2.Documentos XML con DTDs 3.Declaraciones i. ELEMENT ii. ATTLIST iii.entity 4.Limitaciones 5.Referencias
Documentos XML con DTDs Un DTD puede asociarse a un documento XML de dos formas Embebiéndolo en el propio documento En un documento externo Mediante identificadores de sistema Mediante identificadores públicos En todos los casos se emplea el comando DOCTYPE Estructura base: <!DOCTYPE persona [ ]>
DTDs Embebidos Deben ir al comienzo del documento, justo después de la declaración XML si existe Ejemplo <?xml version= 1.0?> <!DOCTYPE persona [ ]> <!ELEMENT persona (nombre, apellidos) <!ELEMENT nombre (#PCDATA)> <!ELEMENT apellidos (#PCDATA)> <persona> <nombre>pepe</nombre> <apellidos>garcía Pérez</apellidos> </persona>
DTDs de Sistema Un identificador de sistema permite definir el fichero externo que contiene el DTD El DOCTYPE debe incluir la palabra reservada SYSTEM seguida de la URI de la DTD Ejemplos: <!DOCTYPE persona SYSTEM persona.dtd > <!DOCTYPE persona SYSTEM persona.dtd [...]> <!DOCTYPE persona SYSTEM file:///c:/persona.dtd > <!DOCTYPE persona SYSTEM http://www.esei.uvigo.es/persona.dtd >
DTDs de Públicos Un identificador de sistema permite definir la entrada de un catálogo que contiene el DTD El DOCTYPE debe incluir la palabra reservada PUBLIC seguida de un identificador público especializado de la DTD en el catálogo El identificador suele seguir el formato Formal Public Identifiers (FPI): -//Propietario//Clase Descripción//Lenguaje//Version El identificador puede ir seguido de un identificador de sistema que se usará en caso de que falle el identificador público Ejemplos: <!DOCTYPE persona PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN > <!DOCTYPE persona PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN xhtml.dtd > <!DOCTYPE persona PUBLIC -//W3C//DTD XHTML 1.0 Strict//EN xhtml.dtd [ <!ELEMENT adicional (#PCDATA) ]>
Índice 1.Introducción 2.Documentos XML con DTDs 3.Declaraciones i. ELEMENT ii. ATTLIST iii.entity 4.Limitaciones 5.Referencias
Declaraciones Un DTD puede contener tres tipos de declaraciones: Elementos (ELEMENT) Atributos (ATTLIST) Entidades (ENTITY)
Índice 1.Introducción 2.Documentos XML con DTDs 3.Declaraciones i. ELEMENT ii. ATTLIST iii.entity 4.Limitaciones 5.Referencias
ELEMENT Define los elementos válidos y su contenido La declaración tiene tres partes Palabra reservada ELEMENT Nombre del elemento (etiqueta del elemento) Contenido del elemento Ejemplo: <!ELEMENT persona (nombre, apellidos)>
ELEMENT Contenido del elemento Define los elementos que puede contener Elementos: Se indica su nombre Texto: Se emplea la palabra reservada #PCDATA Los elementos pueden tener una cardinalidad asociada Tipo de contenido Secuencias Opciones Combinación de secuencias y opciones Vacío Cualquiera
ELEMENT Contenido del elemento: Cardinalidad Ninguna: El elemento debe aparecer una única vez?: El elemento debe aparecer cero o una veces +: El elemento debe aparecer una o más veces *: El elemento debe aparecer cero o más veces Ejemplo <!ELEMENT receta (nombre, tiempo?, ingrediente+, instrucción*)> Una receta debe tener un <nombre>, el <tiempo> de elaboración puede aparecer o no, debe tener uno o más <ingrediente> y puede no tener ninguna <instrucción> o tener una o más
ELEMENT Tipo de contenido: Secuencias Los elementos internos se indican en el mismo orden en el que tienen que aparecer en el documento Los elementos se separan con una coma, Ejemplo <!ELEMENT contacto (nombre, apellidos, teléfono, dirección)> En este caso <contacto> debe contener los elementos <nombre>, <apellidos>, <teléfono> y <dirección> en este mismo orden
ELEMENT Tipo de contenido: Opciones Un único elemento indicado debe aparecer como hijo del elemento en el documento Los elementos se separan con una barra vertical Ejemplo <!ELEMENT ubicación (dirección GPS #PCDATA)> En este caso <ubicación> debe contener el elementos <dirección>, el elemento <GPS> o texto libre. Solo uno de ellos
ELEMENT Tipo de contenido: Combinación de secuencias y opciones Las secuencias y opciones pueden combinarse, empleando paréntesis () para agrupar elementos Ejemplo <!ELEMENT ubicación (dirección (latitud, longitud))> En este caso ubicación debe tener un hijo <dirección> o los hijos <latitud> y <longitud> en este mismo orden
ELEMENT Tipo de contenido: Vacío Si el elemento no puede tener ningún contenido se indica con la palabra EMPTY Ejemplo <!ELEMENT br EMPTY> Tipo de contenido: Cualquiera Si el elemento puede tener cualquier contenido se indica con la palabra reservada ANY Ejemplo <!ELEMENT descripción ANY>
Índice 1.Introducción 2.Documentos XML con DTDs 3.Declaraciones i. ELEMENT ii.attlist iii.entity 4.Limitaciones 5.Referencias
ATTLIST Define los atributos válidos de un elemento La declaración tiene tres partes Palabra reservada ATTLIST Nombre del elemento (etiqueta del elemento) Lista de atributos. Cada atributo está formado por Nombre del atributo Tipo del atributo Declaración del valor Ejemplo: <!ATTLIST noticia fuente CDATA #IMPLIED>
ATTLIST Tipos de atributo CDATA: Texto (Character DATA) ID: El valor debe ser único IDREF: El valor debe ser una referencia a un ID IDREFS: El valor debe ser una lista de referencias a ID separadas por espacios en blanco Lista enumerada: Lista de valores posibles del atributo. Entre paréntesis y separada por una barra vertical. Ejemplo: (Casa Trabajo Móvil) ENTITY: El valor debe ser el nombre de una entidad ENTITIES: El valor debe ser una lista de nombres de entidad separadas por espacios en blanco Otros: NMTOKEN, NMTOKENS
ATTLIST Valor del atributo Por defecto: Si no se asigna un valor se asigna el especificado <!ATTLIST teléfono tipo (Casa Trabajo Móvil) Casa > Fijo: El valor del atributo no se puede modificar <!ATTLIST programa versión CDATA #FIXED 1.0 > Obligatorio: Es obligatorio que el atributo tenga valor <!ATTLIST teléfono tipo (Casa Trabajo Móvil) #REQUIRED> Implícito: No es obligatorio que el atributo tenga valor <!ATTLIST contacto edad CDATA #IMPLIED>
ATTLIST Atributos múltiples Pueden definirse en una única etiqueta o en varias Ejemplo <!ATTLIST programa autor CDATA #IMPLIED versión CDATA #FIXED 1.0 > Es equivalente a <!ATTLIST programa autor CDATA #IMPLIED <!ATTLIST programa versión CDATA #FIXED 1.0 >
Índice 1.Introducción 2.Documentos XML con DTDs 3.Declaraciones i. ELEMENT ii. ATTLIST iii.entity 4.Limitaciones 5.Referencias
ENTITY Una entidad es un elemento que forma parte del XML Por ejemplo, & es una entidad, pero el elemento raíz también lo es (se denomina entidad documento) Existen cuatro tipos primarios de entidad Entidades incorporadas (built-in) Entidades carácter Entidades generales Entidades parámetro
ENTITY Entidades incorporadas (built-in) No necesitan ser incorporadas en el documento, puesto que son reconocidas por todos los parsers Son cinco entidades & Carácter & < Carácter < > Carácter > ' Carácter ' " Carácter Pueden ser usadas directamente por su nombre en cualquier bloque de texto (contenido de atributos y elementos)
ENTITY Entidades carácter Permiten incluir cualquier carácter usando su valor decimal o hexadecimal en Unicode* Siguen las mismas reglas que las entidades incorporadas Formatos (0 representa un dígito) Decimal: � Hexadecimal: � * Se puede encontrar la lista completa en http://www.unicode.org/charts/
ENTITY Entidades generales Permiten crear secciones reutilizables de texto de sustitución (pueden verse como constantes de texto) Los parsers sustituyen las referencias a estas entidades por el valor (texto) asociado La declaración tiene tres partes Palabra reservada ENTITY Nombre de la entidad Texto de reemplazo: Valor de la entidad entre comillas. Si es XML debe estar bien formado, aunque admite varias raíces Ejemplos <!ENTITY obra Sam & Twitch > <!ENTITY modos-silencio <silencio/><vibrar/> >
ENTITY Entidades generales (continuación) El texto de reemplazo puede almacenarse en ficheros externos usando declaraciones de entidad externas Siguen el mismo formato que DOCTYPE <!ENTITY cv SYSTEM currículum.txt > <!ENTITY cv PUBLIC -//Ana//CV//ES cv.txt > Referencia a entidades generales Se usa el nombre de la entidad entre & y ; Ejemplo: <currículum>&cv;</currículum>
ENTITY Entidades parámetro Permiten crear secciones reutilizables de texto de sustitución para su uso exclusivo en la propia DTD (no pueden usarse en el XML) Siguen las mismas reglas que las entidades generales, con dos diferencias La declaración incluye un % antes del nombre Las referencias comienzan con % en lugar de & Ejemplo Declaración: <!ENTITY % TipoTlfPorDefecto Casa > Referencia: <!ATTLIST teléfono tipo (Casa Trabajo Móvil) %TipoTlfPorDefecto; >
Índice 1.Introducción 2.Documentos XML con DTDs 3.Declaraciones i. ELEMENT ii. ATTLIST iii.entity 4.Limitaciones 5.Referencias
Limitaciones de las DTDs Sintaxis La sintaxis de las DTDs es una adaptación de la propia sintaxis de DTDs de SGML La sintaxis del propio XML es mucho más potente Namespaces El prefijo y los dos puntos deben incluirse en cada declaración de elemento o atributo Los prefijos deben estar preestablecidos Tipos de datos El soporte de tipos de datos es muy limitado y solo aplicable a atributos Descripción de modelos de datos Las características de los modelos de datos que se pueden definir son muy limitadas Por ejemplo, no se puede usar cardinalidades numéricas, no existe herencia, etc.
Índice 1.Introducción 2.Documentos XML con DTDs 3.Declaraciones i. ELEMENT ii. ATTLIST iii.entity 4.Limitaciones 5.Referencias
Bibliografía Beginning XML, 4th Edition D. Hunter et al. World Wide Web Consortium (W3C) [http://www.w3.org/ - última visita 31/08/2012]