El API JAXB

Este cap�tulo explica las caracter�sticas b�sicas de XML que usaremos en esta gu�a. Si ya entiendes el XML sencillo, puedes saltar al pr�ximo cap�tulo.

.��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. M�s 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 t�pica aplicaci�n 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 especificaci�n del lenguaje, y los documentos XML que un DTD especifica est�n escritos en ese lenguaje de DTDs. La especificaci�n 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 especificaci�n XML 1,0, las facilidades de JAXB requieren que proporcionemos un DTD para construir una aplicaci�n JAXB. El compilador de esquema JAXB utiliza las restricciones especificadas en el DTD para construir las clases Java. Esta secci�n discute solamente las caracter�sticas b�sicas de los DTDs y los documentos XML que son utilizados en los ejemplos de esta gu�a.

.�Definici�n de Tipo de Documento

Una definici�n de tipo de documento se conoce m�s 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 construcci�n de un documento. Los declaraciones b�sicas 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 acompa�an a las declaraciones de elemento y proporcionan informaci�n adicional sobre el elemento.

.�Declaraci�n de Elemento

Una declaraci�n de elemento comienza con <!ELEMENT y especifica el contenido de la etiqueta definida por este elemento. En XML, una etiqueta es la realizaci�n 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 ra�z, que no est� contenido por ning�n otro elemento declarado en el DTD del documento. Por ejemplo, supongamos que tenemos un DTD que especifica un libro. El DTD contiene una declaraci�n como esta:

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

La parte de la declaraci�n entre los par�ntesis 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 t�tulo, un pr�logo o un prefacio, un �ndice, uno o m�s cap�tulos, un epilogo opcional, y cero o m�s ap�ndices. La parte del modelo de contenido en el conjunto interno de par�ntesis representa un grupo modelo. Este grupo modelo utiliza un conector de elecci�n, |, 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 pr�logo o un prefacio, pero no ambos. +, *, y ? se llaman indicadores de ocurrencia. El + despu�s del cap�tulo indica que est�n permitidos uno o m�s cap�tulos. El ? despu�s del epilogo significa que el epilogo es opcional. El * despu�s del ap�ndice indica que est�n permitidos cero o m�s 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 tambi�n son elementos, y tambi�n 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 notaci�n #PCDATA viene de Parseable Character DATA. PCDATA representa cero o m�s caracteres. El contenido de cualquier elemento contiene PCDATA, otros elementos, o una combinaci�n de ambos. Un elemento cuyo contenido est� definido para tener solamente PCDATA s�lo puede contener texto. Como dicho elemento es esencialmente el denominador com�n m�s 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 elecci�n y los conectores de secuencia en un grupo modelo, necesitamos utilizar par�ntesis 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 declaraci�n siguiente de elemento en el cual el grupo (prologue | preface) utiliza un conector de elecci�n, pero el resto de los modelos de grupo usan un conector de secuencia.

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

.�Declaraci�n de Atributo

Al contrario que las declaraciones de elemento, las declaraciones de atributo son opcionales en un DTD. Las declaraciones de atributos acompa�an a las declaraciones de elemento y proporcionan informaci�n adicional sobre el elemento. Por ejemplo, podemos a�adir 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 declaraci�n de atributo incluye el nombre del elemento al cual se aplica. Despu�s del nombre del elemento, se declara una lista con los nombres del atributo. En este caso, hay solamente un atributo, que se llama type. Despu�s del nombre del atributo est�n 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 ser�a substituido por #IMPLIED.

La siguiente secci�n explica como se realiza est� declaraci�n 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 declaraci�n anterior del elemento chaptitle:

<!ELEMENT chaptitle (#PCDATA) >

En un documento XML, esta declaraci�n podr�a 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 podr�amos definir una etiqueta <chaptitle> en HTML; deber�amos utilizar las etiquetas definidas ya en la especificaci�n 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 informaci�n contenida dentro de ella es un t�tulo de un cap�tulo, lo que permite que hagamos muchas m�s cosas con sus datos, incluyendo buscar y archivar. Si tenemos un DTD que delare un elemento chaptitle, tambi�n podemos restringir qu� tipos de datos puede contener un chaptitle.

Este documento XML est� en relaci�n con el DTD descrito en la secci�n Definici�n 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 declaraci�n 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 biograf�a, indicando que este documento XML representa un libro que es una biograf�a. El elemento ra�z, 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 m�s de un elemento chapter. En el DTD book, el signo m�s que sigue a la declaraci�n de elemento chapter indica que un book puede contener uno o m�s cap�tulos. Observa tambi�n que este documento no contiene ning�n ep�logo. El signo de interrogaci�n despu�s de la declaraci�n de epilogue especifica que un ep�logo es opcional.

Despu�s de esta breve lecci�n de XML, deber�amos poder construir una sencilla aplicaci�n JAXB.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO