tutorial jaxb

Upload: dsalvare

Post on 10-Jul-2015

825 views

Category:

Documents


0 download

TRANSCRIPT

Parte I. INTRODUCCIN1.1 Qu es JAXB?El Lenguaje de Marcado Extensible (XML) y la tecnologa Java son compaeros o socios de trabajo en la ayuda a los desarrolladores para intercambiar datos y programas a travs de Internet. JAXB simplifica el acceso a un documento XML de un programa Java representando el documento XML en un programa en formato Java, esto es, provee a los desarrolladores de aplicaciones Java, una forma rpida y conveniente para enlazar o vincular esquemas XML a representaciones java. JAXB provee de mtodos para desorganizar (unmarshal) documentos instancias XML en rboles de contenido (generados en cdigo Java), para despus utilizar los mismos y generar mediante el mtodo organizar (marshal) instancias XML de las que fueron generados. Esto nos proporciona la flexibilidad de manejar datos XML en una plataforma neutral adems de no requerir tratar o conocer las tcnicas de programacin de XML al ocultar ciertos detalles complejos de sus relaciones. JAXB proporciona potencia sin tener las desventajas de que el procesamiento de las aplicaciones sea pesado y/o complejo como ocurre con SAX o DOM. Las clases generadas JAXB describen solo relacin real definida en los esquemas fuentes. El resultado de lo anterior son datos xml altamente portables que unido a un cdigo java portable puede ser usado para crear flexibles y ligeras aplicaciones y servicios web.

1.2 Caractersticas de JAXBAl usar una aplicacin JAXB obtenemos diversos beneficios, adems contamos con una flexibilidad mucho mayor que otras aplicaciones nos dan, las caractersticas ms importantes por las cuales nos conviene utilizar JAXB son las siguientes:

1

JAXB usa Tecnologa Java y XML Garantiza Datos Vlidos Es Rpida Es Fcil de Usar Puede Restringir Datos Es Personalizable Es Extensible

Para comprender a detalle los beneficios de utilizar JAXB se da una explicacin a continuacin sobre cada una de estas caractersticas.

1.2.1 Las aplicaciones JAXB usan Tecnologa Java y XMLUna de las cualidades ms importantes de las aplicaciones de JAXB es que estn escritas en el lenguaje de programacin Java y pueden procesar datos XML. Para poder entender las implicaciones de estas caractersticas es necesario primeramente comprender porque es tan importante la tecnologa Java y el lenguaje XML, adems de cmo es su implementacin. El lenguaje XML es una forma, estndar industrial e independiente del sistema, de representar datos. Los datos que se representan usando XML se pueden publicar en mltiples medios porque XML describe la estructura de los datos, no su formato, al contrario que el HTML, Los datos de XML se pueden pasar entre aplicaciones porque la estructura de los datos se puede especificar en un esquema, lo que permite que un analizador de sintaxis valide y procese los datos que siguen el esquema. El lenguaje XML no proporciona etiquetas, como lo hace HTML, se hace uso de un esquema para definir nuestras propias etiquetas, y estas a su vez describen nuestros datos. Los datos XML son fciles de trabajar porque estn escritos en un formato de texto simple, legible por los seres humanos y el software de edicin de texto. Por estas razones, XML se est convirtiendo rpidamente en un mtodo comn para el intercambio de datos entre aplicaciones, especialmente aplicaciones de empresa de negocio-a-negocio. Las aplicaciones escritas en el lenguaje de programacin de Java son portables: ya que cualquier sistema con una mquina virtual Java puede2

