1 / 37

Modelos de documento (DTD)

XML. Modelos de documento (DTD). Introducción. Freeform XML  Cualquier XML bien escrito ¿Cómo restringimos “estructura” y formato de nuestra aplicación XML? ¿Cómo verificamos la gramática y vocabulario del documento? Modelado de documentos Alternativas para el modelado

herne
Download Presentation

Modelos de documento (DTD)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. XML Modelos de documento (DTD)

  2. Introducción • Freeform XML  Cualquier XML bien escrito • ¿Cómo restringimos “estructura” y formato de nuestra aplicación XML? • ¿Cómo verificamos la gramática y vocabulario del documento? • Modelado de documentos • Alternativas para el modelado • DTD (Document Type Definition) • Schema (XMLSchema)

  3. Introducción (II) • Modelo • Documento especial para describir lenguajes (aplicaciones) XML • Qué define un modelo • Qué elementos y atributos puede contener • “Gramática del documento”. P.e. un elemento <ul> sólo puede contener elementos <li> • Validación • XML válido que se adhiere a un modelo

  4. ¿Cuándo necesitamos un modelo? • Casos de interés • Documento XML  Datos orientados a máquinas en vez de personas • Campos obligatorios  El modelo asegura que esos campos están presentes • Ayuda a programas de edición WYSIWYG  Presentan automáticamente campos a rellenar del documento • Forma sencilla de crear un estándar • Reutilización de trabajo anterior  P.e. Docbook usa formato tablas de CALS

  5. Validación de un doc • Documento validado incluye document type declaration que apunta a un DTD en prólogo <!DOCTYPE persona SYSTEM "http://www.captiva.es/dtds/persona.dtd"> • Localización del DTD • SYSTEM  Indica una URL o fichero del sistema • Public ID • Localización de DTDs públicos (p.e. estándares) • Especifican un ID  Catálogo (espec OASIS) resuelve URL <!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd"> • Necesitamos definir documento DTD (Document Type Definition).  persona.dtd • Sintáxis no XML • Heradado de SGML • Limitaciones  XML Schema

  6. Validación de un doc (II) • Ejemplo de DTD (persona.dtd): • ¿Qué describe este documento? • 6 elementos válidos  Declaración de elementos • No es necesario aunque aconsejable 1 declaración por línea • Parentesco • identidad y profesion hijos de persona • nombre, apellido1 y apellido2 hijos de identidad • Cardinalidad • Uno y sólo un elemento identidad por persona • Cero o varios elementos profesion por persona (*) • Orden • identidad debe preceder a profesion • identidad debe contener en este orden a nombre apellido1 apellido2 • Contenido • Algunos nodos pueden contener hijos • Otros pueden contener datos  #PCDATA (Printable Character Data)

  7. Validación de un doc (III) • Ejemplo de archivo válido (persona.xml): • Ejemplo de archivos inválidos (persona-invalido1.xml y persona-invalido2.xml)

  8. Validación de un doc (IV) • Orden de declaración de elementos en DTD no es importante • Ejemplo de DTD alternativo (persona2.dtd):

  9. Validación de un doc (V) • Validación online • http://www.stg.brown.edu/service/xmlvalid/ • Validación local • Jedit • XML Cooktop

  10. Estructura de un DTD • Partes • Prólogo • No es obligatorio • Similar a la de un documento XML • <?xml version=“1.0”?> • Declaraciones • Elementos • Atributos • Entidades • Notaciones • Datos en bruto

  11. Declaración de elementos • Partes <!ELEMENT nombre_elementomodelo-contenido> • Tipos de modelos de contenido • Elementos vacíos <!ELEMENT elementoEMPTY> • Elementos sin restricciones de contenido <!ELEMENT elementoALL> • Elementos que contienen sólo caracteres de datos <!ELEMENT elemento(#PCDATA)> • Elementos que contienen elementos <!ELEMENT elemento(elemento2, elemento3)> <!ELEMENT elemento(element2+, (elemento3 | elemento4)> • Elementos con contenido mixto <!ELEMENT elemento(#PCDATA | elemento2)*>

  12. Declaración de elementos (II) • Modificadores para modelos de contenido

  13. Declaración de elementos (III) • Ejemplo <!ELEMENT articulo (titulo, subtitulo?, autor*, (parrafo | tabla | lista)+, bibliografia?)> • Análisis • titulo • Debe haber sólo un elemento y ser el primer hijo de articulo • subtitulo • Es opcional y si existe debe ir después de titulo • autor • Es opcional y puede haber cualquier número. Debe ir después del titulo y subtitulo • Texto • Puede estar compuesto por elementos e tipo parrafo, tabla o lista en cualquier número. Debe haber como mínimo uno de estos elementos • bibliografia • Opcional y debe ser el último hijo de articulo.

  14. Declaración de elementos (IV) • Elementos con contenido mezclado • <!ELEMENT parrafo (#PCDATA | referencia)*> • Ejemplo DTD completo (articulo.dtd):

  15. Declaración de elementos (V) • Instancia de articulo invalida (articulo-invalido.xml) • Ejercicio opcional: Modificar DTD para que sea válido.

  16. Declaración de elementos (V) • Instancia de articulo valida (articulo.xml)

  17. <!ATTLIST > elemento nombre_atrib1 tipo_atrib1 desc_atrib1 nombre_atrib2 tipo_atrib2 desc_atrib2 Declaración de atributos • Un documento debe declarar todos los atributos posibles, no sólo los elementos • Formato • Ejemplo • <!ATTLIST image source CDATA #REQUIRED> • Atributo “source” para elemento “image” contiene CDATA (cualquier carácter) y es obligatorio (#REQUIRED).

  18. Declaración de atributos (II) • Tipos de atributos posibles • CDATA • NMTOKEN • NMTOKENS • Enumeración • ID • IDREF • IDREFS • ENTITY • ENTITIES • NOTATION

  19. Declaración de atributos (III) • Atributo tipo CDATA (character data) • Tipo de atributo más general • Acepta cualquier carácter XML válido • Permite el uso de ENTITIES de carácter y generales • Uso: <!ATTLIST image alt CDATA #IMPLIED> • Atributos válidos: <image alt=“Esta es una ‘imagen’”> <image alt=“AT&amp;T”> <image alt=“5 - 1 + 4 * 2 &lt; 100 ”> <image alt=“http://www.captiva.es/”>

  20. Declaración de atributos (IV) • Atributo tipo NMTOKEN (name token) • Cadena con restricciones similares a nombre de elemento (aunque puede comenzar por número o un punto) • Uso: <!ATTLIST item serial NMTOKEN #REQUIRED> • Atributos válidos: serial=“aeiou” serial=“12.12” serial=“v3.3-5” serial=“fichero.txt”

  21. Declaración de atributos (V) • Atributo tipo NMTOKENS • Lista de NMTOKEN separada por espacios • Uso: <!ATTLIST articulo palabras_clave NMTOKENS #IMPLIED> • Atributos válidos: palabras_clave=“perro gato gallo” palabras_clave=“texto.txt texto.doc texto.pdf” palabras_clave=“11-2-2005 11-3-2006”

  22. Declaración de atributos (VI) • Atributo tipo enumeración • En realidad es un conjunto de valores válido • Se separan los valores con ‘|’ • Uso: <!ATTLIST fecha dia_festivo (sábado | domingo) #REQUIRED> • Ejemplos: <!ATTLIST fecha dia_semana (lunes | martes | miércoles | jueves | viernes | sábado | domingo) #REQUIRED> <!ATTLIST fecha mes_año (enero | febrero | marzo | abril | mayo | junio | julio | agosto | septiembre | octubre | noviembre | diciembre) #REQUIRED>

  23. Declaración de atributos (VII) • Atributo tipo ID (identificador único) • Nombre XML que ha de ser único para todos los atributos ID del documento • Sirve para identificar unívocamente un elemento del documento • Sólo puede haber un atributo de este tipo por elemento • Uso: <!ATTLIST persona dni ID #REQUIRED> • Atributos válidos: dni=“_32232238S” • Atributos inválidos: dni=“32232238S”

  24. Declaración de atributos (VIII) • Atributo tipo IDREF (referencia a identificador) • Igual que ID solo que referencia al ID de otro elemento • Si no existen ningún elemento con el ID indicado daría error • Uso: <!ATTLIST cita ref IDREF #REQUIRED> • Atributo tipo IDREFS • Lista de IDREF separada por espacios • Uso: <!ATTLIST libros refs IDREFS #REQUIRED>

  25. Declaración de atributos (IX) • Atributo tipo ENTITY (nombre de entidad) • Acepta como valor el nombre de una entidad definida en el DTD • Uso: <!ATTLIST itemlista viñeta ENTITY #REQUIRED> <!ENTITY cuadro SYSTEM “iconos/cuadro.gif”> <!ENTITY circulo SYSTEM “iconos/circulo.gif”> • Atributos válidos: <itemlista viñeta=“cuadro”> • Atributo tipo ENTITIES • Lista de entidades separada por espacios • Uso: <!ATTLIST itemlista viñetas ENTITIES #REQUIRED> • Atributos válidos: <itemlista viñetas=“cuadro circulo”>

  26. Declaración de atributos (X) • Atributo tipo NOTATION • Contiene el nombre de una notación definida en el DTD • Declaración de notaciones: <!NOTATION gif SYSTEM "image/gif"> <!NOTATION tiff SYSTEM "image/tiff"> <!NOTATION jpeg SYSTEM "image/jpeg"> <!NOTATION png SYSTEM "image/png"> • Uso: <!ATTLIST image type NOTATION (gif | tiff | jpeg | png) #REQUIRED>

  27. Declaración de atributos (XI) • Descripciones de atributo • Tras el tipo de atributo se ha de especificar una de las siguientes descripciones • #IMPLIED • El atributo es opcional. No se le asigna ningún valor por defecto • #REQUIRED • El atributo es obligatorio • #FIXED • Se le asigna un valor fijo al atributo incluso si no se especifica. Si se especifica ha de darle este valor. <!ATTLIST biography xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"> • Literal • Valor por defecto para un atributo <!ATTLIST recurso protocol NMTOKEN "http">

  28. Declaración de entidades • Tipos de declaraciones de entidades • Entidad general • Sirve para substituir texto. • <!ENTITY saludo “Hola Buenos Dias”> • Referencia  &saludo; • Entidad general externa • Contiene texto de una fuente externa. • <!ENTITY man SYSTEM “/pub/docs/manual/man.htm”> • Entidad externa nonparsed • El contenido externo no tiene por qué ser XML. Puede ser datos binarios incluso. • <!ENTITY logo SYSTEM “http://www.captiva.es/001/imagenes/logo.gif” NDATA gif> • gif es una referencia a NOTATION definida en algún lado

  29. Declaración de entidades (II) • Tipos de declaraciones de entidades (II) • Entidad parámetro • Substitución para texto de DTD • <!ENTITY % textoparrafo “(#PCDATA | referencia) ” > • La referencia a la entidad se haría con %textoparrafo; • Especie de MACROS para DTDs • Entidad parámetro externa • Igual que la anterior pero hace referencia a DTD o trozo de DTD residente en fichero externo • <!ENTITY % tablas PUBLIC “-//Mis Tablas/DTD Tablas 1.1//ES” “/dtds/tablas.dtd” > • La referencia  %tablas;

  30. Declaración de entidades (III) • Modularización de DTDs • Entidad parámetro externas  Permiten importar ficheros • Entidad parámetro pueden redefinirse. Tiene más prioridad última definición • Permite adaptar entidades incluidas a través de entidades parámetro externa • Inclusión condicional <![CONDICION[ <!– Directivas DTD --> ]]> • Si CONDICION == “INCLUDE” se incluye el fragmento de DTD • Si CONDICION == “IGNORE” no se incluye

  31. Declaración de entidades (IV) • Modularización de DTDs (II) • Ejemplo: • Fichero casas.dtd <!ELEMENT casa (tejado, pared+)> • Fichero miscasas.dtd <!–- Importamos casas.dtd --> <! ENTITY % fich_casas SYSTEM “casas.dtd” > %fich_casas; <! ENTITY % condicion “INCLUDE” > <[ %condicion; [ <!-- Al ser condicion == “INCLUDE” se redefine elemento casa --> <!ELEMENT casa (tejado, pared+, suelo)> ]]>

  32. Internal subset • Zona dentro de documento XML para definir elementos de DTD <?xml version="1.0"?> <!DOCTYPE persona SYSTEM “/dtds/persona.dtd” [ <!-– Internal subset --> <!ELEMENT persona (identificacion+, profesion*)> <!ELEMENT identificacion EMPTY> <!ATTLIST identificacion dni CDATA #REQUIRED> <!ELEMENT profesion EMPTY> <!ATTLIST profesion valor CDATA #REQUIRED> ]> • El internat subset tiene más prioridad que el external subset (el fichero DTD especificado con DOCTYPE) • Útil para redefinir elementos de un DTD genérico sólo para la instancia dada de XML

  33. Internal subset • Zona dentro de documento XML para definir elementos de DTD <?xml version="1.0"?> <!DOCTYPE persona SYSTEM “/dtds/persona.dtd” [ <!-– Internal subset --> <!ELEMENT identificacion EMPTY> <!ATTLIST identificacion dni CDATA #REQUIRED> ]> • El internal subset tiene más prioridad que el external subset (el fichero DTD especificado con DOCTYPE) • Útil para redefinir elementos de un DTD genérico sólo para la instancia dada de XML

  34. Ejemplo I: Articulo • Fichero (articulo-completo.dtd) • Se ha incorporado ENTITIES • Incorporamos atributos a algunos elementos

  35. Ejemplo I: Articulo (II) • Fichero (articulo-completo.xml) • Definimos dos Unparsed Entities para indicar las imágenes a usar como elemento de listas • Incorporamos referencias cruzadas entre <referencia> y <recurso> de bibliografía

  36. Otros ejemplos • Estándar XHTML 1.0 Strict • Directorio ‘xhtml’ dentro de prácticas • http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd • Fichero xhtml1-strict.dtd en directorio • Ejemplos de ficheros XHTML • ejemplo_local_novalidable.html • ejemplo_publico_invalido.html • ejemplo_publico_validado.html

  37. Ejercicio • Coger casino.xml de 2º capítulo • Crear DTD, teniendo en cuenta las limitaciones • Puede haber 0,1 o más mesas de juego • Se definirán las siguientes ENTITIES al comienzo del DTD: • %juegos • %palos • %palo_por_defecto • Los juegos posibles son: “brisca”, “tute”, “poker” • Cada mesa debe tener como mínimo un jugador • Cada jugador debe tener al menos una carta • El jugador puede tener o no nombre • Las cartas han de ser de los palos: “oros”, “copas”, “espadas” ó “bastos”, no siendo obligatorio indicarlo. Por defecto será de tipo “oros” • Segunda parte • Añadir un identificador único “dni” para cada jugador • Añadir un juego más posible: “sieteymedia”

More Related