2. DTD (Document Type Definition)
Contenidos Validación y definición de documentos DTD: Document Type Definition Declaraciones de tipo Elemento Modelos de contenido Declaraciones de lista de Atributos Tipos de Atributos Declaración de Entidades
Document Type Definition (DTD) Es como definir nuestro propio lenguaje de marcado para una aplicación específica Define los tipos de elementos, atributos y entidades permitidas, y puede expresar algunas limitaciones para combinarlos Puede residir en un fichero externo y ser compartido por varios documentos XML. O bien puede estar contenido en el propio documento XML, como parte de su declaración de su prólogo. El documento XML que se ajusta a su DTD, se denomina valido bien-formado
Ejemplos de DTD <!DOCTYPE etiqueta [ <!ELEMENT etiqueta (nombre, calle, ciudad, pais, codigo)> <!ELEMENT nombre (#PCDATA)> <!ELEMENT calle (#PCDATA)> <!ELEMENT ciudad (#PCDATA)> <!ELEMENT pais (#PCDATA)> <!ELEMENT codigo (#PCDATA)> ]> <etiqueta> <nombre>topacio Jade</nombre> <calle>minas de Moria, 13</calle> <ciudad>azanulbizar</ciudad> <pais>khuzdul</pais> <codigo>78125</codigo> </etiqueta> <!DOCTYPE coche SYSTEM http://www.tecnun.es/coche.dtd > <coche> <modelo>...</modelo>... </coche>
Declaraciones de tipo Elemento Documento XML válido de acuerdo al DTD anterior <receta> Deben empezar con <!ELEMENT <titulo>arroz cocido</titulo> <ingredientes>arroz</ingredientes> seguidas por el identificador genérico del <procedimiento>cocer elemento Documento XML que no se el válido declara arroz</procedimiento> </receta> <receta> A continuación tienen una especificación del <titulo>arroz contenido cocido</titulo> <ingredientes>arroz</ingredientes> Ejemplo: <parrafo>la siguiente receta me la pasó Alvaro</parrafo> <procedimiento>cocer el arroz</procedimiento> </receta> <!ELEMENT receta (titulo, ingredientes, procedimiento)>
Especificación de contenido EMPTY: No tiene contenido. <!ELEMENT linea-horizontal EMPTY> ANY: Puede tener cualquier contenido. Es mejor no usarla y estructurar adecuadamente los documentos <!ELEMENT batiburrillo ANY> Mixed: Puede tener caracteres o una mezcla de caracteres y sub-elementos especificados <!ELEMENT enfasis (#PCDATA)> <!ELEMENT parrafo (#PCDATA enfasis)*> Element: Sólo puede contener sub-elementos especificados <!ELEMENT mensaje (remite, texto)>
Modelos de contenido <!ELEMENT aviso (parrafo)> <aviso> sólo puede contener un <parrafo> <!ELEMENT aviso (titulo, parrafo)> <aviso> debe contener un elemento <titulo> seguido de un elemento <parrafo> <!ELEMENT aviso (parrafo grafico)> La barra vertical indica opción. El número de opciones no está limitado y se pueden agrupar usando paréntesis <!ELEMENT aviso (titulo, (parrafo grafico))> <aviso> debe contener un <titulo> seguido de un <parrafo> o un <grafico>
Modelos de contenido Indicador de frecuencia Siguen directamente a un identificador general, una secuencia o una opción No pueden ir precedidos por espacios en blanco Indicador Frecuencia? Opcional (0 ó 1 vez) * Opcional y repetible (0 ó más veces) + Necesario y repetible (1 ó más veces) <!ELEMENT aviso (titulo?, (parrafo+, grafico)*)>
Declaración de lista de Atributos Atributos <!ELEMENT mensaje (de, a, texto)> <!ATTLIST mensaje prioridad (normal urgente) normal> <!ELEMENT texto (#PCDATA)> <!ATTLIST texto idioma CDATA #REQUIRED> Añaden información adicional a los elementos Sólo se pueden especificar una vez y en cualquier orden No pueden contener sub-atributos Declaración <mensaje prioridad= urgente > <de>topacio Jade</de> <a>esmeralda Turquesa</a> <texto idioma= español > Hay que preparar los informes de junio </texto> </mensaje> Empiezan con <!ATTLIST Identificador del elemento al que se aplica Nombre del atributo Tipo Valor por defecto
Declaración de lista de Atributos #REQUIRED: Es obligatorio especificar el atributo. No tiene valor por defecto. #IMPLIED: Se puede omitir el atributo, sin que se adopte automáticamente un valor por defecto <!ATTLIST IMG URL CDATA #REQUIRED ALT CDATA #IMPLIED>
Tipos de Atributos Atributos CDATA (character data): Pueden contener casi cualquier cosa <!ATTLIST mensaje fecha CDATA #REQUIRED> < mensaje fecha= 21 de Mayo de 2003 > Atributos enumerados: Sólo pueden contener un valor de entre un número reducido de opciones <!ATTLIST mensaje prioridad (normal urgente) normal>
Tipos de Atributos Atributos ID e IDREF El tipo ID permite que un atributo determinado tenga un nombre único que podrá ser referenciado por un atributo de otro elemento que sea de tipo IDREF Permite implementar un sistema de hipervínculos en un documento XML <!ELEMENT enlace EMPTY> <!ATTLIST enlace destino IDREF #REQUIRED> <!ELEMENT capitulo (parrafo)*> <!ATTLIST capitulo referencia ID #IMPLIED>
Declaración de Entidades Las Entidades se utilizan para hacer referencia a objetos (ficheros, páginas Web, imágenes,...) que no deben ser analizados sintácticamente según las reglas de XML Se declaran mediante <!ENTITY Puede usarse para declarar una abreviatura que se utiliza como una forma más corta de algunos textos En otras ocasiones es una referencias a un objeto externo o local
Tipos de Entidades Las entidades pueden ser: Internas Externas Analizadas o No analizadas Generales o Parámetro Entidades generales internas: <!DOCTYPE texto[ <!ENTITY ovni Objeto Volador No Identificado > ]> <texto> <titulo> Durmiendo en clase, Topacio soñó con un &ovni; </titulo> </texto> Son básicamente abreviaturas definidas en la sección del DTD del documento XML Son siempre entidades analizadas
Tipos de Entidades Entidades generales externas analizadas <!ENTITY intro SYSTEM http://www.tecnun.es/intro.xml > Entidades no analizadas <!ENTITY logo SYSTEM http://www.tecnun.es/logo.gif > Entidades parámetro Internas <!DOCTYPE texto[ <!ENTITY % elemento-alf!element ALF (#PCDATA)> > %elemento-alf; ]> Entidades parámetro Externas <!DOCTYPE texto[ <!ENTITY % elemento-alf SYSTEM alf.ent >... %elemento-alf; ]>
Ejemplo de DTD <?xml encoding= UTF-7?> <!ELEMENT lista (persona)+> <!ELEMENT persona (nombre, email*, relacion?)> <!ATTLIST persona id ID #REQUIRED> <!ATTLIST <?xml version= 1.0?> persona sexo (hombre mujer) #IMPLIED> <!ELEMENT nombre (#PCDATA)> <!DOCTYPE lista SYSTEM Lista.dtd > <!ELEMENT email (#PCDATA)> <lista> <!ELEMENT relacion EMPTY> <persona sexo= hombre id= Topacio > <!ATTLIST relacion amigo-de IDREFS #IMPLIED <nombre>topacio Jade</nombre> enemigo-de IDREFS #IMPLIED> <email>topacio.jade@mail.com</email> <relacion amigo-de= esmeralda > </persona> <persona sexo= mujer id= esmeralda > <nombre>esmeralda Turquesa</nombre> <email>eturquesa@gmail.com</email> </persona> </lista>