ejecutar los bytecode producidos compilando una aplicacin Java. Con el cdigo portable que la tecnologa de Java proporciona, XML es an ms til en el contexto de compartir datos entre las aplicaciones. Las aplicaciones, especialmente aplicaciones basadas en Web, necesitan la ayuda de la tecnologa de Java para analizar y procesar los datos de una manera independiente de la plataforma. Asimismo, las aplicaciones Java necesitan el formato de datos independiente de la plataforma que XML proporciona para comunicar y compartir informacin. Podramos decir que JAXB proporciona un puente entre estas dos tecnologas complementarias. Ya que JAXB incluye un compilador que asocia un esquema a un conjunto de clases Java. Una vez que tengamos nuestras clases, podremos construir las representaciones de objetos Java de los datos XML que siguen las reglas que el esquema define. Al igual que un documento XML es un ejemplar de un esquema, un objeto Java es un ejemplar de una clase. As, JAXB permite que creemos los objetos Java en el mismo nivel conceptual que los datos XML. La representacin de nuestros datos de esta manera permite que los manipulemos de manera semejante como manipularamos objetos de Java, haciendo ms fcil la creacin de aplicaciones para procesar datos XML. Una vez que tengamos nuestros datos en la forma de objetos Java, es fcil acceder a ellos. Adems, despus de trabajar con los datos, podemos escribir los objetos Java en un nuevo documento XML. Con el acceso fcil a los datos XML que proporciona JAXB, solamente necesitamos escribir aplicaciones que realmente utilizarn los datos, en vez gastar el tiempo en escribir cdigo para formatear los datos.

1.2.2 Las Aplicaciones JAXB son RpidasDos APIs de uso general para analizar XML son SAX (API simple para XML) y DOM (modelo del objeto del documento). Un analizador de sintaxis de SAX es un analizador de sintaxis dirigido por eventos, lo que significa que reacciona a los pedazos del documento mientras lo est analizando; no salva ninguna parte del documento en memoria. Un analizador de sintaxis de DOM construye una estructura de datos del documento en la memoria cuyo contenido puede ser manipulado, pero es mucho ms lento que un analizador de sintaxis SAX. Una aplicacin JAXB, por otra parte, tiene la velocidad de un analizador de sintaxis SAX y de la capacidad de almacenaje de datos de un analizador de sintaxis DOM. Aunque los analizadores de sintaxis SAX son rpidos, los primeros prototipos de JAXB han demostrado que JAXB puede3

ser ms rpido que los analizadores de sintaxis SAX. JAXB hace ms rpidamente el anlisis porque las clases generadas estn precompiladas y contienen la lgica del esquema, de tal modo que evitan la interpretacin dinmica que un analizador de sintaxis SAX debe realizar. Una aplicacin JAXB puede construir una estructura de datos en memoria como un analizador de sintaxis DOM. Sin embargo, al contrario que DOM, no incluye muchas de las funciones adicionales para la manipulacin del rbol. Al contrario que una aplicacin DOM, una aplicacin JAXB es especfica de un esquema: No podemos utilizarla para procesar los documentos de XML que se basan en otro esquema. Por estas razones, una aplicacin JAXB utiliza mucho ms eficientemente la memoria que DOM.

1.2.3 Las Aplicaciones JAXB son Fciles de Crear y de UsarPuesto que todo el cdigo de proceso se genera por nosotros, JAXB es ms fcil de utilizar que la mayora de los analizadores de sintaxis XML: Con slo un stream de entrada podemos tener acceso al contenido. Adems, la mayora de los analizadores de sintaxis XML se limitan al tipado de datos ofrecido por un DTD. Un DTD es un tipo de lenguaje de esquema de XML. Todava necesitamos proporcionar al cdigo de conversin, que puede ser propenso a errores y difcil de mantener. JAXB genera automticamente el cdigo que podemos personalizar para que realice la conversin de contenidos por nosotros. Si sabemos cmo programar en el lenguaje Java y tenemos un mnimo conocimiento de XML, podremos empezar a usar JAXB. Adems, como las clases generadas cumplen las convenciones del API Java, es incluso ms fcil empezar a trabajar con JAXB.

1.2.4 Las Aplicaciones JAXB Pueden Convertir DatosAunque un documento de XML est especificado para un esquema, en este momento, un esquema est limitado en cmo puede especificar firmemente el contenido de un documento de XML. Las aplicaciones de intercambio de datos necesitan tipado de datos formal. XML 1,0 no proporciona explcitamente a tipado de datos ms all de expresar tipos como valores del atributo; estos valores del atributo deben entonces ser interpretados analizando el cdigo proporcionado. Es decir podemos incorporar cualquier tipo de datos4

que deseemos entre dos etiquetas, tales como nmeros enteros o cadenas, mientras la estructura del documento est conforme con la especificacin del DTD. Pero lo que desearemos con frecuencia es poder convertir los datos, por ejemplo, para especificar que solamente un nmero entero se puede contener entre dos etiquetas . JAXB proporciona capacidades tanto para la estructura como para la validacin del contenido en el cdigo generado, que podemos personalizar. Ms importante, puesto que JAXB genera el cdigo Java, podemos asignar tipos exclusivos del lenguaje de programacin Java, tal como Date o BigDecimal, a nuestros elementos.

1.2.5 Las Aplicaciones JAXB Pueden PersonalizarseAntes de generar las clases Java de desde nuestro DTD, escribimos lo que se llama un esquema de unin, que contiene instrucciones de cmo generar las clases. El esquema de unin se escribe en un lenguaje de unin basado en XML, cuyas construcciones utilizamos para escribir al esquema de unin de modo que podamos especificar cmo se generan las clases. Una de las personalizaciones ms tiles son las conversiones de tipos de datos. Por ejemplo, como se mencion en secciones anteriores, podemos especificar en el esquema de unin que el elemento quantity slo debe contener nmeros enteros. Adems de las conversiones de tipos de datos, podemos utilizar el esquema de unin para controlar los nombres de las clases, los paquetes, y los tipos; y podemos generar constructores, interfaces, y enumeraciones personalizadas. El esquema de unin tambin permite que manejemos la evolucin del esquema. Si nos anticipamos la cambio de nuestro esquema, el esquema de unin proporcionar constructores especiales que definen uniones flojas que permitan ms flexibilidad. Cuando el esquema se desarrolle, todo lo que necesitamos hacer es editar el esquema de unin y ejecutar el compilador del esquema otra vez para crear las clases que reflejan los cambios. Si intentramos cambiar las clases en lugar del esquema, una vez que ejecutramos el compilador del esquema otra vez, los cambios seran sobrescritos. Porque las instrucciones de unin se especifican en el esquema de unin a parte del esquema y el cdigo cuando se desarrolle el esquema, lo tendremos mucho ms fcil para mantener la aplicacin.

5

1.2.6 Las Aplicaciones JAXB son ExtensiblesUna vez que hayamos generado las clases Java, podremos utilizarlas sin modificaciones, o subclasificarlas para proporcionar funcionalidades adicionales. Los desarrolladores de JAXB disearon el proceso de unin para hacer que la derivacin de subclases sea sencillo.

1.3 Arquitectura de JAXB

Como se muestra en la figura anterior, una implementacin JAXB incluye los siguientes componentes principales: Componente DescripcinUn Esquema XML usa la sintaxis XML para describir las relaciones entre los elementos, atributos y entidades en un documento XML. El esquema XML define un patrn de documentos XML al que deben adherirse con una estructura definida por reglas y restricciones de datos especificadas en el esquema. Por default, el compilador vinculante JAXB une las clases java y los paquetes a un esquema fuente XML basado en las reglas definidas en la especificacin JAXB en lo que se conoce como un esquema de unin o vinculacin. Puede ser que algunas veces las reglas por default de vinculacin no sean suficientes para lo que necesitas. JAXB soporta personalizaciones y sobrescribe las reglas de vinculacin por default por el las personalizaciones de vinculacin.

Esquema XML

Personalizacione s Binding

6

Compilador vinculante

El compilador vinculante JAXB es el ncleo del modelo de procesamiento JAXB. Su funcin es transformar, o vincular, un esquema XML fuente a un conjunto de clases contenido JAXB en el lenguaje de programacin Java. Bsicamente, corres el compilador JAXB usando un esquema XML (opcionalmente con declaraciones de vinculacin) como entrada, y el compilador vinculante genera clases java con las restricciones en el esquema fuente XML. La implementacin del framework de JAXB vinculante es una API de tiempo de ejecucin que provee de interfaces para desorganizar, organizar y validar contenido XML en una aplicacin Java. El framework vinculante comprende las interfaces definidas en el paquete javax.xml.bind. Estas son clases derivadas del esquema generadas por el compilador JAXB. Las clases especficas variaran dependiendo del esquema de entrada. En el contexto de JAXB, una aplicacin java es una aplicacin cliente que usa el marco para desorganizar datos XML, validar y modificar el contenido de objetos java, y organizar el contenido de regreso a datos XML. Tpicamente, el marco de JAXB es envuelto en una aplicacin java grande que puede proveer caractersticas UI, funciones de transformacin XML, datos procesados, o lo que sea que sea deseado El contenido que es desorganizado como entrada para el framework JAXB, eso es, una instancia documento XML, de la cual es generada una representacin java en forma de contenido de rbol. En la practica, el termino documento puede no tener el significado convencional, como una instancia documento XML, puede en su lugar, tomar la forma de flujos de datos pasados entre aplicaciones, o conjuntos de campos de bases de datos, o de infosets XML. En JAXB, el proceso de desorganizacin soporta la validacin de una entrada documento XML contra las restricciones definidas en el esquema fuente. Este proceso de validacin es opcional. El contenido XML es organizado fuera de un documento XML. En JAXB, organizar incluye parsear un objeto rbol de XML y escribirlo en un documento XML que es una representacin precisa del documento original XML, y es vlido con respecto al esquema fuente. JAXB puede organizar datos XML en documentos XML, manejadores de contenido SAX, y nodos DOM

Implementacin de javax.xml.bind Clases derivadas del esquema

Aplicacin java

Documento de entrada XML

Salidas de documentos xml

7

1.4 El proceso de vinculacin de JAXBLa siguiente figura muestra lo que ocurre durante el proceso de vinculacin JAXB

Tpicamente para generar una aplicacin JAXB, hay una fase de desarrollo de aplicacin en la cual las clases JAXB son generadas y compiladas, y una implementacin vinculante es construida, seguida por una fase de utilizacin en la cual las clases JAXB generadas son usadas para procesar contenido XML en una continuo vivir en un escenario de produccin. 1. Vincular el esquema. El primer paso del proceso es enlazar el esquema XML fuente en un conjunto de clases Java que representen ese esquema. Para realizar lo anterior un esquema XML es usado como entrada para el compilador vinculante de JAXB para generar clases JAXB que lo representen. Todas los proveedores de JAXB proveen una herramienta llamada compilador enlazante para vincular un esquema (la manera en que el compilador es invocado puede ser especfica de la implementacin). Ya que las clases son una implementacin especfica, las clases generadas por otro compilador enlazante en una implementacin JAXB probablemente no funcionarn con otra implementacin JAXB. Por lo tanto si cambias a otra implementacin JAXB, deberas

8

revincular el esquema con el compilador enlazante suministrado por esa aplicacin.

Compilar las clases generadas. Todas las clases, interfaces, archivos fuentes, y cdigo generado debe ser compilado.

2.

Crear la aplicacin JAXB que utilice las clases y dems archivos generados por el compilador enlazante y compilarla. Una vez hecho lo anterior, estas listo para convertir documentos xml a clases java o viceversa; esto lo podemos realizar mediante: Desorganizar y generacin de rbol de contenido. Los documentos XML escritos de acuerdo a las restricciones en el esquema fuente son desorganizados por el framework vinculante JAXB. Note que JAXB tambin soporta desorganizacin de datos de otras fuentes que archivos/documentos, tales como nodos DOM, buffers de cadenas, fuentes SAX, y cosas as. Generar el rbol de contenido. El proceso de desorganizacin genera un rbol de contenido de objetos de datos instanciados de la clase generada JAXB; este rbol de contenido representa la estructura y contenido de los documentos fuentes XML. Validacin (Opcional). El proceso de desorganizacin opcionalmente incluye la validacin de los documentos fuentes XML antes de generar el rbol de contenido. Si modifica el rbol de contenido puede tambin usar la operacin de validar JAXB para validar los cambios antes de organizar el contenido al documento XML que previamente se haba desorganizado. Procesos de contenido. La aplicacin cliente puede modificar los datos XML representados por el rbol de contenido Java por el uso de interfaces generadas por el compilador vinculante.

9

Marshalling que es la operacin contraria a unmarshalling, con el cual conviertes objetos Java en una representacin documento XML.

1.5 Framework vinculante JAXBEl framework vinculante de JAXB es implementado en tres paquetes java: El paquete javax.xml.bind, contiene clases e interfaces para la realizacin de operaciones tales como desorganizacin, organizacin y validacin. El paquete javax.xml.bind.util contiene clases de utilidad que pueden ser usadas por una aplicacin cliente para manejar los eventos de organizacin, desorganizacin y validacin. El paquete de javax.xml.bind.helper provee una implementacin parcial por default para algunas de las interfaces javax.xml.bind. Las implementaciones JAXB pueden extender estas clases e implementar los mtodos abstractos. Este paquete est designado para los proveedores de implementaciones JAXB.

1.5.1 El paquete javax.xml.bindEl paquete javax.xml.bind es el paquete principal del framework que define clases abstractas e interfaces que son usadas directamente con clases contenido. Define las clases Unmarshaller, Validator, y Marshaller, los cuales son objetos auxiliares para proveer sus operaciones respectivas. Adems, define una herencia de eventos de validacin y clases de excepciones para usar cuando ocurren errores de organizacin o desorganizacin.

10

Las tres funciones principales provedas por este paquete son organizacin, desorganizacin, y validacin. Define tambin la clase JAXBContent la cual es el punto de entrada para una aplicacin java dentro del marco de JAXB. La clase JAXBContext provee una abstraccin para administrar la informacin de vinculacin XML/JAVA necesaria para implementar las operaciones de desorganizar, organizar y validar. Una aplicacin cliente obtiene nuevas instancias de esta clase por el uso del mtodo newInstance(contextPath); por ejemplo:JAXBContext jc= JAXBContext.newInstance(com.acme.foo:com.acme.bar);

El parmetro contexPath contiene una lista de los nombres de paquetes java que contienen las interfaces derivadas de un esquemaparticularmente las interfaces generadas por el compilador enlazante JAXB. El valor de este parmetro inicializa el objeto JAXBContext para permitir la manipulacin de las interfaces derivadas del esquema. Para este termino, la implementacin proveedora de JAXB debe suministrar una clase implementacin conteniendo un mtodo con la siguiente declaracin:Public static JAXBContext createContext(String contextPath, ClassLoader classLoader) Throws JAXBException;

1.5.1.1 Desorganizacin La clase Unmarshaller en el paquete javax.xml.bind suministra a la aplicacin cliente la habilidad para convertir datos XML en un rbol de contenido de objetos Java. El mtodo unmarshal para un esquema (dentro de un nombre de espacios) permite para cualquier elemento global XML declarado en el esquema para ser desorganizado como la raz de un documento instancia. Una aplicacin cliente es capaz de desorganizar documentos XML que son instancias de cualquiera de los esquemas listados en la ContextPath; por ejemplo:JAXBContext jc = JAXBContext.newInstance("com.acme.foo:com.acme.bar"); Unmarshaller u = jc.createUnmarshaller(); FooObject fooObj =(FooObject)u.unmarshal( new File( "foo.xml" )); // ok BarObject barObj =(BarObject)u.unmarshal( new File( "bar.xml" )); // ok

11

BazObject bazObj =(BazObject)u.unmarshal( new File( "baz.xml" )); // error, "com.acme.baz" not in contextPath

Una aplicacin cliente puede tambin generar rboles de contenido explcitamente en lugar de desorganizar datos XML existentes.ObjectFactory objFactory = new ObjectFactory(); com.acme.foo.PurchaseOrder po = objFactory.createPurchaseOrder();

