Programación en castellano
-Tutoriales

El API JAXB


Antes de Empezar: XML Básico

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.

 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad
Mantenida por: Claudio y Dani.

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: jugar gratis | amor | navidad 2009 | registro de dominios | servidores dedicados
más internet: comprar | gratis | posicionamiento en buscadores | decoración libre | gifs animados