Title: DTD Definiciones de Tipo de Documento
1DTDDefiniciones de Tipo de Documento
- D. Pedro Ángel Castillo Valdivieso
- Dpto. de Arquitectura y Tecnología de
Computadores - Univ. de Granada
- pedro_at_geneura.ugr.es
2Definiciones de Tipo de Documento
- Los DTD se desarrollaron para ser utilizados con
SGML. - Son un conjunto de reglas sintácticas para
definir etiquetas. - Indica cuáles se pueden usar en un documento,
aparecer dentro de otras, cuáles tienen
atributos, etc. - No siguen la sintaxis XML que conocemos, sino una
propia - lt?xml encondigUTF-8?gt
- lt!ELEMENT listado (elemento)gt
- lt!ELEMENT elemento (PCDATA)gt
- Una alternativa que está teniendo éxito son los
Xschemas. - Un Xschema utiliza la sintaxis XML, tiene la
misma potencia que los DTD pero además puede
definir tipos de datos.
3Definiciones de Tipo de Documento
- SGML utiliza DTD para describir las etiquetas de
un documento. - Los documentos XML podemos utilizarlos con o sin
DTD - Un documento sin DTD define las etiquetas por la
existencia y localización de éstas cuando son
creadas. - lt?xml version1.0?gt
- ltlibrogt
- lttitulogt...lt/titulogt
- lttextogt......lt/textogt
- lt/librogt
- Una aplicación XML necesita que el comienzo y fin
de todas las etiquetas y la presencia de
elementos vacíos sea no ambigua.
libro
titulo
texto
4Definiciones de Tipo de Documento
- Todos los documentos XML deben ser bien formados.
- Si no se usa DTD, el XML debe comenzar con la
declaración de documento único - lt?xml version1.0 standaloneyes?gt
- Todas las etiquetas deben estar balanceadas.
- Todos los valores de los atributos deben ir
entrecomillados. - Un elemento vacío debe terminar con /gt o hacerlo
no vacío - ltimg srcfichero.gif/gt
- ltimg srcfichero.gifgtlt/imggt
- Si no se usa DTD, los atributos de etiquetas
deben ser del tipo CDATA.
5Definiciones de Tipo de Documento
- Los documentos XML válidos tienen un DTD
asociado. - Deben ser documentos bien formados y comenzar con
la declaración de tipo de documento - lt?xml version1.0 encodingUTF-7?gt
- lt!DOCTYPE libro SYSTEM http//www.host.dom/libro.
dtdgt - ltlibrogt
- ....
- lt/librogt
- La definición para ese tipo de documento debe ser
accesible para la aplicación XML - localmente lt!DOCTYPE libro SYSTEM libro.dtdgt
- descargándola de la red
6Definiciones de Tipo de Documento
- La DTD puede estar en fichero externo o en el
mismo XML - lt?xml version1.0 encodingUTF-7?gt
- lt!DOCTYPE etiqueta
- lt!ELEMENT etiqueta (nombre,direccion)gt
- lt!ELEMENT nombre (PCDATA)gt
- lt!ELEMENT direccion (PCDATA)gt
- gt
- ltetiquetagt
- ltnombregtJuliolt/nombregt
- ltdirecciongtJerez de la Fronteralt/direcciongt
- lt/etiquetagt
- La declaración empieza con lt!DOCTYPE raiz y
termina con gt - Las etiquetas (y su contenido) se definen con
lt!ELEMENT
Utilizaremos esta forma ya que son ejemplos
simples
- ejemplo de las tarjetas
- ejemplo de los artículos
- EJERCICIO un DTD
- para describir coches.
7Declaraciones de Tipo de Documento
- Las etiquetas utilizadas deben ajustarse a las
reglas dadas en el DTD para que el XML sea
válido. - Las declaraciones empiezan por lt!ELEMENT seguidas
por el identificador de la etiqueta declarada y
la especificación del contenido - lt!ELEMENT etiqueta (titulo,ingredientes,procedimie
nto)gt - lt!ELEMENT titulo (PCDATA)gt
- ........
- Ejemplo válido Ejemplo no válido
- ltrecetagt ltrecetagt
- lttitulogttitulolt/titulogt lttitulogttitulolt/titulogt
- ltingredientesgtcosaslt/ingredientesgt
ltingredientesgtcosaslt/ingredientesgt - ltprocedimientogtpasoslt/procedimientogt
ltprocedimientogtpasoslt/procedimientogt - lt/recetagt ltadvertenciasgttextolt/advertenciasgt
- lt/recetagt
-
8Declaraciones de Tipo de Documento
- Tipos de contenido
- EMPTY
- Etiquetas que se cierran en la misma apertura. La
información la tienen en forma de atributos - lt!ELEMENT br EMPTYgt
- ltbr/gt
- ANY
- La etiqueta puede tener cualquier contenido
(texto o cualquier elemento) - lt!ELEMENT batiburrillo ANYgt
9Declaraciones de Tipo de Documento
- Tipos de contenido (cont.)
- Mixed
- La etiqueta puede tener texto u otras etiquetas
(según la especificación) - lt!ELEMENT texto (PCDATAparrafo)gt
- Element
- Sólo contendrá aquellas etiquetas especificadas
- lt!ELEMENT mensaje (remite,destinatario,texto)gt
EJERCICIO un DTD y XML para describir email
10Modelos de Contenido
- Son patrones que especifican el orden de
definición de etiquetas. - Sencillo uno que tenga texto o un solo tipo de
elemento - lt!ELEMENT aviso (parrafo)gt
- lt!ELEMENT parrafo (PCDATA)gt
- Secuencia usando la coma , se especifica qué
etiqueta va detrás de otra - lt!ELEMENT aviso (titulo,parrafo)gt
- Opción usando la se dan las etiquetas que
puede contener otra dada (son opciones
excluyentes) - lt!ELEMENT aviso (parrafoimagen)gt
11Modelos de Contenido (cont.)
- Agrupación usando los paréntesis ()
- Frecuencia
- ? Opcional (0 ó 1 vez)
- Opcional (0 ó más veces)
- lt!ELEMENT aviso (titulo?,(parrafo,grafico))gt
- necesario y repetible (1 ó más veces)
EJERCICIO un DTD y XML para describir artículos
12Declaración de Atributos
- Los atributos añaden información adicional a las
etiquetas. - Comienza con lt!ATTLIST, seguido del elemento al
que se aplica, el nombre del atributo, el tipo de
datos y el valor por defecto. - Opcional con valor por defecto debe tomar un
valor dado en la lista de opciones, pero si se
omite, toma el valor por defecto - lt!ELEMENT mensaje (de,a,texto)gt
- lt!ATTLIST mensaje prioridad (normalurgente)
normalgt
13Declaración de Atributos (cont.)
- Obligatorio con REQUIRED , no toma valor por
defecto ya que hay que especificarlo - lt!ELEMENT texto (PCDATA)gt
- lt!ATTLIST texto idioma CDATA REQUIREDgt
- Opcional sin valor por defecto con IMPLIED ,
si no se especifica no toma un valor por defecto - lt!ELEMENT img EMPTYgt
- lt!ATTLIST img url CDATA REQUIRED alt CDATA
IMPLIEDgt
EJERCICIO un DTD y XML para describir mensajes
14Tipos de Atributos
- CDATA puede contener cualquier carácter
- lt!ATTLIST mensaje fecha CDATA REQUIREDgt
- ltmensaje fecha15 de julio de 2000gt
- NMTOKEN sólo acepta letras, números, puntos,
guiones, subrayados y los dos puntos - lt!ATTLIST mensaje fecha NMTOKEN REQUIREDgt
- ltmensaje fecha15-7-2000gt
- Enumerados y notaciones sólo acepta un valor de
entre los dados como opciones - lt!ATTLIST mensaje prioridad (normalurgente)
normalgt
15Tipos de Atributos (cont.)
- Notaciones el valor se debe ajustar a una
notación declarada - lt!NOTATION HTML SYSTEM http//www.w3.org/Markupgt
- lt!ATTLIST mensaje fecha NOTATION
(ISO-DATEEUROPEAN-DATE) REQUIREDgt - ID e IDREF ID asigna un identificador único que
será referenciado por un atributo de tipo IDREF - lt!ELEMENT enlace (PCDATA)gt
- lt!ATTLIST enlace apuntador IDREF REQUIREDgt
- lt!ELEMENT capitulo (parrafo)gt
- lt!ATTLIST capitulo identificador ID IMPLIEDgt
16Declaración de Entidades
- Se usan para referenciar a imágenes, pág.webs,
ficheros, etc. - Se declaran mediante lt!ENTITY
- Entidades internas abreviaturas de contenido XML
que se reemplaza en el documento - lt!DOCTYPE texto
- lt!ENTITY alf Alien Life Formgt gt
- lttextogtALF significa alflt/textogt
- Entidades externas analizadas son similares,
pero obtienen el contenido de un documento,
pág.web, etc. - lt! ENTITY ayuda SYSTEM http//www.servidor.com/ay
uda.xmlgt
17Declaración de Entidades (cont.)
- Entidades no analizadas si el contenido de la
entidad es un archivo binario, el procesador XML
no debe intentar interpretarlo como si fuera
texto XML - lt!ENTITY logo SYSTEM http//www.servidor.com/logo
.gifgt - Entidades parámetro similares a las internas,
pero se reemplazan en el DTD en lugar del
documento XML - lt!DOCTYPE texto
- lt!ENTITY meta-alf lt!ELEMENT alf
(PCDATA)gtgt - meta-alf
- gt
18Ejemplo de DTD y XML
- Definición de un lenguaje de marcado para una BD
de personas. - lt?xml version1.0?gt
- lt!DOCTYPE agenda
- lt!ELEMENT agenda (persona)gt
- lt!ELEMENT persona (nombre,tlf)gt
- lt!ATTLIST persona id ID REQUIREDgt
- lt!ELEMENT nombre (PCDATA)gt
- lt!ELEMENT tlf (PCDATA)gt
- gt
19Ejemplo de DTD y XML (Cont.)
- ltagendagt
- ltpersona idrickgt
- ltnombregtRicardolt/nombregt
- lttlfgt952459823lt/tlfgt
- lt/personagt
- ltpersona idpiligt
- ltnombregtPilarlt/nombregt
- lttlfgt957294875lt/tlfgt
- lt/personagt
- lt/agendagt
EJERCICIO ampliar este ejemplo para
especificar relaciones de amistad.
20Elegir un Parser XML
- Parsers sin validación o con validación.
- Las aplicaciones que usemos incluyen sus propios
parsers (MS IExplorer utiliza el parser incluido
en MSXML.DLL) - Parsers on-line
- http//geneura.ugr.es/pedro/xml/progs/parserJS/
sin validación - http//frontier.userland.com/stories/storyReader1
092 sin validación - http//www.xml.com/tools/ruwf/check.html sin
validación - http//www.cogsci.ed.ac.uk/richard/xml-check.htm
con validación - http//www.stg.brown.edu/service/xmlvalid/ con
validación
21Elegir un Parser XML
- Parsers de línea de comandos
- RXP
- Disponible para Linux y Windows. Por defecto sólo
comprueba la sintaxis. Con validación con la
opción V. Salida con detalles con la opción v. - rxp s V ejemplo-sin-error.xml
- rxp s V ejemplo-con-error.xml
- EXPAT
- Disponible para Linux y Windows.
- xmlwf ejemplo-sin-error.xml
- xmlwf ejemplo-con-error.xml
22Elegir un Parser XML
- Parsers de línea de comandos (cont.)
- XERCES
- El que usa el proyecto Apache (Cocoon).
- cd /home/user/xerces-c1_3_0-linux/
- export LD_LIBRARY_PATH /home/user/xerces-c1_3_0-
linux/lib/ - ./bin/SAXPrint bin/SAXPrint ejemplo-sin-error.xm
l - ./bin/SAXPrint bin/SAXPrint ejemplo-con-error.xm
l
23Usar Perl para programar un Parser
!/usr/bin/perl -w use strict use
XMLParser use TextWrap use GetoptStd my
(indlevel,_at_sectnums,parabuf,opts) getopts('c',
\opts) my pnew XMLParser(Stylegt'Stream')
p-gtparsefile(ARGV0) sub StartTag my
(expat,eltype)_at__ if (eltype eq "esquema")
indlevel-1 sectnums00
parabuf"" elsif (eltype eq "secc")
sectnumsindlevel sectnumsindlevel
10 print ' ' x (4indlevel),join('.',_at_sect
nums0..indlevel)," _titulo\n" print
"\n" unless optsc elsif (eltype eq
"para") else die "invalid element
eltype"
sub Text tr/\n/ / s/\s// s/\s//
return if _ eq "" parabuf_ sub EndTag
my (expat,eltype)_at__ if (eltype eq
"esquema") elsif (eltype eq "secc")
--indlevel elsif (eltype eq "para")
my ind' ' x (4indlevel) print
wrap(ind,ind,parabuf),"\n\n" unless optsc