Una vez que la aplicacin cliente tiene una instancia de un objeto derivado del esquema, este puede usar los mtodos el transformador de mtodos para establecer contenido en este punto 1.5.1.2 La Organizacin La clase Marchaller dentro del paquete jabax.xml.bind provee a la aplicacin cliente la habilidad para convertir una rbol de contenido java de regreso a datos XML. No hay diferencia entre organizar un rbol de contenido que es creado manualmente usando los mtodos de fbrica y organizar a un rbol de contenido que es el resultado de una operacin de desorganizacin. El proceso de organizacin puede alternativamente producir flujos de eventos SAX2 para un registrado ContentHandler o producir un Nodo objeto DOM. Un simple ejemplo que desorganiza un documento xml y luego lo organiza de regreso fuera es como sigueJAXBContext jc = JAXBContext.newInstance( "com.acme.foo" ); // unmarshal from foo.xml Unmarshaller u = jc.createUnmarshaller(); FooObject fooObj = (FooObject)u.unmarshal( new File( "foo.xml" ) ); // marshal to System.out Marshaller m = jc.createMarshaller(); m.marshal( fooObj, System.out );

1.5.1.3 La Validacin

12

La clase Validador en el paquete javax.xml.bind es responsable del control de la validacin del rbol contenido durante el tiempo de ejecucin. Cuando el proceso de desorganizacin incorpora validacin y esta fue completada exitosamente sin algn error de validacin, ambos el documento de entrada y el rbol de contenido resultante estn garantizados de ser validos. Por el contrario, el proceso de organizacin en realidad no realiza validacin. En general, si una implementacin JAXB no puede inequvocamente completar la desorganizacin u organizacin, esta terminara el procesamiento con una excepcin. Un cliente JAXB pude realizar dos tipos de validacin: Validacin al tiempo de desorganizar permite a una aplicacin cliente recibir informacin acerca de los errores y advertencias detectadas durante la desorganizacin de datos XML dentro de un rbol de contenido, y es completamente ortogonal a los otros tipos de validacin. Para habilitar o deshabilitar esto usa el mtodo Unmarshaller.setValidating. Todos los proveedores JAXB son requeridos para soportar esta operacin. Validacin por demanda permite a una aplicacin cliente recibir informacin acerca de errores de validacin y advertencias detectadas en el rbol de contenido. A cualquier punto, las aplicaciones cliente pueden llamar al mtodo Validator.validate en el rbol de contenido (o cualquier subrbol de este). Todos los proveedores estn obligados a soportar esta operacin

1.6 VersionesComo es natural, JAXB ha tenido hasta la fecha varias versiones, que corresponden a caractersticas o soportes nuevos entre cada versin. El lenguaje de esquema W3C no es el nico lenguaje de esquema, sino que es el nico al que se ha hecho referencia aqu. Sin embargo, la especificacin XML describe DTD como la forma de expresar un esquema. Versiones preliberadas de implementaciones JAXB solo trabajaban con DTDs. Sin embargo en la actualidad, en las ltimas versiones de JAXB, se da soporte

13

tambin al esquema XML. El esquema XML permite mayores potencialidades que los DTD como se ver un poco mas adelante.

Parte II. DOCUMENTOS XML2.1 Qu es XML?XML, sigla en ingls de eXtensible Markup Language (Lenguaje de Marcas Extensible), es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium (W3C). XML es clasificado como un lenguaje extensible debido a que permite a sus usuarios definir sus propias etiquetas. Es una simplificacin y adaptacin del lenguaje SGML y permite definir la gramtica de lenguajes especficos (de la misma manera que HTML es a su vez un lenguaje definido por SGML). Por lo tanto XML no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades. Algunos de estos lenguajes que usan XML para su definicin son XHTML, SVG, MathML. XML no ha nacido slo para su aplicacin en Internet, sino que se propone como un estndar para el intercambio de informacin estructurada entre diferentes plataformas. Se puede usar en bases de datos, editores de texto, hojas de clculo y casi cualquier cosa imaginable. XML es una tecnologa sencilla que tiene a su alrededor otras que la complementan y la hacen mucho ms grande y con unas posibilidades mucho mayores. Tiene un papel muy importante en la actualidad ya que permite la compatibilidad entre sistemas para compartir la informacin de una manera segura, fiable y fcil. XML fue desarrollado por el Grupo de Trabajo XML (XML Working Group), originalmente conocido como SMGL Editorial Review Borrad), formado bajo el auspicio de la W3C en 1996.

14

