El API JAXB

Este captulo explica las caractersticas bsicas de XML que usaremos en esta gua. Si ya entiendes el XML sencillo, puedes saltar al prximo captulo.

.Qu es XML?

XML viene de eXtensible Markup Language, un lenguaje desarrollado por el Consorcio de la World Wide Web (W3C). XML es realmente un metalenguaje; un lenguaje que describe otros lenguajes. XML permite que describamos otros lenguajes con el uso de las etiquetas extensibles, que agregan la estructura y el significado a los documentos. Aunque las etiquetas XML parecen etiquetas HTML, describen el contenido en vez del formato del texto que contienen. Ms importante, las etiquetas XML son extensibles, lo que significa que podemos definir nuestras propias etiquetas para describir mejor un contenido determinado.

Los dos partes de una tpica aplicacin XML son el Document Ttype Definition (DTD) y un conjunto de ejemplares de documentos XML, que son especificados por el DTD. El DTD es un esquema que contiene las definiciones de etiquetas que utilizamos en nuestros documentos XML especificando lo que puede contener un conjunto de etiquetas. Las DTDs definen y declaran etiquetas y especifican su contenido; por lo tanto, cada DTD es esencialmente una especificacin del lenguaje, y los documentos XML que un DTD especifica estn escritos en ese lenguaje de DTDs. La especificacin XML 1,0 no requiere un DTD; los analizadores de sintaxis pueden reconocer etiquetas en un documento XML y procesar los datos, pero sin un DTD no puede verificar su validez.

Al contrario que la especificacin XML 1,0, las facilidades de JAXB requieren que proporcionemos un DTD para construir una aplicacin JAXB. El compilador de esquema JAXB utiliza las restricciones especificadas en el DTD para construir las clases Java. Esta seccin discute solamente las caractersticas bsicas de los DTDs y los documentos XML que son utilizados en los ejemplos de esta gua.

.Definicin de Tipo de Documento

Una definicin de tipo de documento se conoce ms comunmente como DTD. Un DTD define la estructura y el contenido de los documentos XML que especifica. Un DTD consiste en una lista de declaraciones, cada una de los cuales define un bloque de construccin de un documento. Los declaraciones bsicas son declaraciones de elemento y declaraciones de atributo. Los declaraciones de elemento definen lo que puede contener un conjunto determinado de etiquetas en un documento XML. Los declaraciones de atributo acompaan a las declaraciones de elemento y proporcionan informacin adicional sobre el elemento.

.Declaracin de Elemento

Una declaracin de elemento comienza con <!ELEMENT y especifica el contenido de la etiqueta definida por este elemento. En XML, una etiqueta es la realizacin de un elemento en un documento. Por ejemplo, si book es un elemento, su etiqueta ser lt;book>.

Todos los documentos deben tener al menos un nodo raz, que no est contenido por ningn otro elemento declarado en el DTD del documento. Por ejemplo, supongamos que tenemos un DTD que especifica un libro. El DTD contiene una declaracin como esta:

<!ELEMENT book (titlepage, (prologue | preface), toc, chapter+, epilogue?, appendix*) >

La parte de la declaracin entre los parntesis externos especifica lo que puede contener un book y se llama el modelo contenido. Las comas se llaman conectores de secuencia; dictan que los elementos deben aparecer en el documento XML en el orden listado. En este caso, un book contiene por este orden: un ttulo, un prlogo o un prefacio, un ndice, uno o ms captulos, un epilogo opcional, y cero o ms apndices. La parte del modelo de contenido en el conjunto interno de parntesis representa un grupo modelo. Este grupo modelo utiliza un conector de eleccin, |, dictando que solamente uno de los elementos del grupo puede aparecer en un ejemplar del elemento padre en el documento XML. En este caso, cualquier ejemplar del elemento book puede contener solamente un prlogo o un prefacio, pero no ambos. +, *, y ? se llaman indicadores de ocurrencia. El + despus del captulo indica que estn permitidos uno o ms captulos. El ? despus del epilogo significa que el epilogo es opcional. El * despus del apndice indica que estn permitidos cero o ms de estos elementos. Los elementos que tienen * o + algunas veces se les llama repetibles.

Cada una de estas partes de contenido de un elemento book tambin son elementos, y tambin deben ser declarados:

<!ELEMENT titlepage (title, author) > 
<!ELEMENT prologue (#PCDATA) > 
<!ELEMENT preface (#PCDATA) > 
<!ELEMENT toc (chaptitle+, appendixtitle*) > 
<!ELEMENT chaptitle (#PCDATA) > 
<!ELEMENT appendixtitle (#PCDATA) >
<!ELEMENT title (#PCDATA) > 
<!ELEMENT author (#PCDATA)> 
<!ELEMENT chapter (chaptitle, body) > 
<!ELEMENT body (#PCDATA) > 
<!ELEMENT epilogue (#PCDATA) > 
<!ELEMENT appendix (appendixtitle, body) >

La notacin #PCDATA viene de Parseable Character DATA. PCDATA representa cero o ms caracteres. El contenido de cualquier elemento contiene PCDATA, otros elementos, o una combinacin de ambos. Un elemento cuyo contenido est definido para tener solamente PCDATA slo puede contener texto. Como dicho elemento es esencialmente el denominador comn ms bajo de un DTD: no puede ser dividido.

Como podemos ver desde estos ejemplos de declaraciones de elementos, especificar el contenido de un elemento puede ser una tarea complicada y propensa al error. Debemos tener cuidado de no especificar un contenido que pudiera ser ambiguo y confundir el analizador de sintaxis. Por ejemplo, si debemos incluir los conectores de eleccin y los conectores de secuencia en un grupo modelo, necesitamos utilizar parntesis para separar el contenido que usa una regla de conector del resto del grupo que utiliza el otro conector. Este caso se muestra en el declaracin siguiente de elemento en el cual el grupo (prologue | preface) utiliza un conector de eleccin, pero el resto de los modelos de grupo usan un conector de secuencia.

<!ELEMENT book (titlepage, (prologue | preface), toc, chapter+, epilogue?, appendix*) >

.Declaracin de Atributo

Al contrario que las declaraciones de elemento, las declaraciones de atributo son opcionales en un DTD. Las declaraciones de atributos acompaan a las declaraciones de elemento y proporcionan informacin adicional sobre el elemento. Por ejemplo, podemos aadir un atributo al elemento book que describa su tipo:

<!ELEMENT book (titlepage, (prologue | preface), toc, chapter+, epiloque?, appendix*) > 
<!ATTLIST book type ( fiction | travel | history | biography ) #REQUIRED >

Un declaracin de atributo incluye el nombre del elemento al cual se aplica. Despus del nombre del elemento, se declara una lista con los nombres del atributo. En este caso, hay solamente un atributo, que se llama type. Despus del nombre del atributo estn los posibles valores a los cuales se puede fijar el atributo. En este caso, el tipo de libro puede ser uno de cuatro tipos. La palabra clave #REQUIRED indica que el atributo del tipo debe ser utilizado siempre cuando el elemento book se utiliza en un documento XML. Si el atributo type fuera opcional, #REQUIRED sera substituido por #IMPLIED.

La siguiente seccin explica como se realiza est declaracin de atributo en un documento XML.

.Documentos XML

Un documento XML es un fichero de texto que contiene las etiquetas de marcas XML, que son pedazos de texto rodeados de una etiqueta de inicio y una etiqueta de fin. Las etiquetas de inicio y de cierre y el texto encerrado conforman un elemento, que es declarado en un DTD. Por ejemplo, consideremos nuestra declaracin anterior del elemento chaptitle:

<!ELEMENT chaptitle (#PCDATA) >

En un documento XML, esta declaracin podra representarse como:

<chaptitle>The Early Years</chaptitle>

Estas etiquetas XML parecen similares a las etiquetas HTML, pero son diferentes de forma significativa: las etiquetas XML son extensibles e indican el significado del texto incluido dentro de ellas. Por ejemplo, no podramos definir una etiqueta <chaptitle> en HTML; deberamos utilizar las etiquetas definidas ya en la especificacin HTML, y un conjunto de etiquetas HTML puede definir solamente el formato del texto que incluye. La etiqueta <chaptitle> puede indicar a un analizador de sintaxis que la informacin contenida dentro de ella es un ttulo de un captulo, lo que permite que hagamos muchas ms cosas con sus datos, incluyendo buscar y archivar. Si tenemos un DTD que delare un elemento chaptitle, tambin podemos restringir qu tipos de datos puede contener un chaptitle.

Este documento XML est en relacin con el DTD descrito en la seccin Definicin de Tipo de Documento:

<!DOCTYPE Duke SYSTEM Book.DTD> 
<book type=biography> 
    <titlepage> 
        <title>Duke: My Life and Times</title> 
        <author>Duke</author> 
    </titlepage> 
    <prologue>I dedicate this book to ...</prologue> 
    <toc> 
        <chaptitle>The Early Years</chaptitle> 
        <chaptitle>The Later Years</chaptitle> 
    </toc> 
    <chapter> 
        <chaptitle>The Early Years</chaptitle> 
        <body>Blah blah blah</body> 
    </chapter> 
    <chapter>
        <chaptitle>The Later Years</chaptitle> 
        <body>Blah blah</body> 
    </chapter> 
</book>

La declaracin DOCTYPE de la parte superior del documento dice al analizador de sintaxis que el ejemplar del documento se debe adherir a las reglas definidas en el DTD book. El elemento book tiene un tipo de biografa, indicando que este documento XML representa un libro que es una biografa. El elemento raz, el elemento book debe encerrar todo el documento, lo que significa que el documento debe terminar con </libro>, y no se puede contener ninguno otro elementos fuera de las etiquetas del elemento book. Observa que el documento contiene ms de un elemento chapter. En el DTD book, el signo ms que sigue a la declaracin de elemento chapter indica que un book puede contener uno o ms captulos. Observa tambin que este documento no contiene ningn eplogo. El signo de interrogacin despus de la declaracin de epilogue especifica que un eplogo es opcional.

Despus de esta breve leccin de XML, deberamos poder construir una sencilla aplicacin JAXB.

COMPARTE ESTE ARTÍCULO

ENVIAR A UN AMIGO
COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN GOOGLE +
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO

¡SÉ EL PRIMERO EN COMENTAR!
Conéctate o Regístrate para dejar tu comentario.