Las metas diseadas para XML son: XML debe buscar la usabilidad sobre Internet. XML debe soportar una amplia variedad de aplicaciones. XML debe ser compatible con SGML. Debe ser fcil escribir programas que procesen documentos XML. El nmero de caractersticas opcionales en XML debe mantenerse al mnimo absoluto, idealmente ninguno. Los documentos XML deben ser legibles para personas y ser razonablemente claros. El diseo XML debe ser preparado rpidamente. El diseo de XML debe ser formal y conciso. Los documentos XML deben ser fciles de crear. La brevedad en el etiquetado XML es de mnima importancia.

2.2 Definicin de Tipo de Documento (DTD)Un DTD modela un documento: Definiendo un conjunto de elementos que pueden aparecer en un documento XML. Definiendo el modelo del contenido de cada elemento. Un modelo del contenido describe lo que un elemento puede contener en trminos de cualquier subelementos y datos. Definiendo un conjunto de atributos opcionales u obligatorios para cada elemento. La definicin de atributos incluye el nombre del atributo, el valor por defecto y el tipo de dato.

Como el resto de un documento XML, un DTD es simplemente una seccin especial de texto. Sin embargo, debe aparecer al principio de un documento XML para que una aplicacin que reconozca XML pueda validar el documento. Un DTD puede ser externo o interno a un documento XML. Un documento DTD externo reside en otro archivo, a veces en otra computadora. Un DTD interno reside en el mismo archivo que el documento XML. Esto es15

conocido algunas veces como DTD privado porque define el modelo de datos que un documento XML especfico utiliza. En contraste, un DTD externo usualmente define un modelo de datos para un conjunto de documentos XML relacionados. Como resultado, un DTD externo a veces es referido como DTD pblico o compartido. Ya sea interno o externo, un DTD siempre aparece al inicio de un documento XML, inmediatamente despus de la declaracin de XML.

2.2.1 Declaracin de Tipo de DocumentoUn DTD inicia con la declaracin del tipo de documento, que contiene una referencia a un DTD externo o declara un DTD interno.

La declaracin de tipo de documento inicia con

Esto muestra dos notaciones abreviadas. Ambas usan la secuencia de caracteres />, pero la diferencia es el espacio entre el nombre del elemento y la secuencia de caracteres de cierre. La versin larga no es deseable a comparacin de las dos primeras formas. Las primeras dos dejan ms claro que el elemento est vaco mientras que la versin larga no. 2.2.2.2 Elementos con slo elementos Elementos con slo elementos no contienen datos pero contienen otros elementos. La declaracin de un elemento con slo elemento describe el nombre del elemento junto con el contenido que puede contener. La forma general de la declaracin de un elemento con slo elementos es

El nombre representa el nombre del elemento como aparece en el documento XML, y el contenido representa lo que el elemento puede contener. Una declaracin de slo elementos puede contener Una lista ordenada de elementos Un elemento de una lista de elementos vlidos Un conjunto repetido de elementos Una mezcla de todas las anteriores

La lista ordenada de elementos es la ms sencilla de entender de los tres tipos de contenidos. Asumiendo que est modelando un documento XML que contiene informacin acerca de algunos libros, y quiere asegurarse de que18

contenga informacin bsica acerca de cada libro, como la editorial, fecha de publicacin, ISBN, ttulo, subttulo, autor y un comentario, en ese orden. Puede expresar una lista ordenada de elementos usando la siguiente sintaxis:

La declaracin especifica el nombre del elemento, el cul contiene los subelementos ordenados. Las comas indican que el listado es una lista ordenada. Como resultado, los subelementos deben aparecer en el orden especificado en el listado entre parntesis. Con el ejemplo de los libros quedara as: ]>

No muestra el DTD completo, porque lo que ve aqu est incompleto porque el DTD no especifica qu contenido tienen los elementos autor, isbn y los otros. Asumiendo que los subelementos no contienen ningn dato (son elementos vacos), el DTD completo se ver como esto:

El siguiente documento sera vlido usando el DTD previo:

19

Si quiere incluir el DTD junto con el documento XML, quedara as: ]>

En contraste con una lista ordenada de elementos, una seleccin de elemento lista una serie de elementos que un elemento puede contener. Sin embargo, el elemento puede contener slo uno de los elementos en la lista. Supongamos que est modelando un documento de inventario que contiene el precio de venta y el precio de compra, pero no quiere que los dos precios aparezcan para un tem dado. Quiere que aparezca un precio, pero slo el precio de venta o el precio de compra. El siguiente DTD modela el documento del inventario:

Si queremos incluir el DTD al inicio del documento XML, debemos ponerlo con la declaracin DOCTYPE: ]>

Esto introduce un conjunto de elementos repetidos. Aqu hay un vistazo ms cercano del elemento que lo declara:

La declaracin del elemento se ve muy similar a una lista ordenada que contiene slo un elemento, excepto que un signo ms sigue a la palabra item. Esto indica que el nombre del elemento que lo precede debe aparecer al menos una vez y puede aparecer cualquier nmero de veces. Puede usar varios smbolos para restringir el nmero de veces que los subelementos pueden aparecer, como se muestra en la siguiente tabla: Tabla de smbolos en declaraciones de elementos(sin (sin smbolo) smbolo) ? Signo de interrogacin * Asterisco + Smbolo ms () Parntesis | Pipe , Coma Indica que el elemento debe aparecer exactamente una sola vez. Indica que el elemento es opcional, puede aparecer una vez o ninguna. Indica que el elemento puede aparecer cero o ms veces. Indica que un elemento puede aparecer una o ms veces. Agrupa una lista de secuencia o de eleccin. Usado como parte de una lista de opciones, puede seleccionar un tem de la lista. Usada como parte de una secuencia, puede usar los elementos en la secuencia basado en sus restricciones individuales.

21

Estos smbolos pueden ser tiles para que el DTD sea ms complejo. Por ejemplo, los libros usualmente tienen una dedicatoria, prefacio, tabla de contenidos y uno o ms captulos. Cada captulo en un libro tiene al menos un encabezado y un prrafo, el cul puede contener texto, una figura, una tabla o una lista. En lugar de imponer esta estructura, puede agregar flexibilidad usando la siguiente declaracin:

Este fragmento de DTD indica que la dedicatoria es opcional, indicado por el smbolo , pero que debe haber un prefacio, una tabla de contenidos (tdc), y al menos un captulo. Cada captulo tiene un encabezado y uno o ms prrafos que pueden contener texto (#PCDATA), una figura, una tabla o una lista. Notemos que el elemento prrafo, adems de los subelementos que contiene, tambin contiene texto. Este tipo de elemento es referido como elemento de contenido mixto. 2.2.2.3 Elementos de Contenido Mixto Un elemento mixto puede contener datos y elementos. Este modelo es una extensin de los elementos que contienen slo elementos que tambin permite datos de texto. El siguiente cdigo declara algunos elementos mixtos: ]>

Esto declara un documento que contiene una coleccin de pases. Cada pas est hecho de texto (#PCDATA), y elementos de ubicacin y poblacin. #PCDATA puede aparecer ms de una vez en la declaracin de un elemento, como se mostr en el elemento ubicacin. Puede declarar un elemento de slo texto usando la forma mostrada en el elemento comentario.

22

2.2.2.4 Elementos ANY Un elemento ANY puede contener cualquier contenido. Declare el elemento as:

El elemento ANY no tiene ninguna estructura. Como resultado, debe evitar usarlo en sus propios DTDs. Su principal rol es actuar como comodn hasta que decida qu tipo de elemento debe contener.

2.2.3 Declaracin de AtributosLos atributos permiten aadir informacin adicional a los elementos de un documento. La principal diferencia entre los elementos y los atributos, es que los atributos no pueden contener subatributos. Se usan para aadir informacin corta, sencilla y desestructurada. Alfredo Reino Hans van Parijs Hallo Hans, hoe gaat het? ...

Otra diferencia entre los atributos y los elementos, es que cada uno de los atributos slo se puede especificar una vez, y en cualquier orden. En el ejemplo anterior, para declarar la lista de atributo de los elementos y haramos lo siguiente:

Las declaraciones de los atributos empiezan con "