XML y java

download XML y java

of 187

Transcript of XML y java

  • 8/4/2019 XML y java

    1/187

    ndice TutorJavML y Java

    Entender XML y los APIs Java XML

    Introducin rpida al XMLr

    XML y las Especificaciones Relacionadasr

    Introducin a los APIsr

    Disear una Estructura de XMLr

    q

    Escribir XML

    Escribir un Sencillo Fichero XMLr

    Analizar un Fichero XML con el Analizador SAXr

    Aadir Manejadores de Eventos Adicionalesr

    Manejar Errores con el Analizador Nonvalidatingr

    Sustituir e Insertar Textor

    Crear una Definicin de Tipo de Documento (DTD)r

    Efectos del DTD sobre el Analizador Nonvalidatingr

    Definir Atributos y Entidades en un DTDr

    Referenciar Entidades Binariasr

    Usar el Analizador Validatingr

    Definir Parmetros de Entidad y Secciones Condicionalesr

    Analizar el DTD Parametrizador

    Usar un LexicalEventListenerr

    Usar el DTDHandler y EntityResolverr

    q

    XML y el Document Object Model (DOM)

    Generar un DOM desde Datos XMLr

    Generar XML desde una estructura de Datos Arbitrariar

    Mostrar una Herencia DOMr

    Examinar la Estructura de un DOMr

    Construir un JTree desde un DOMr

    Crear y Manipular un DOMr

    Usar Namespacesr

    q

    Informacin Adicional

    Esquemas de Codificacin Javarq

  • 8/4/2019 XML y java

    2/187

    Desarrollar Soluciones XML con Tecnologa JavaServer Pagesq

    Golsario XML - Javaq

    zito

    mailto:[email protected]:[email protected]
  • 8/4/2019 XML y java

    3/187

    Entender XML y los APIs Java XML

    sta seccin describe el "Extensible Markup Language (XML)", sus especificacionelacionadas, y los APIs para manipular ficheros XML.

    Qu Aprenderemos?

    sta seccin del tutorial cubre los siguientes tpicos:Rpida Introducin a XML nos muestra como est estrucutrado un fichero Xy nos da algunas ideas sobre cmo usar XML

    1.

    XML y las Especificaciones Relacionadas nos gua a travs de los acrnimosque rodean el XML estndard.

    2.

    Introduccin a los APIs nos ofrece una vista de alto nivel de JAXP y los APIasociados.

    3.

    Disear una Estructura de Datos XML nos ofrece trucos de diseo quepodemos usar para configurar una estructura de datos XML.

    4.

    zito

    mailto:[email protected]:[email protected]
  • 8/4/2019 XML y java

    4/187

    Rpida Introduccin a XML

    sta pgina cubre la parte bsica de XML. El objetivo es ofrecernos la suficienteformacin para empezar, por eso que entendamos que es XML es importante.

    Aprenderemos ms sobre XML en secciones posteriores de este tutor).escribiremos las mayores caractersticas que hacen de XML un gran sistema demacenamiento e intercambio de informacin, y nos ofrece una idea general demo se puede usar XML. Esta seccin del tutorial cubre:

    Qu es XML?q

    Por qu es importante el XML?q

    Cmo podemos usar XML?q

    Qu es XML?

    ML es un lenguaje de marcas basado en texto que se est convirtiendopidamente en el estndard para el intercambio de datos en la Web. Igual que MTL, identificamos los datos usando etiquetas (identificadores encerrados entrngulos, como: ). Colectivamente, las etiquetas son conocidas como

    marcas". contrario que las etiquetas HTML, las etiquetas XML nos dicen lo que significas datos, en vez de cmo se mostrarn. Donde las etiquetas HTML dicen algo

    omo "muestra este dato en negrita" (...), una etiqueta XML acta con nombre de ampo en nuestro programa. Poner una etiqueta a un dato que loentifica (por ejemplo: ...).

    e la misma forma que definimos los nombres de los campos para una estructue datos, podemos usar cualquier etiqueta XML que tenga sentido para unaplicacin dada. Aunque, naturalmente, para que mltiples aplicaciones usen el

    ismo dato XML, tienen que estar de acuerdo con los nombres de etiquetas quetentan usar.

    qu tenemos un ejemplo de algunos datos XML que podramos usar para unaplicacin de mensajes:message>

    [email protected]

    [email protected]

    XML Is Really Cool

    http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-http://-/?-
  • 8/4/2019 XML y java

    5/187

    How many ways is XML cool? Let me count the ways...

    /message>

    ota: A lo largo de este tutorial usaremos texto en negrita para iluminar las cosobre las que queremos llamar tu atencin. XML no requiere que nada est enegrita!

    as etiquetas de este ejemplo identifican un mensaje completo, las direccionesrigen y destino, el subject, y el texto del mensaje. Como en HTML, la etiquetato> tiene su correspondiente etiqueta final: . Los datos entre la etiquet

    u correspondiente etiqueta final definen un elemento de los datos XML. Observmbin, que el contenido de la etiqueta estn enteramente contenido

    entro del mbito de las etiquetas ... Es esta habilide que una etiqueta pueda conteneder otras etiquetas la que le da a XML laabilidad de representar estructuras de datos heredadas.

    e nuevo, como en HTML, los espacios en blanco son esencialmente irrelevanteodemos formatear los datos para poder leerlos y todava poder procesarloscilmente con un programa. Sin embargo, al contrario que en HTML, en XMLodramos buscar fcilmente un conjunto de datos para mensajes que contengaool" en el subject, porque las etiquetas XML identifican el contenido de los dat

    n vez de especificar su reprsentacin.

    tiquetas y Atributos

    as etiquetas tambin pueden contener atributos -- informacin adicional incluid

    omo parte de la propia etiqueta, dentro de los ngulos de la etiqueta. El siguieemplo muestra una estructura de mensaje de e-mail que usa atributos para loampos "to", "from", y "subject":message to="[email protected]" from="[email protected]"

    subject="XML Is Really Cool">

    How many ways is XML cool? Let me count the ways...

    /message>

    omo en HTML, al nombre del atributo le sigue un signo igual y el valor deltributo, y varios atributos se separan por espacios. Sin embargo, al contrario qTML, en XML las comas entre atributos no se ignoran -- si estn presentes,eneran un error.

    omo podramos disear una estructura de datos como igualmenten usando atributos o etiquetas, puede tomar una gran cantidad de tiempo

    maginarnos cual es el mejor diseo para nuestros propsitos. La ltima parte dste tutorial, Disear una Estructura de Datos XML, incluye ideas para ayudarnoecidir cuando usar atributos y cuando etiquetas.

  • 8/4/2019 XML y java

    6/187

    tiquetas Vacas

    na diferencia realmente grande entre XML y HTML es que un documento XMLempre tiene que estar bien formateado. Hay muchas reglas que determinanuando un documento est bien-formateado, pero una de las ms importantes eue cada etiqueta tiene una etiqueta de cierre. Por eso, en XML, la etiqueta .ota: Otro aspecto importante de un documento bien-formateado es que todastiquetas estn completamente anidadas. Por eso podemos tenermessage>......, pero nuncamessage>.......

    gunas veces, tiene sentido tener etiquetas que existen por s mismas. Poremplo, podramos querer aadir una etiqueta "flag" que marque un mensaje

    omo importante. Una etiqueta que no encierra ningn contenido, por eso es

    ontenida como una "etiqueta vaca". Podemos crear una etiqueta vacarminndola con/ > en lugar de >. Por ejemplo, el siguiente mensaje contienecha etiqueta:message to="[email protected]" from="[email protected]"

    subject="XML Is Really Cool">

    How many ways is XML cool? Let me count the ways...

    /message>

    ota: La etiqueta vaca nos evita tener que codificar para podner un documeto bien-formateado. Podemos controlar qu etiquetas estn

    ermitidas creando un Documento de Definicin de Tipos DTD. Si existe un DTDocumento puede contener cualquier clase de etiqueta que querramos, mientraue el documento est bien formateado.

    omentarios en Ficheros XML

    os comentarios XML se parecen a los comentarios XML:message to="[email protected]" from="[email protected]"

    subject="XML Is Really Cool">

    How many ways is XML cool? Let me count the ways...

    /message>

    Prlogo XML

  • 8/4/2019 XML y java

    7/187

    ara completar este viaje introductorio a XML, observa que un fichero XML siemmpieza con un prlogo. El prlogo mnimo contiene una declaracin que identifdocumento como un documento XML, como esta:

    ?xml version="1.0"?>

    a declaracin tambin podra contener informacin adicional, como esta:?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

    a declaracacin XMl es esencialmente la misma que la cabecera HTML, xcepto en que usa y contiene los siguientes atributos:ersion

    Identifica la versin del lenguaje de marcas XML usada en los datos. Esteatributo no es opcional.

    ncoding

    Identifica el juego de caracteres usado para codificar los datos. "ISO-8859es "Latin-1" el conjunto de caracteres Western European y del lenguajeIngls. (El valor por defecto es compresin Unicode: UTF-8.)

    tandalone

    Dice si este documento referencia o no a una entidad externa o a unaespecificacin de datos externa. Si no hay referencias externas "yes" es elvalor apropiado

    prlogo tambin puede contener definiciones de entidades (tems que sonsertados cuando los referenciamos dentro del documento) y especificaciones qcen qu etiquetas son vlidas en el documentos, ambas declaradas en unaefinicin de Tipo de Documento (DTD) que puede ser definido directamente

    entro del prlogo, as como con punteros a ficheros de especificacin externosota: La declaracin es realmente opcional. Pero es una buena idea incluirlampre que creemos un fichero XML. La declaracin debera tener un nmero deersin, como mnimo, e idealmente tambin la codificacin. Este estndardmplifica las cosas si en el futuro se extiende el estndard XML, y si los datosempre necesitan ser localizados en diferentes regiones geogrficas.

    strucciones de Procesamiento

    n fichero XML tambin puede contener instruciones de procesamiento que ofreomandos o informacin para una aplicacin que est procesando los datos XMLstas instrucciones tienen el siguiente formato:

    onde fuente es el nombre de la aplicacin que se espera que haga elrocesamiento, e instrucciones es una cadena de caracteres que incluye laformacin o comandos para que los precese la aplicacin.

    omo las instrucciones son especficas de la aplicacin, un fichero XML podra

  • 8/4/2019 XML y java

    8/187

    cluir mltiples instrucciones de procesamiento que le digan a diferentesplicaciones que hagan cosas similares, aunque de diferente forma. El fichero Xara una presentacin, por ejemplo, podra tener instrucciones de procesamientue permitieran al orador especificar una versin tcnica o de nivel exclusivo deresentacin. Si se utilizaran varios programas de presentacin, el programaodra necesitar mltiples versiones de las instrucciones de precesamiento (aunera mejor si dichas aplicacioens reconocieran instrucciones estndard).

    ota: El nombre de fuente "xml" (en cualquier combinacin de letras maysculinsculas) est reservado por los estndards XML. En un sentido, la declaracis una instruccin de procesamiento que fija este estndard. (Sin embargo, cuaabajemos ms adelante con el analizador, veremos que el mtodo para manejstrucciones de procesamiento nunca ve la declaracin.)

    Por qu es importante el XML?

    ay un gran nmero de razones para aceptar el uso de XML. Esta seccin listanos pocos de los ms prominentes.

    exto Plano

    omo XML no est en formato binario, podemos crear y editar ficheros conualquiera de los editores de texto estndard a un entorno de desarrollo visual.sto hace fcil la depuracin de nuestros programas, y hace til el almacenamiee pequeas cantidades de datos. En el otro lado del expectro, una parte del XMon bases de datos hace posible almacenar grandes cantidades de datos de formficiente. Por eso XML proporciona escalabilidad para cualquier cosa, desde

    equeos ficheros de configuracin a repositorios de datos de grandes compaiaentificacin de Datos

    ML dice que clase de datos tenemos, no cmo se muestran. Como las etiquetae marca identifican la informacin y dividen los datos en partes, un pograma dmail puede procesarlo, un programa de bsqueda puede buscar los mensajesnviados a una persona paticular, y un libro de direcciones puede extraer laformacin de la direccin del resto del mensaje. Brevemente, como las diferenartes de la informacin han sido identificadas, pueden ser usadas de diferentes

    rmas por diferentes aplicaciones.stilismo

    uando el estilo es importante, la hoja de estilos estndad, XSL, nos dicta cmoortar los datos. Por ejemplo, la hoja de estilo para:to>[email protected]

    e puede decir:Empieza una nueva lnea.1.

  • 8/4/2019 XML y java

    9/187

    Muestra "To:" en negrita, seguido por un espacio2.Muestra los datos de destino.3.

    o que produce:o: you@yourAddress

    or supuesto, podramos haber hecho lo mismo con HTML, pero no podramosrocesar los datos con programas de bsqueda y programas de extraccin derecciones o parecidos. Ms importante,como XML est libre de estilo, podemossar una hoja de estilo completamente diferente para producir salida en postcripEXT, PDF, o algn nuevo formato que no haya sido inventado todava.

    eutilizacin en Lnea

    no de los aspectos ms bonitos de los documentos XML es que pueden estarompuestos por entidades separadas. Podemos hacer esto con HTML, pero slonlazando a otros documentos. Al contrario que HTML, las entidades XML puedeer incluidas "en lnea" en un documento. Las secciones incluidas parecen una

    arte normal del documento -- podemos buscar en el documento completo a la descargarlo en una sola pieza. Esto nos permite modularizar nuestrosocumentos sin recurrir a los enlaces.

    nlazabilidad

    racias a HTML, la habilidad de definir enlaces entre documentos es ahora unaecesidad. La siguiente seccin de este tutorial, XML y Aspectos Relacionados,escribe la iniciativa de especificacin de enlace. Esta iniciativa nos permite defios formas de enlaces, enlaces de varias fuentes, enlaces "expandibles" (donde

    ulsar sobre un enlace hace que la informacin fuente aparezca en lnea), ynlaces entre dos documentos existentes que estn definidos en un tercero.

    cilmente Procesable

    omo se mencion antes, la notacin normal y consistente hace fcil construir urograma y procesar datos XML. Por ejemplo, en HTML una etiqueta puedstar delimitada por , otra , , o . Esto hace larogramacin algo difcil. Pero en XML, la etiqueta siempre debe tener unrminador , o ser definida como una etiqueta . Esta restriccin e

    na parte crtica de las restricciones que crean un documento XMLen-formateado. (De otra forma, el analizador XML no podr leer los datos). Yomo XML es un estndard neutral a los vendedores, podremos elegir entre varnalizadores XML, cualquiera de ellos hace el trabajo de procesar los datos XML

    erencia

    nalmente, los documentos XML se benefician de sus estructura de herencia. Esstructuras son, en general, rpidas de acceder porque podemos taladrar la par

  • 8/4/2019 XML y java

    10/187

    ue necesitemos, como pasando a travs de una tabla de contenidos. Tambin cil, redistribruir, porque cada pieza est delimitada. Por ejemplo, en unocumento, podramos mover una cabecera a una nueva localizacin y arrastrardo lo que tenga debajo junto con ella, en lugar de tener que bajar por la pagin

    ara hacer una nueva seleccin, cortarla, y pegar la seleccin en una nuevaosicin.

    Cmo Podemos usar XML?

    ay varias formas bsicas para hacer uso del XML:Proceso de datos tradicionales, donde XML codifica los datos para que losprocese un programa.

    q

    Programacin dirigida a documento, donde los documentos XML soncontenedores que construyen interfaces y aplicaciones para componentesexistentes.

    q

    Archivo -- el fundamento para la programacin dirigida a documento, dondversin personalizada de un componente es grabada (archivada) para quepueda ser usar ms tarde.

    q

    Union, donde el DTD o esquema que define una extructura de datos XML susa para generar automticamente una porcin importante de la aplicacinque eventualmente procesa esos datos.

    q

    roceso Tradicional de Datos

    ML se convierte rpidamente en una eleccin de representacin para la red. Esrrorifico cuando se usa en conjuncin con programas de la plataforma Java

    entrados en red que envan y recuperan informacin. Por ejemplo, una aplicaciiente/servidor, podra transmitir datos XML codificados entre el cliente y elervidor.

    n el futuro, XML es la respuesta potencial para el intercambio de datos en todauerte de transaciones, siempre que ambos lados estn de acuerdo con las marusar. (Por ejemplo, un programa de e-mail debera esperar ver etiquetas

    amadas y , o y ?) Laecesidad de estndares comunes generar muchos esfuerzos de estandarizacispecificos de la industria en los aos venideros. Mientras tanto, los mecanismo

    ue nos permiten "traducir" las etiquetas en un documento XML son importanteichos mecanismos incluyen proyectos como la iniciativa RDF, que define "metatiequetas", y la especificacin XSL, que nos permite traducir etiquetas XML entras etiquetas XML.

    rogramacin Dirigida a Documento(DDP)

    a ms nueva aproximacin a usar XML es para construir un documento queescribe cmo debera verse la pgina de una aplicacin. El documento, en vez

  • 8/4/2019 XML y java

    11/187

    er mostrado simplemente, consiste en referencias a componentes del interfacesuario y componentes de la lgica de negocio que son "enganchados junto" parear una aplicacin al vuelo.

    or supuesto, tiene sentido utilizar la plataforma Java para dichos componentesanto los Beans JavaTM para interfaces como los JavaBeans EnterpriseTM para lagica del negocio puede usarse para construir dichas aplicaciones. Aunque ninge los esfuerzos hechos hasta ahora ha dado unresultado comercial, la mayora

    abajo preliminiar ya est hecho.ota: El lenguaje Java tambin es excelente para escribir herramientas derocesamiento XML que sean tan portables como el propio XML. Varios editoressuales de XML han sido escritos usando la plataforma Java. Para ver una lista stos editores, y otras herramientas puedes ir a la pgina SGML/XML Web Page

    nin

    na vez que hemos definido la estructura de datos XML usando un DTD o uno d

    s esquemas estndars, una gran parte del procesamiento que necesitamos yado definido. Por ejemplo, si el esquema dice que los datos de texto en unemento debe seguir uno de los formatos de datos reconocidos, se haefinido un aspecto del criterio de validacin para los datos -- slo queda escribdigo. Aunque una especificacion DTD no puede ir al mismo nivel de detalle, unTD (igual que un esquema) proporciona una gramtica que le dice qustructuras de datos pueden ocurrir, en que secuencias. Estas especificaciones ncen cmo scribir cdigo de alto nivel que procese los elementos de datos.

    ero cuando la estructura de datos (y posiblemente el formato) est

    ompletamente especifiaco, el cdigo que necesitamos para procesarlo puedecilmente ser generado de forma automtica. Este proceso es conocido comonin -- crear clases que reconocen y precesan diferentes elementos de datosediante el procesamiento de la especificacin que define dichos elementos. Cotiempo se va, deberiamos encontrar que estamos usando la especificacin de

    atos para generan cantidades importantes de cdigo, por eso podemosnfocarnos en la programacin que es nica para nuestra aplicacin.

    rchivo

    mecanismo bsico para grabar informaicn se llama archivo. Archivamos unomponente escribindolo en un canal de salida de forma que podamos reutilizas tarde. Entonces podemos leerlo y ejemplarizarlo usando los parmetros

    rabados. (Por ejemplo, si grabamos un componente tabla, sus parmetrosodran ser el nmero de filas y columnas a mostrar). Los componentes archivamben pueden ser pasados a travs de la Web y usados de muchas formas.

    n embargo, cuando los componentes son archivados en forma binaria, haygunas limitaciones sobre los tipos de cambos que podemos hacerle a las clase

    http://www.oasis-open.org/cover/http://www.oasis-open.org/cover/
  • 8/4/2019 XML y java

    12/187

    ubyacentes si queremos retener la compatibilidad con versiones grabadasrviamente. Si pudieramos modificar la versin archivada para reflejar el cambe solucionara el problema. Pero esto es dficil de hacer con un objeto binario.ichas consideraciones han lanzado un gran nmero de investigaciones sobre eso de XML para el archivo. Pero si el estado de un objeto es grabado en formatxto usando XML, cualquier cosa en l puede modificarse tan fcilmente como

    ecir: "Busca y Reemplaza".

    formato XML basado en texto tambin hace sencillo la transferencia de objetontre aplicaciones escritas en diferentes lenguajes. Por todas estas razones, elrchivo basado en XML se convertir en una fuerza importante en un futuro nouy lejano.

    umario

    ML es muy sencillo y muy flexible. Tiene muchos usos por descubrir -- slostamos empezando a araar la superficie de su potencial. Es el fundamento pana gran cantidad de estndards, proporcionando un lenguaje comn queferentes sistemas de ordenadores puedan usar para intercambiar datos unos ctros.

    zito

    mailto:[email protected]:[email protected]
  • 8/4/2019 XML y java

    13/187

    XML y las Especificaciones Relacionadas

    hora que ya tenemos un entendimiento bsico de XML, tiene sentido ver unatroducin de alto nivel de los distintos acrnimos relacionados con XML y qugnifican. Hay mucho trabajo alrededor del XML, por eso hay mucho que apren

    os APIs actuales para acceder a documentos XML tanto serialmente como enodo de acceso aleatorio son, respectivamente SAX y DOM. Las especificacione

    ara segurarnos la validez de los documentos XML son DTD (El mecanismoriginal, definido como parte de la especificacin XML) y varios esquemas

    ropuestos (nuevos mecanismos que usan sntaxis XML para hacer el trabajo deescribir los criterios de validacin). Otras futuras caractersticas estndards qustan cerca de completarse incluyen el estndard XSL -- un mecanismo paraonfigurar traduciones de documentos XML (por ejemplo a HTML u otro XML) yara dictar cmo se mostrarn los documentos. Otro esfuerzo cerca de terminars la especificacin del "Lenguaje de Enlaces XML" (XLL), que permite los enlacentre documentos XML.

    stas han sido las mayores iniciativas con las que querremos familiarizarnos. Eseccin tambin descubre otras proposiciones interesantes, incluyendo el

    stndard de aspecto HTML, XHTML, y el meta-estndard para describir laformacin que contienen los documentos XML, RDF. Tambin cubre la iniciative Espacios de Nombrado XML que promueve la reutilizacin modular de losocumentos XML evitando la colisin de nombres.

    arios de los esquemas XML propuestos tambin se cubren aqu, junto con unosuevos esfuerzos por usar XML para control remoto de escritorios (DMTF) yervidores de documentos (WebDAV).

    nalmente, hay un nmero de interesantes estndars y proposiciones destndards que se construyen sobre XML, incluyendo el "Lenguaje Sincronizado ntegracin Multimedia" (SMIL), "Lenguaje de Marcas Matemtico" (MathML),Grficos de Vector Escalables" (SVG), y DrawML.

    resto de esta seccin nos ofrece una descripcin ms detallada de estasiciativas. Para hacer la cosa ms sencilla est dividida en:

    Recomendaciones W3Cq

    Recomendaciones Propuestas W3Cq

  • 8/4/2019 XML y java

    14/187

    Borradores de Trabajo W3Cq

    Notas W3Cq

    Estndards que Construyen XMLq

    jearemos los trminos una vez, para que sepamos que hay aqu, yantendremos cerca una copia de este documento para poder referirnos a ellaempre que veamos uno de estos trminos en algo que estemos leyendo. Muy

    ronto, nos habremos aprendido todos estos trminos, y podremos "conversar"obre XML!

    ecomendaciones W3C

    as "Recomendaciones" W3C son, en realidad, la forma final de las especificacioeneradas por el W3C. Es una "recomendacin", porque no se imponen a nadie,ero no es porque la especificacin estuviera habierta para posteriores discusionrevisiones. El caso est cerrado. Esta es la especificacin que implementaremoara conformar el estndard.

    AXPI sencillo para XML

    ste API era realmente un producto de colaboracin de la lista de correo XML-Dn vez de un producto del W3C. Se ha incluido aqu porque tiene las mismasaractersticas "finales" que una recomendacin de W3C.

    ambin podemos pensar en este estndard como el protocolo de "acceso serieara XML. Este es el mecanismo ms rpido de ejecutar que usaremos para lee

    scribir datos XML en un servidor, por ejemplo. Tambin es llamado un protocolrigido por eventos, porque la tcnica para registrar nuestro manejador con unnalizador SAX, despus de que el analizador invoque nuestros mtodos deetrollamada siempre que vea una nueva etiqueta XML (o encuentre un error, ouiera decirnos algo ms).

    ara ms informacin sobre el protocolo SAX, puedes ver Acceso Serie con el APmple para XML.

    OM

    odelo de Objeto de Documento

    ste protocolo convierte un documento XML en una coleccin de objetos en nuerograma. Entonces podemos manipular el modelo del objeto de cualquier formue tenga sentido. Este mecanismo tambin es conocido como el protocolo deacceso aleatorio", porque podemos visitar cualquier parte de los datos enualquier momento. Podemos modificar los datos, eliminarlos, o insertar nuevosatos. Para ms informacin sobre la especificacin DOM, puedes ver Manipularontenidos de Documentos con el Modelo de Objeto de Documento.

    http://usuarios.tripod.es/Ozito/xml/sax/index.htmlhttp://usuarios.tripod.es/Ozito/xml/sax/index.htmlhttp://usuarios.tripod.es/Ozito/xml/sax/index.htmlhttp://usuarios.tripod.es/Ozito/xml/sax/index.html
  • 8/4/2019 XML y java

    15/187

    TDefinicin de Tipo de Documento

    a especificacin DTD realmente forma parte de la especificacin XML, en vez dena entidad separada. Por otro lado, es opcional -- podemos escribir un documeML sin l. Y hay un nmero de proposiones de esquemas que ofrecen alternatis flexibles. Por eso la tratamos aqu como si fuera una especificacin separad

    n DTD especifica los tipos de etiquetas que se pueden incluir en nuestroocumento XML, y la preparacin de dichas etiquetas. Podemos usar el DTD parsegurarnos de que no creamos una estructura XML invlida. Tambin podemossarlo para asegurarnos de que la estructura XML que estamos leyendo (o que vser enviada por la red) es de echo vlida.

    esafortunadamente, es dificil especificar un DTD para un documento complejo rma que evite todas las combinaciones invlidas y permita las vlidas. Por eso

    onstruir un DTD es como un arte. El DTD puede existir en el inicio del documen

    omo parte del prlogo. Tambin puede existir como una entidad separada, ouede ser dividido entre el prlogo del documento y una o ms entidadesdicionales.

    n embargo, mientras que el mecanismo DTD fue el primer mtodo paraspecificar una estructura vlida de documento, no fue el ltimo. Se hanventando nuevos esquemas de especificaciones. Aprenderemos sobre ellos enomento. Para ms informacin puedes ver Definir un Tipo de Documento.

    DF

    arco de Descripcin de RecursosDF es un estndard propuesto para definir datos sobre datos. Usado enonjuncin con la especificacin XHTML, por ejemplo, o con pginas HTML, RDFodra ser usado para describir el contenido de las pginas. Por ejemplo, si nuesavegador almacena nuestra informacin de ID como FIRSTNAME, LASTNAMMAIL, una descripcin RDF podra hacer posible transferir datos a una aplicaciue quisiera NAME y EMAILADDRESS. Piensalo! algn da podramos no tenerue teclear nuestro nombre y direccin en cada web site que visitemos! Para vetima informacin sobre RDF, puedes ver la pginattp:/ / www.w3.org/ TR/ PR-rdf-syntax/ .

    amespaces

    Espacio de Nombres estndard nos permite escribir documentos XML que useos o ms conjuntos de etiquetas XML de una forma modular. Supongamos poremplo que hemos creado una lista de respuestos basada en XML que usaescripciones XML de la partes suministradas por otros fabricantes (online!). Elato "precio", suministrado para los subcomponentes podra ser cantidades que

    http://www.w3.org/TR/PR-rdf-syntax/http://www.w3.org/TR/PR-rdf-syntax/
  • 8/4/2019 XML y java

    16/187

    uisieramos totalizar, mientras que el dato "precio" de la estructura en su totaliodra ser algo que quisieramos mostrar. La especificacin de espacio de nombrefine mecanismos para cualificar los nombres para poder eliminar lasmbiguedades. Esto nos permite escribir programas que usen informacin de otentes y hagan cosas correctas con ella. La ltima informacin sobre espacios dombres puede encontrarse en la pginattp:/ / www.w3.org/ TR/ REC-xml-names.

    ecomendaciones Propuestas por W3Cna "recomedacin propuesta" por W3C es una proposicin para unaecomendacin W3C no-muy-finalizada-pero-probablemente-cerrada. Todava ebierta para revisin, y podra verse algn cambio si la realidad fuerza a ello. Peuchos pensamientos se han puesto en la proposicin por mucha gente, por es

    s bastante bueno pensar como un estndard en su categora que se cumplir suchos cambios.

    squema RDFa proposicin de esquema RDF permite la especificacin de reglas de consisteninformacin adicional que describe cmo deberan interpretarse las sentenciasn "Marco de Descripcin de Recursos" (RDF). Para ms informacin sobre laecomendacin del esquema RDF, puedes ver la pginattp://www.w3.org/TR/PR-rdf-schema.

    orradores de Trabajo W3C

    n borrador de trabajo W3C es una primera visin razonable de los que podra snventualmente un estndard. Tiene sentido conceptualmente, y est listo paraue la gente empiece su implementacin. La retroalimentacin de que se estnesarrollando los esfuerzos para poner el estndard en prctica puede ser elausando de algn cambio en los detalles internos, pero no el especificacineneral.

    SLenguaje de Hoja de Estilo Extensible

    estndard XML especifica cmo identificar datos, no cmo mostrarlos. Por otrdo, HTML dice como se deberan mostrar las cosas sin identificar que son. Elstndard XSL es esencialmente un mecanismo de traducin que nos permitespecificar a qu convertir una etiqueta XML para que pueda ser mostrada, poremplo, en HTML. Se pueden usar diferentes formatos de XSL para mostrar losismos datos de formas diferentes para diferentes usos.

    a parte de la traducin del XSL est bastante completada, y ya existe un buenmero de implementaciones. Sin embargo, la segunda parte del XSL est un p

    http://www.w3.org/TR/REC-xml-names/http://www.w3.org/TR/PR-rdf-schema/http://www.w3.org/TR/PR-rdf-schema/http://www.w3.org/TR/REC-xml-names/
  • 8/4/2019 XML y java

    17/187

    s tnue. Esta parte que cubre el formateo de objetos , tambin conocidaomo flujo de objetos, que nos da la habilidad de definir mltiples reas en unginas y luego enlazarlas juntas. Cuando una canal de texto es dirigido como uoleccin, primero rellena el primer rea y luego "fluye" a la segunda cuando larimera est llena. Dichos objetos se usan parea cartas, catlogos, y publicacioneridicas. El ltimo trabajo de W3c sobre XSL est enttp:/ / www.w3.org/ TR/ WD-xsl.

    LLenguaje de Enlaces XML

    protocolo XLL consiste en dos especificaciones propuestas para manejar enlacntre documentos XML: XLink y XPointer. Estas especificaciones estn todava eus estados preliminares, pero es seguro que tendrn un gran impacto sobre ce usarn los documentos XML.

    XLink: El protocolo XLink es una especificacin propuesta para manejarenlaces entre documentos XML. Esta especificacin permite algunos

    enlaces muy sofisticados, incluyendo enlaces de dos sentidos, enlaces amltiples documentos, enlaces "expandibles" que insertan la informacinenlazada dentro de nuestros documentos en vez de reemplazar nuestrodocumento con una nueva pgina, enlaces entre dos documentos quehan sido creados por terceros, documentos independientes, y enlacesindirectos (por eso podemos apuntar a un "libro de direcciones", en vezde directamente al documento fuente -- actualizar el libro de direccionesmodificar automticamente cualquier enlace que lo use). Para msinformacin sobre la especifiacin XLink, puedes ver la pgina

    http:/ / www.w3.org/ TR/ WD-xml-link.XPointer: En general, la especificacin XLink apunta a un documento oun segmento de documento usando sus ID. La especificacin XPointerdefine mecanismos para "direccionar dentro de estructuras internas dedocumentos XML", sin requerir que el autor del documento tenga quedefinir una ID para ese segmento. Para acotar la especificacin,proporciona "referencias para elementos, cadenas de caracteres, y otraspartes de documentos XML, tanto si tienen o no tienen un atributo IDexplcito". Para ver la ltima especificacin XPointer, puedes ver

    http:/ / www.w3.org/ TR/ WD-xptr.HTML

    a especificacin XHTML es una forma de hacer documentos XML que se parezcacten como documentos HTML. Como un documento XML puede contenerualquier etiqueta que querramos definir, por qu no definir un conjunto detiquetas que se parezcan a las de HTML? Este es el pensamiento que hay detre la especificacin XHTML. El resultado de esta especificacin es un documento

    http://www.w3.org/TR/WD-xslhttp://www.w3.org/TR/WD-xml-linkhttp://www.w3.org/TR/WD-xptrhttp://www.w3.org/TR/WD-xptrhttp://www.w3.org/TR/WD-xml-linkhttp://www.w3.org/TR/WD-xsl
  • 8/4/2019 XML y java

    18/187

    ue puede mostrarse en navegadores y tambin tratado como datos XML. Losatos podran no ser tan identificables como un XML "puro", pero seran muchos fcil de manipular que el estndard HTML, porque XML especifica unatamiento ms regular y consistente.

    or ejemplo, cada etiqueta de un documento XML bien-formateado debe tener utiqueta final asociada, o debe terminar en/ >. Por eso podramos verp>..., o

    , pero nunca veramos

    en solitario. El resultado de e

    equerimiento es que nunca tenemos que programar para los casos extraos quemos en HTML donde, por ejemplo, una etiqueta podra ser terminada p/ dt>, por otra , por , o por . Esto hace ms fcil la escriture cdigo!

    a especificacin XHTML es una reformulacin del HTML 4.0 dentro de XML. Latima informacin est en http:/ / www.w3.org/ TR/ WD-html-in-xml/ .

    squema XML

    sta especificacin est construida sobre las proposiciones de esquemas descritbajo. Define tipos de elementos que un documento puede contener, suselaciones, y los datos que puden contener en formas que van ms all de lo quroporciona la especificacin DTD actual. Para ms informacin sobre laroposicin del esquema XML, puedes ver las especificaciones de W3C XMLchema (Structures) y XML Schema (Datatypes).

    Notas" W3C

    as "Notas" no son estndards W3C en absoluto. En su lugar, se han hechoroposiciones por varios individuos y grupos que cubren tpicos que estn bajoonsideracin. El W3C las publica para que la gente que est ocupada trabajandn los estndards y las revisiones tengan alguna idea de por donde empezar. Unnota" no es ms que el reflejo de un estndard eventual que cualquier otra --ada una ser juzgada por sus mritos, los mejores resultados sern combinadon el borrador W3C.

    squemas Propuestos

    unque DTD nos permite validar documentos XML, debe sufrir un gran nmero eficiencias. Muchos de los problemas vienen del hecho de que la especificacinTD no es hereditaria. Por ejemplo, para una direccin de correo que contengaarios elementos "parsed character data" (PCDATA), el DTD se parecera a esto!ELEMENT mailAddress (name, address, zipcode)>

    !ELEMENT name (#PCDATA)>

    !ELEMENT address (#PCDATA)>

    !ELEMENT zipcode (#PCDATA)>

    omo podemos ver, las especifiaciones son lneales. No hay sentido en el

    http://www.w3.org/TR/WD-html-in-xml/http://www.w3.org/TR/xmlschema-1/http://www.w3.org/TR/xmlschema-1/http://www.w3.org/TR/xmlschema-2/http://www.w3.org/TR/xmlschema-2/http://www.w3.org/TR/xmlschema-1/http://www.w3.org/TR/xmlschema-1/http://www.w3.org/TR/WD-html-in-xml/
  • 8/4/2019 XML y java

    19/187

    ontenido, que puede rellenar el espacio de nombrado, forzndonos a poneruevos nombres a elementos similares en diferentes configuraciones. Por eso, sueremos aadir otro elemento "name" al DTD que contiene los elementosrstName, middleInitial, y lastName, tendramos que poner otro indentificao podramos llamarlo simplemente "name" sin conflictos con el elemento namefinido para usarlo en mailAddress.

    tro problema de la naturaleza no hereditaria de las especificaciones DTD es qu

    o clarifica qu comentarios estn hechos para explicar. Un comentario al princiomo podraplicarse a todos los elementos que constituyen la direccin de e-mail. Pero unomentario como slo se aplicara al elemento name. Portro lado, un comentario como se aplicaraspecialmente a la parte #PCDATA del elemento zipcode, para escribir losrmatos vlidos. Finalmente, los DTDs no permite formalizar criterios de

    alidacin de caposm como es la limitacin 5-digit (o 5 y 4) para el campopcode.

    ara remediar estas deficiencias, se han hecho varias proposiciones para unsquemas hereditario que se parece ms a una base de datos y que especificariterios de validacin.

    DDML / XschemaDocument Definition Markup Language / XSchema

    Es bueno tener definiciones de documentos como DTD, pero un DTDtiene una sntaxis algo extraa. DDML es el nuevo nombre para la viejaproposicin XSchema, que especifica restricciones de validacin para un

    documento XML usando XML. DDML es una de las muchas proposicionesque pretende ser el sucesor del DTD. No est claro todava cual ser elestndard de validacin. Para ms informacin sobre DDML, puedes verla pgina http:/ / www.w3.org/ TR/ NOTE-ddml.

    DCDDescripcin de Contenido de Documento

    La proposicin DCD es un mecanismo para definir un estndard XML parabases de datos. Para ms informacin sobre DCD, puedes ver la pginahttp:/ / www.w3.org/ TR/ NOTE-dcd.

    SOXEsquema de XML Orientado a Objeto

    SOX es una proposicin de esquema que incluye tipos de datosextensibles, espacios de nombres, y documentacin embebida. Para msinformacin sobre SOX, puedes ver la pginahttp:/ / www.w3.org/ TR/ NOTE-SOX.

    http://www.w3.org/TR/NOTE-ddmlhttp://www.w3.org/TR/NOTE-dcdhttp://www.w3.org/TR/NOTE-SOX/http://www.w3.org/TR/NOTE-SOX/http://www.w3.org/TR/NOTE-dcdhttp://www.w3.org/TR/NOTE-ddml
  • 8/4/2019 XML y java

    20/187

    tras Notas W3C

    tras proposciones para estndards basadas en XML, incluyen:

    ICEIntercambio de Informacin y Contenido

    ICE es un protocolo para el uso de sindicadores de contenidos y sussubcriptores. Se enfoca sobre el "Intercambio de contenidos automticoy su reutilizacinm tanto en contexto de publicaciones tradicionales y enrelaciones negocio-a-negocio". Para ms informacin sobre ICE, puedesver la pgina http:/ / www.w3.org/ TR/ NOTE-ice.

    stndards que Construyen XML

    os siguientes estndards y proposiciones construyen XML. Como XML essicamente un herramienta de definicin de lenguaje, estas especificaciones sesan para definir lenguajes estandarizados para propsitos especializados.

    stndards de Documentos Extendidos

    SMILLenguaje Sincronizado de Integracin Multimedia

    SMIL es una recomendacin W3C que cubre audio, vdeo y animaciones.Tambin corrige el problema de la dificultad de sincronizacin delplayback de dichos elementos. Para ms infomacin sobre SMIL, puedesver la pgina http:/ / www.w3.org/ TR/ REC-smil.

    MathMLLenguaje de Marcas Matemtico

    MathML es una recomendacin de W3C que trata con la representacindo frmulas matemticas. Para ms informacin sobre MathML, puedesver la pgina http:/ / www.w3.org/ TR/ REC-MathML.

    SVGGrficos de Vector Escalables

    SVG es un borrador de trabajo de W3C que cubre la representacin deimgenes grficas de vectores. (Grficos de vectores son imgenesconstruidas desde comandos que dicen cosas como "dibuja una lnea(cuadrado o crculo) desde el punto x,y hasta el punto m,n" en vez decodificar la imagen como una serie de bits. Dichas imgenes son msfcilmente escalables, aunque requieren ms tiempo de procesamiento

    http://www.w3.org/TR/NOTE-icehttp://www.w3.org/TR/REC-smil/http://www.w3.org/TR/REC-MathML/http://www.w3.org/TR/REC-MathML/http://www.w3.org/TR/REC-smil/http://www.w3.org/TR/NOTE-ice
  • 8/4/2019 XML y java

    21/187

    para dibujarlas). Para ms informacin sobre SVG, puedes ver la pginahttp:/ / www.w3.org/ TR/ WD-SVG.

    DrawMLLenguaje de Meta Dibujo

    DrawML es una nota W3C que cubre imgenes 2D para ilustracionestcnicas. Tambin corrige el problema de actualizacin y redefinicin de

    dichas imgenes. Para ms informacin sobre DrawML, puedes ver lapgina http:/ / www.w3.org/ TR/ 1998/ NOTE-drawml-19981203.

    stndards eCommerce

    cXMLXML Commerce

    cXML es un estndard de (www.rosettanet.org) para configurarcatlogos online interactivos para diferentes vendedores, donde losprecios y los productos ofrecidos son especificos de la compaia. Incluyemecanismos para manejar pedidos de compra, cambios de pedidos,actualizaciones de estado, y notificaciones de envo. Para msinformacin sobre cXML, Puedes ver la pginahttp:/ / corp.ariba.com/ News/ AribaArchive/ -

    cxml.htm .

    CBLLibrera de Negocio Comunes

    CBL es una librera de elementos y definiciones de atributos mantenidospor CommerceNet (www.commerce.net). Para ms informaicn sobreCBL y una variedad de otras inicitativas que funcionan juntas parapermitir las aplicacioens eCommerce, puedes ver la pginahttp:/ / www.commerce.net/ projects/ -

    currentprojects/ eco/ wg/ eCo_Framework_-Specifications.html

    stndards de Mantenimiento y Administracin de SoftwareDMTFManejo Distribuido de Tareas Forzadas

    El DMTF es un grupo que viene con estndards para administrarremotamente equipos de escritorio. Estn planeando usar XML paramantener catalogos de dispositivos y sus descripciones, y para otrastareas de control remoto. Este grupo no forma parte de W3C, pero susactividades parecen haber progresado al estado de borrador, por eso

    http://www.w3.org/TR/WD-SVGhttp://www.w3.org/TR/1998/NOTE-drawml-19981203http://www.rosettanet.org/http://corp.ariba.com/News/AribaArchive/cxml.htmhttp://corp.ariba.com/News/AribaArchive/cxml.htmhttp://www.commerce.net/http://www.commerce.net/projects/currentprojects/eco/wg/eCo_Framework_Specifications.htmlhttp://www.commerce.net/projects/currentprojects/eco/wg/eCo_Framework_Specifications.htmlhttp://www.commerce.net/projects/currentprojects/eco/wg/eCo_Framework_Specifications.htmlhttp://www.commerce.net/projects/currentprojects/eco/wg/eCo_Framework_Specifications.htmlhttp://www.commerce.net/projects/currentprojects/eco/wg/eCo_Framework_Specifications.htmlhttp://www.commerce.net/projects/currentprojects/eco/wg/eCo_Framework_Specifications.htmlhttp://www.commerce.net/http://corp.ariba.com/News/AribaArchive/cxml.htmhttp://corp.ariba.com/News/AribaArchive/cxml.htmhttp://www.rosettanet.org/http://www.w3.org/TR/1998/NOTE-drawml-19981203http://www.w3.org/TR/WD-SVG
  • 8/4/2019 XML y java

    22/187

    est listado aqu. Para ms informacin sobre est organizacin, puedesver http:/ / www.dmtf.org/ .

    WebDAVAutora y Versionado Distribuido en la Web

    WebDAV es un esfuerzo desde el IETF que usa XML para mentenerservidores web. Permite que el contenido sea creado, modificado, sobre

    una conexin HTTP. (El IETF no est afiliado con el W3C, pero su"borrador estndard" es aproximadamente equivalente a una"recomendacin" W3C, y por eso se incluye aqu). Para ms informacin,puedes el grupo de trabajo "webdav" en http:/ / www.ietf.org.

    zito

    http://www.dmtf.org/http://www.ietf.org/mailto:[email protected]:[email protected]://www.ietf.org/http://www.dmtf.org/
  • 8/4/2019 XML y java

    23/187

  • 8/4/2019 XML y java

    24/187

    bjetos que encapsula la aplicacin. El API DOM es ideal para aplicacionesteractivas porque el modelo de objeto completo se presenta en memoria, donduede ser accedido y manipulado por el usuario.

    or otro lado, construir el DOM requiere la lectura de toda al estructura XML yantener el rbol de objetos en memoria, lo que significa un mayor consumo dePU y de memoria. Por esta razn, el API SAX tiende a ser el preferido enplicaciones del lado del servidor y filtros de datos que no requieren representac

    e datos en memoria.os APIs SAX

    rriba podemos ver lo ms bsico del analizador SAX. Primero, elAXParserFactory mostrado en la parte superior genera un ejemplar delnalizador.

  • 8/4/2019 XML y java

    25/187

    uego se muestra el texto XML viniendo al analizador por la izquierda. Mientras atos son analizados, el analizador invoca a varios mtodos de retrollamadaefinidos por los interfaces DocumentHandler, ErrorHandler , DTDHandler, ntityResolver.

    qu tenemos un sumario de los APIs de SAX:AXParserFactory

    Un objeto SAXParserFactory crea un ejemplar del analizador determinadpor las propiedades del sistema,javax.xml.parsers.SAXParserFactory.

    arser

    El interface org.xml.sax.Parser define mtodos comosetDocumentHandler para configurar manejadores de eventos yparse(URL) para hacer realmente el analisis. Este interface es implementpor las clases Parser y ValidatingParser del paquete com.sun.xml.pars

    ocumentHandler

    Mtodos como startDocument, endDocument, startElement, y

    endElement son invocados cuando se reconoce una etiqueta XML. Esteinterface tambin define mtodos characters y processingInstruction, son invocados cuando el analizador encuentra texto en un elemento XML ouna instruccin de procesamiento en lnea, respectivamente.

    rrorHandler

    Mtodos como error, fatalError, y warning son invocados en respuesta avarios errores del analizador. El manejador de error por defecto lanza unaexcencin para los errores fatales e ignora los otros errores (incluyendoerrores de validacin). Esta es una de las razones por la que necesitamos

    conocer algo sobre analizador SAX, incluso si estamos usando DOM. Algunaveces, la aplicacin podra recuperar un error de validacin. Otra veces,podra necesitar generar una excepcin. Para asegurarnos de su correctomanejo, necesitamos suministrar nuestro propio manejador de errores paranalizador.

    TDHandler

    Los mtodos definidos en este interface son invocados cuando se procesandefiniciones en un DTD. Estos mtodos se explican en Usar el DTDHandler EntityResolver. Este interface extiende el interface

    com.sun.java.xmlDtdEventListener, que aade mtodos como startDtd yendDtd.ntityResolver

    El mtodo resolveEntity es invocado cuando el analizador debe identificardatos mediante un URI. En la mayora de los casos, una URI simplemente una URL, que especifica la localizacin de un documento, pero en algunoscasos el documento podra estar identificado por un URN -- un identificadopblico, o nombre, que es nico en el espacio Web. El indentificador pblic

  • 8/4/2019 XML y java

    26/187

    podra ser especificado en adiccin a la URL. El EntityResolver puede decsi usa el identificador pblico en lugar de la URL para localizar el documentpor ejemplo para acceder a una copia local del documento, si existe.

    na aplicacin tpica proporciona como mnimo un DocumentHandler. Comodas las implementaciones por defecto de los interfaces ignoran todas las

    ntradas excepto los errores fatales, una aplicacin robusta podra quererroporcionar un ErrorHandler para reportar ms errores o reportarlos de forma

    ferente.Nota: La clase org.xml.sax.HandlerBase implementa todos estosinterfaces con mtodos nulos, para que podamos sobreescribir losmtodos de los eventos que necesitemos procesar e ignorar los otroseventos.

    aquetes

    analizador SAX est definido en los siguientes paquetes.

    a q u e t e De s c r ip c i n

    rg.xml.sax

    Define los interfaces SAX. El nombre "org.xml" es elprefijo de paquete que fue seleccionado por el grupoque defini el API SAX. Este paquete tambin defineHandlerBase -- una implementacin por defecto dela clase base para varios de los "handlers" definidospor los interfaces, as como una clase InputSource,que encapsula informacin que nos dice de dndevienen los datos XML.

    rg.xml.sax.helpers

    Este paquete forma parte de SAX. Define la claseParserFactory, que nos permite adquirir unejemplar de un analizador especificando un nombreen un string o usando el valor definido por lapropiedad del sistema org.xml.sax.parser. Estepaquete tambin proporciona implementacionespara otros dos interfaces definidos en org.xml.sax,pero estas clases no son necesarias cuando se usanlos anlizadores XML SAX Java de Sun.

    avax.xml.parsersDefine la clase SAXParserFactory que devuelve elSAXParser. Tambin define la claseParserConfigurationException para reportarerrores.

  • 8/4/2019 XML y java

    27/187

    om.sun.xml.parser

    Contiene el analizador Java XMLcom.sun.xml.parser.Parser ), el analizador devalidacin (com.sun.xml.parser.ValidatingParser), y una entidad de resolucin. Elnombre totalmente cualificado de cualquiera de losanalizadores puede ser enviado a la factora deanalizadores para obtener un ejemplar. El analizadorsin validacin genera errores si un documento noest bien formateado, y hace algn proceso del DTD(si existe) pero no chequea para asegurarse de queel documento obedece todas las restriccionesdefinidas por el DTD. El analizador de validacin, porotro lado, chequea para asegurarse que se obedecendichas restricciones.

    Nota Tcnica:Todos los analizadores sin validacin no son iguales! Aunque seanecesario un analizador de validacin para procesar todas las entidadesexternas referenciadas desde dentro de un documento, algo de eseproceso es opcional para una analizador sin validacin. Con dichoanalizador, una seccin almacenada externamente del DTD que sea"incluida" en el documento actual usando una referencia de entidadpodra no ser procesada. Adems, no se requiere que un analizador sinvalidacin identifique los caracteres en blanco ignorables (aunque unanalizador de validacin si debe hacerlo). En este caso, los caracteres enblanco que pueden ser legitimamente ignorados seran devueltos comoparte normal del stream de caracteres. El analizador sin validacin de la

    librera Java XML de Sun implementa estos dos comportamientosopcionales -- procesa todas las entidades externas e identifica todos losespacios en blanco ignorables.

    tros Interfaces SAX

    dems de la APIS descritos aqu, los APIs SAX definen otros cuantos interfacesue podremos querer usar cuando escribamos una aplicacin SAX, as como unaquete de utilidades con un buen nmero de clases que son tiles para construplicaciones del mundo real.

    os APIs "Document Object Model" (DOM)

    siguiente diagrama nos muestra los APIs JAXP en accin:

  • 8/4/2019 XML y java

    28/187

    samos la clasejavax.xml.parsers.DocumentBuilderFactory para obtener unemplar DocumentBuilder (superior izquierda), y usamos esto para producir ocument (un DOM) que cumple la especificacin DOM (inferior derecha). Deecho, el constructor que obtenemos est determinado por la propiedad delstema,javax.xml.parsers.DocumentBuilderFactory, que selecciona la implementacinfactora que se usa para producir el constructor. (El valor por defecto de laataforma puede sobreescribirse desde la lnea de comandos).

    odemos usar el mtodo newDocument() para crear un Documento vaco quemplemente el interface org.w3c.dom.Document. De forma alternativa, podemsar uno de los mtodos analizadores del constructor para crear un Documentoesde datos XML existentes. El resultado es un rbol DOM como el que vemos esquina inferior derecha del diagrama.

    aquete

    a implementacin de DOM est definida en los siguientes paquetes:

  • 8/4/2019 XML y java

    29/187

    a q u e t e De s c r ip c i n

    rg.w3c.domDefine los interfaces de programacin DOM paradocumentos XML (y, opcionalmente HTML), segn loespecificado por W3C.

    avax.xml.parsers

    Define la clase DocumentBuilderFactory y la claseDocumentBuilder, que devuelve un objeto queimplementa el interface Document W3C. La factora

    que se usa para crear el constructor est determinadapor la propiedad del sistemajavax.xml.parsers, quepuede ser seleccionada desde la lnea de comandos osobreescrita cuando llamamos al mtodonewInstance. Este paquete tambin define la claseParserConfigurationException para reportarerrores.

    om.sun.xml.treeLa implementacin Java XML de Sun de las librerasDOM, incluyendo las clases XmlDocument,XmlDocumentBuilder, y TreeWalker.

    mplementacin de Referencia de Project X

    sta seccin muestra cmo la implementacin de referencia combina los APIs SADOM.

    Nota:material que queda en esta seccin es especfico de Project X, la implementac

    e referencia de Sun para el JAXP estndard. El material de esta seccin no formarte del estndard. Como no forma parte del estndard JAXP, las funcionalidadescritas aqu podran muy bien ser implementadas de forma diferente en otrosnalizadores. Adems, como los estndards evolucionan, las futuras versiones dimplementacin de referencia JAXP podran emplear diferentes mecanismos p

    onseguir los mismos objetivos.

    troduccin

    n la implementacin de referencia de Sun, el API DOM se construye sobre el A

    AX como se ve en el siguiente diagrama:

  • 8/4/2019 XML y java

    30/187

    a implementacin que hace Sun del API DOM usa las libreras SAX para leer enatos XML y construye el rbol de objetos de datos que constituye el DOM. Estamplementacin tambin proporciona un marco de trabajo para ayudarnos a sac

    rbol de objetos como datos XML.

    mplementacin

    siguiente diagrama muestra cmo opera el DocumentBuilder de Sun detrsescena:

  • 8/4/2019 XML y java

    31/187

    a seccin del diagrama que hay dentro de las lneas onduladas naranjas muest

    u hace la implementacin de referencia de Sun cuando analizamos datos XMLxistentes.

    DocumentBuilder por defecto, crea un objeto que implementa el interfaceocumentHandler de SAX. Entonces enva ese objeto a uno de los analizadoreAX (Parser o ValidatingParser, dependiendo de como estuviera configurada ctora del constructor). Cuando se analiza la fuente de entrada, elocumentHandler crea un objeto Document.

    Nota:Para controlar otros aspectos del comportamiento del analizador, usamos

    los mtodos setErrorHandler y setEntityResolver deDocumentBuilder. Esta clase no implementa un mtodosetDTDHandler. Slo la mostramos aqu porque forma parte delanalizador SAX.

  • 8/4/2019 XML y java

    32/187

    Dnde podemos ir ahora?

    n este punto, tenemos suficiente informacin para empezar a ojear las librerasML a nuestro aire. Los siguientes pasos dependen de lo que queramos conseguodramos querer ir a:isear una estructura de Datos XML

    Si estamos creando estructuras de datos XML para una aplicacin y querem

    algn consejo sobre cmo proceder. (Este es el siguiente paso en laintroduccin a XML).cceso Serie con el AP I Simple para XML (SAX)

    Si ya se han determinado las estructuras de datos, y estamos escribiendo aplicacin del servidor o un filtro XML que necesita hacer el proceso lo msrpido posible.

    anipular Contenidos de Documentos con Document Object Model (DOM

    Si necesitamos construir un rbol de objetos desde datos XML para poder

    manipularlos en una aplicacin, o convertirlos en un rbol de objetos enmemoria para XML.

    zito

    mailto:[email protected]:[email protected]
  • 8/4/2019 XML y java

    33/187

    Disear una Estructura de Datos XML

    sta pgina cubre algunas cosas que podemos usar cuando tomemos decisionesseo XML.

    horrarnos Algn Trabajo

    empre que sea posible, usaremos un DTD existente. Es mucho ms sencillonorar las cosas que no necesitamos que disear todo desde el principio. Ademusar un DTD estndard hace posible el intercambio de datos, y puede ser pos

    sar datos en herramientas desarrolladas por otros.or eso, si existe un estndard de la industria, debemos considerar referenciar eTD con un parmetro de entidad externo. Un lugar para buscar DTDs estndare la industria es el repositorio creado por la "Organization for the Advancementructured Information Standards (OASIS)" en http:/ / www.XML.org. Otro luara chequear es "CommerceOne's XML Exchange" en http:/ / www.xmlx.comue se describe como "un repositorio para crear y compartir definiciones de tipoe documentos".

    tributos y Elementosno de los problemas que encontraremos ms frecuentemente mientras diseamna estructura XML es modelar un tem de dato dado como un subelemento oomo un atributo de un elemento existente. Por ejemplo, podramos modelar eltulo de un deslizamiento como:

    slide>

    This is the title

    /slide>como:slide title="This is the title">...

    n algunos casos, las diferentes caractersticas de atributos y elementos hacen eleccin. Consideremos primero estos casos, y luego veremos casos donde laeccin es ms ambigua.

    eccin Forzada

    http://www.xml.org/http://www.xmlx.com/http://www.xmlx.com/http://www.xml.org/
  • 8/4/2019 XML y java

    34/187

    gunas veces, la eleccin entre un atributo y un elemento se ve forzada por laaturaleza de los atributos y los elementos. Veamos algunas de estasonsideraciones: dato contiene subestructuras

    En este caso, el tem de datos debe ser modelado como un elemento. Nopuede ser modelado como un atributo, porque los atributos slo toman strsencillos. Por eso si el ttulo puede contener texto enfatizado como este:Th

    Best Choice, entonces puede ser un elemento. dato contiene mltiples lneasAqu, tambin tiene sentido usar un elemento. Los atributos necesitan sersencillos, strings cortos o de otro modo no se pueden leer.

    dato cambia frecuentemente

    Cuando el dato va a ser modificado frecuentemente, especialmente por elusuario final, tiene sentido modelarlo como un elemento. Los editores de Xtienden a hacer muy sencillo encontrar y modificar elementos de datos. Loatributos pueden ser ms difciles de conseguir, y por lo tanto ms difciles

    modificar. dato es un string pequeo que raramente cambia

    Este es el dato que puede ser modelado como un atributo. Sin embargo, sporque pueda no quiere decir que se deba. Chequearemos al siguiente sec"Elecciones de estilo" para asegurarnos.

    dato est confinado a un pequeo nmero de elecciones fijas

    Esta es una de las veces en que realmente tiene sentido usar un atributo.Usando el DTD, puede prevenirse que el atributo tome cualquier valor que

    est permitido. Un editor XML puede incluso proporcionar estas elecciones una lista desplegable. El autor del documento XML no puede usar ningn vque no sea parte del DTD. Si en el futuro se quiere usar un nuevo valor, setendr que modificar el DTD antes de que el autor del documento pueda hauso de l.

    ecciones de Estilo

    recuentemente las elecciones no son tan claras como hemos visto arriba. Cuanna eleccin no est forzada, necesitamos un sentido de "estilo" para guiarnos.

    regunta a responder es, qu hace un buen estilo XML y por qu.esafortunadamente, definir un sentido de estilo para XML es tan nebuloso comefinir "estilo" cuando se habla de arte o msica. Sin embargo, tenemos unasuantas formas de aproximarnos. El objetivo de esta seccin es darnos algunosensamientos tiles sobre el sujeto "Estilo XML".sibilidad

    Primero usaremos el concepto de visibilidad de los elementos XML y losatributos. Si se espera que el dato sea mostrado al usuario final - debe ser

  • 8/4/2019 XML y java

    35/187

    modelado como un elemento. Por otro lado, si la informacin gua leprocesamiento XML pero nunca ser mostrada, podra ser mejor modelarlocomo un atributo.

    roveedor/ Consumidor

    Otra forma de pensar en la visibilidad es preguntarnos quin es el consumiy/o productor de la informacin. Tambin podemos pensar en trminos dequin o qu est procesando la informacin.

    ontenedor contra ContenidoOtra forma de pensar entre elementos y atributos es pensar en un elementcomo un contenedor. Por analoga, los contenidos del contenedorcorresponden a los modelos de datos XML como elementos. Por otro lado, caractersticas del contenedor corresponden a los modelos de datos XML coatributos. Un buen estilo XML ser, de una forma consistente, la separacide los contenidos de un contenedor de sus caractersticas.

    ormalizar Datos

    n el tutorial de SAX, la seccin Definir Atributos y Entidades en el DTD muestraomo crear una entidad externa que podemos referenciar en un documento XMLomo una entidad tiene todas las ventajas de una rutina modularizada -- cambina copia afecta a todos los documentos que la referencian. El proceso de eliminedundancias es conocido como normalizacin, por eso definir entidades es unauena forma de normalizar nuestros datos.

    n un fichero HTML, la nica forma de conseguir est clase de modularidad es cnlaces HTML -- pero por supuesto entonces el documento esta fragmentado, y

    ompleto. Por otro lado, las entidades XML, no sufren dicha fragmentacin. Lantidad referenciada acta como una macro -- el contenido de la entidad esxpandido en su lugar, produciendo un documento completo. Y cuando la entidast definida como un fichero externo, mltiples documentos pueden referencia

    as consideraciones para definir una referencia de entidad, son prcticamente laismas que usamos para modularizar el cdigo del programa:

    Si nos encontramos escribiendo lo mismo ms de una vez, debemos pensaen una entidad.Que nos permita escribirla en un lugar y referenciarla en muchos lugares.

    1.

    Si la informacin va a cambiar, especialmente si se usa en ms de un lugadebemos pensar en una entidad.

    2.

    Si la entidad nunca ser referenciada desde fuera del fichero actual, ladefiniremos en el local_subset del DTD del documento, como definiriamos mtodo o una clase interna en un programa.

    3.

    Si la entidad va a ser referenciada desde mltiples documentos, debemosdefinirla como una entidad externa, de la misma forma que definiramos unclase externa.

    4.

  • 8/4/2019 XML y java

    36/187

    as entidades externas producen XML modilar que es ms pequeo, ms fcil dectualizar y de mantener. Tambin pueden resultar documentos ms difciles desualizar.

    ormalizar DTDs

    ambin podemos normalizar nuestras declaraciones DTD fabricando extername

    ezas comunes y referencindolas con un parmetro de entidad. Este proceso sescribe en la seccin de SAX en Definir Parmetros de Entidad.

    ambin podemos configurar DTDs condicionales, como se describe en la secciecciones Condicionales del tutor de SAX. Si el nmero y tamao de las secciononficionales es relativamente pequeo con respecto al tamao del DTD compleuede permitirnos una "sola fuente" un DTD que podemos usar para mltiplesropsitos. Si el nmero de secciones condicionales crece, el resultado puede sen documento tan complejo que sea difcil de editar.

    zito

    http://-/?-mailto:[email protected]:[email protected]://-/?-
  • 8/4/2019 XML y java

    37/187

    Escribir un Sencillo Fichero XML

    mpecemos escribiendo una sencilla versin del tipo de dato XML que podramosar para una representacin de diapositivas. En este ejercicio, usaremos nuestditor de texto para crear los datos y as familiarizarnos con el formato bsico dn fichero XML.

    rear el Fichero

    sando un editor de textos estndard, creamos un fichero llamado

    ideSample.xml.Nota: aqu tienes una versin de: slideSample01.xml.

    scribir la Declaracin

    uego, escribimos la declaracin, que identifica el documento como un documenML. La declaracin empieza con los caracteres "

    !-- A SAMPLE set of slides -->

    http://usuarios.tripod.es/Ozito/xml/sax/samples/slideSample01.xmlhttp://usuarios.tripod.es/Ozito/xml/sax/samples/slideSample01.xml
  • 8/4/2019 XML y java

    38/187

    efinir el Elemento Raz

    espus de la declaracin, todo documento XML define exactamente un elemenonocido como el elemento raz. Cualquier otro elemento del fichero est contenentro de este elemento. El texto en negrita de abajo define el elemento raz dste fichero, slideshow:

    ?xml version='1.0' encoding='us-ascii'?>

    !-- A SAMPLE set of slides -->

    slideshow>

    /slideshow>

    adir Atributos a un Elemento

    na presentacin de diapositivas tiene un nmero de tems de datos asociados,nguno de los cuales requiere una estructura. Por eso es natural definirlos comtributos del elemento slideshow . Aadimos el texto en negrita de abajo paraonfigurar algunos atributos:

    ..

    slideshow

    title="Sample Slide Show"

    date="Date of publication"

    author="Yours Truly">

    /slideshow>

    uando creamos un nombre para una etiqueta o un atributo, podemos usaruiones ("-"), subrayados ("_"), dos puntos (":"), y puntos (".") adems dearacteres y nmeros.

    Nota:Los dos puntos deben usarse con cuidado o incluso ser evitados, porque

    se usan para definir el nombre de espacio para un documento XML.

    adir Elementos Anidados

    ML permite estructuras de rbol, lo que significa que un elemento puede contetros elementos. Aadimos el texto en negrita de abajo para definir un elementide y un elmento title dentro de l:

    ...

  • 8/4/2019 XML y java

    39/187

    Wake up to WonderWidgets!

    /slideshow>

    qu tambin hemos aadido un atributo type a la diapositiva. La idea de estetributo es que est diapositiva podra ser remarcada para una audiencia mscnica o ms ejecutiva con type="tech" o type="exec", o identificarla como

    daptable para ambos con type="all" .

    ste ejemplo ilustra la diferencia entre las cosas que son ms tiles al definirlasomo elementos (el elemento title) y cosas que es mejor definirlas como atributel atributo type). El ttulo es algo que ver la audiencia. Por eso es un elemento

    or otro lado, el tipo es algo que nunca se representar, por eso es un atributo.tra forma de pensar en esta distincin es que un elemento es un contenedor,omo una botella. El tipo es una caracterstica del contenedor (es alto o bajo,ncho o estrecho). El ttulo es una caracterstica del contenido (agua, leche o testas no son unas reglas muy rpidas pero nos pueden ayudar cuando diseemuestras propias estructuras XML.

    adir Texto al Estilo HTML

    omo XML nos permite definir cualquier etiqueta que queramos, tiene sentido

    efinir un conjunto de etiquetas que se parezcan al HTML. El estndard XHTMLace exactamente esto. Por ahora, teclearemos el texto en negrita de abajo parefinir un par de listas de entradas que usan etiquetas de estilo HTML panfatizar el texto:

    ...

    Wake up to WonderWidgets!

    Overview

    Why WonderWidgets are great

    Who buys WonderWidgets

  • 8/4/2019 XML y java

    40/187

    /slideshow>

    s adelante veremos que definir un elemento title crea un conflicto con elemento XHTML que usa el mismo nombre. Discutiremos el mecanismo queroduce el conflicto (el DTD) y varias posibles soluciones cuando cubramos laeccin Analizar el DTD parametrizado.

    adir un Elemento Vacona diferencia mayor entre HTML y XML, es que todo el XML debe estar bienrmateado -- lo que significa que cada etiqueta debe tener una etiqueta de cierdebe ser una etiqueta vaca. Ya estamos acostumbrados a las etiquetas de cieadimos el texto en negrita de abajo para definir una lista de tems vaca:

    ...

    Overview

    Why WonderWidgets are great

    Who buys WonderWidgets

    /slideshow>

    bserva que cualquier elemento puede ser un elemento vaco. Todos toman sutiqueta final con "/ >" en lugar de ">". Podramos hacer lo mismo introducienditem>, que es su equivalente.

    l Producto Terminado

    qui tenemos la versin completa del fichero XML:

    ?xml version='1.0' encoding='us-ascii'?>

    !-- A SAMPLE set of slides -->

    slideshow

    title="Sample Slide Show"

    date="Date of publication"

    author="Yours Truly"

    >

  • 8/4/2019 XML y java

    41/187

    Wake up to WonderWidgets!

    Overview

    Why WonderWidgets are great

    Who buys WonderWidgets

    /slideshow>

    hora que hemos creado un fichero para trabajar, estamos listo para escribir unrograma que use el analziador SAX. Lo haremos en la siguiente seccin.

    zito

    mailto:[email protected]://usuarios.tripod.es/Ozito/xml/overview/4_desing.htmlmailto:[email protected]
  • 8/4/2019 XML y java

    42/187

    Mostrar un Fichero XML con el Analizador SAX

    n la vida real, vamos a tener poca necesidad de mostrar un fichero XML con unnalizador SAX. Normalmente queremos procesar los datos de alguna forma paraacer algo til con ellos. (Si queremos mostrarlo, es ms fcil cosntruir un rbolOM y usar sus funciones de impresin internas. Pero mostrar una estructura XMna gran forma de ver el analizador SAX en accin. En este ejercicio, configurarems eventos de "echo" del analizador SAX a System.out.

    onsideremos esta versin "Hello World" de un programa de proceso XML. Muestrmo usar el analizador SAX para obtener el dato y mostrar lo que hemos

    onseguido.Nota:El cdigo explicado en esta seccin est en Echo01.java. El fichero operasobre slideSample01.xml.

    rear el Skeleton

    mpezamos creando un fichero llamado Echo.java e introducimos el esqueleto paplicacin:

    ublic class Echo extends HandlerBase

    public static void main (String argv[])

    {

    }

    sta clase extiende HandlerBase, que implementa todos los interfaces quexplicamos en Una Introduccin a los APIs XML de Java. Que nos permiteobreescribir los mtodos que nos interesan y dejar por defecto el resto.

    omo lo vamos a ejecutar en solitario, necesitamos un mtodo main. Y necesitamrgumentos de la lnea de comandos para que podamos decirle a la aplicacin quchero debe mostrar.

    http://usuarios.tripod.es/Ozito/xml/sax/work/Echo01.javahttp://usuarios.tripod.es/Ozito/xml/sax/samples/slideSample01.xmlhttp://usuarios.tripod.es/Ozito/xml/sax/samples/slideSample01.xmlhttp://usuarios.tripod.es/Ozito/xml/sax/work/Echo01.java
  • 8/4/2019 XML y java

    43/187

    mportar las Clases que Necesitamos

    uego aadimos las sentencias import para las clases que usar la aplicacin:

    mport java.io.*;

    mport org.xml.sax.*;

    mport javax.xml.parsers.SAXParserFactory;

    mport javax.xml.parsers.ParserConfigurationException;

    mport javax.xml.parsers.SAXParser;

    ublic class Echo extends HandlerBase

    ...

    or supuesto, se necesitan las clases dejava.io para hacer la salida. El paqueterg.xml.sax define todos los interfaces que usaremos para el analizador SAX, laase SAXParserFactory crea el ejemplar que usaremos. Lazan unaarserConfigurationException si no puede producir un analizador que

    orresponda con la configuracin de opciones especificada. Finalmente, elAXParser es lo que la factora devuelve para analizar.

    onfigurar la I/O

    a primera orden de negocio es procesar el argumento de la lnea de comandos,btener el nombre del fichero a mostrar, y configurar el canal de salida. Aadimoxto en negrita de abajo para realizar estas tareas y para hacer una limpieza

    dicional:

    public static void main (String argv [])

    {

    if (argv.length != 1) {

    System.err.println ("Usage: cmd filename");

    System.exit (1);

    }

    try {

    // Set up output stream

    out = new OutputStreamWriter (System.out, "UTF8");

    } catch (Throwable t) {

    t.printStackTrace ();

    }

    System.exit (0);

    }

    static private Writer out;

  • 8/4/2019 XML y java

    44/187

    uando creamos el canal de salida, estamos seleccionando la codificacin dearacteres UTF-8. Podramos haber elegido US-ASCII, o UTF-16, que tambin sonoportados por la plataforma Java. Para ms informacin sobre estos conjuntos daracteres, puedes ver Esquemas de Codificacin en Java.

    onfigurar el Analizador

    hora (por ltimo) estamos preparados para configurar el analizador. Aadimos e

    xto en negrita de abajo para configurarlo y arrancarlo:

    public static void main (String argv [])

    {

    if (argv.length != 1) {

    System.err.println ("Usage: cmd filename");

    System.exit (1);

    }

    // Use the default (non-validating) parser

    SAXParserFactory factory = SAXParserFactory.newInstance();

    try {

    // Set up output stream

    out = new OutputStreamWriter (System.out, "UTF8");

    // Parse the input

    SAXParser saxParser = factory.newSAXParser();

    saxParser.parse( new File(argv [0]), new Echo() );

    } catch (Throwable t) {

    t.printStackTrace ();

    }

    System.exit (0);

    }

    on estas lneas de cdigo, creamos un ejemplar SAXParserFactory, segn loetermina la propiedad del sistemajavax.xml.parsers.SAXParserFactory .ntonces obtenemos un analizador de la factora y le damos al analizador unemplar de esta clase para manejar los eventos, dicindole qu fichero deberocesar.

    Nota:La clasejavax.xml.parsers.SAXParser es una envoltura que define un nmerode mtodos de conveniencia. Envuelve el objeto org.xml.sax.Parser. Si senecesita, podemos obtener el analizador usando el mtodo getParser().

    or ahora, simplemente estamos capturando cualquier excepcin que el analizadoueda lanzar. Aprenderemos ms sobre el precesamiento de errores en la seccinanejar Errores con el Analizador sin Validacin.

  • 8/4/2019 XML y java

    45/187

    Nota:El mtodo parse que opera sobre objetos File es un mtodo deconveniencia. Debajo de la cubierta, crea un objetoorg.xml.sax.InputSource para que el analizador SAX opere sobre l.Para hacer esto, usa un mtodo esttico en la clasecom.sun.xml.parser.Resolver para crear un InputSource desde unobjetojava.io.File. Tambin podramos hacer esto nosotros mismos, pero

    el mtodo de conveniencia lo hace ms sencillo.mplementar el Interface DocumentHandler

    interface ms importante para nuestro proceso actual es DocumentHandler. terface requiere un nmero de mtodos que invoca el analizador SAX en respuediferentes eventos de anlixis. Por ahora, slo nos conciernen cinco de ellos:artDocument, endDocument, startElement, endElement, y characters.troducimos el cdigo en negrita de abajo para configurar los mtodos que manechos eventos:

    ...

    static private Writer out;

    public void startDocument ()

    throws SAXException

    {

    }

    public void endDocument ()throws SAXException

    {

    }

    public void startElement (String name, AttributeList attrs)

    throws SAXException

    {

    }

    public void endElement (String name)throws SAXException

    {

    }

    public void characters (char buf [], int offset, int len)

    throws SAXException

    {

    }

  • 8/4/2019 XML y java

    46/187

    ...

    ada uno de estos mtodos debe lanzar una SAXException. Esta excepecin esevuelta al analizador, quin la reenva al cdigo que llam al analizador. En elrograma actual, esto significa que vuelve al manejador de la excepcin Throwaue hay en la parte inferior del mtodo main.

    uando se encuentra una etiqueta de inicio o de final, el nombre de la etiqueta seasa como un String a los mtodos startElement o endElement, segn

    orresponda. Cuando se encuentra una etiqueta de inicio, cualquier atributo queefina tambin son pasados en un AttributeList. Los caracteres encontrados denel elemento se pasa como un array de caracteres, junto con el nmero dearacteres (longitud) y un desplazamiento dentro del array que apunta al primeraracter.

    scribir la Salida

    os mtodos DocumentHandler lanzan SAXExceptions pero no IOExceptionsue pueden ocurrir durante la escritura. La SAXException puede envolver cualqu

    tra excepcin, por eso tiene sentido hacer la salida en un mtodo que tiene cuide los detalles de manejo de excepciones. Aadimos el cdigo en negrita de abajoara definir un mtodo emit que hace eso:

    ublic void characters (char buf [], int offset, int Len)

    hrows SAXException

    rivate void emit (String s)

    hrows SAXException

    try {

    out.write (s);

    out.flush ();

    } catch (IOException e) {

    throw new SAXException ("I/O error", e);

    }

    .

    uando se llama a emit, cualquier error de I/O es envuelto en una SAXExceptionto con un mensaje que lo identifica. Esta excepcin entonces es lanzada de vuanalizador SAX. Por ahora tengamos en mente que emit es un pequeo mtod

    ue maneja el stream de salida.

  • 8/4/2019 XML y java

    47/187

    spaciar la Salida

    ay un poco ms de infraestructura que necesitamos hacer antes de realizarualquier proceso real. Aadimos el cdigo en negrita de abajo para definir eltodo nl que escribe el tipo de caracter de final de lnea usado por el sistema

    ctual:

    private void emit (String s)

    ...

    }

    private void nl ()

    throws SAXException

    {

    String lineEnd = System.getProperty("line.separator");try {

    out.write (lineEnd);

    } catch (IOException e) {

    throw new SAXException ("I/O error", e);

    }

    }

    ota: Aunque puede parecer un poco aburrido, llamaremos a nl() muchas vecesentro de nuestro cdigo. Definirlo ahora simplificar el cdigo posterior. Tambin

    roporciona un lugar para indentar la salida cuando a esta seccin del tutorial

    Manejar Eventos de Documento

    nalmente, escribiremos algo de cdigo que realmente procesa los eventosocumentHandler para los mtodos aadidos. Aadimos el cdigo en negrita debajo para manejar los eventos start-document y end-document:

    public void startDocument ()

    throws SAXException{

    emit ("");

    nl();

    }

    public void endDocument ()

    throws SAXException

    {

    try {

  • 8/4/2019 XML y java

    48/187

    nl();

    out.flush ();

    } catch (IOException e) {

    throw new SAXException ("I/O error", e);

    }

    }

    qu hemos mostrado una declaracin XML cuando el analizador encuentra el inicel documento. Como hemos configurado OutputStreamWriter para usar laodificacin UTF-8, incluimos sta especificacin como parte de la declaracin.

    Nota: Sin embargo, las clases IO no entienden los nombres decodificaciones con guiones, por eso debemos especificar "UTF8" en vez de"UTF-8".

    final del documento, simplemente poner una nueva lnea y vaciamos el stream alida. Aadimos el cdigo en negrita de abajo para procesar los eventosart-element y end-element:

    public void startElement (String name, AttributeList attrs)throws SAXException

    {

    emit ("");}

    public void endElement (String name)

    throws SAXException

    {

    emit ("");

    }

    on este cdigo, mostramos las etiquetas de elementos, incluyen cualquier atribuefinido en la etiqueta de inicio. Para finalizar esta versin del programa, aadimocdigo en negrita de abajo para mostrar los caracteres que ve el analizador:public void characters (char buf [], int offset, int len)

    throws SAXException

    {

    String s = new String(buf, offset, len);

    emit (s);

    }

    elicidades! Hemos escrito un aplicacin analizador SAX. El siguiente paso es

  • 8/4/2019 XML y java

    49/187

    ompilarlo y ejecutarlo.Nota: Para estar seguros, el manejador de caracteres debera escanear elbuffer para buscar caracteres ampersand ('&') y ngulos a la izquierda('

  • 8/4/2019 XML y java

    50/187

    cripts de Comandos

    ara hacernos la vida ms fcil, aqu tenemos algunos scripts de comandos queodemos usar para compilar y ejecutar nuestras aplicaciones mientras trabajemoon este tutorial.

    Un ix W in d o w s

    cripts constuir, ejecutar build.bat, run.bat

    etscape Pulsa, eligeFile-->Save As

    Pulsa con el botn derecho, eligeSave Link As.

    nternetxplorer -/-

    Pulsa con el botn derecho, elige Save Target

    As.

    hequear la Salida

    a salida del programa es almacenada en Echo01-01.log. Aqu tenemos una pare l, mostrando algo de su espaciado:.

    slideshow title="Sample Slide Show" date="Date of publication"

    uthor="Yours Truly">

    Wake up to WonderWidgets!

    ...

    irando esta salida, nos surgen un buen nmero de preguntas. De dnde vienenspacios verticales extras? y por qu estos elementos estn identadospropiadamente, cuando el cdigo no lo est? Bien, responderemos a estasreguntas en un momento. Primero hay unos cuantos puntos a observar sobre laalida:

    El comentario definido en la parte superior del ficheroq

    No aparece en el lista. Los comentarios son ignorados por definicin, a

    menos que implementemos un LexicalEventListener en lugar de unDocumentHandler.Los atributos del elemento se listan todos juntos en una sla linea.qLa etiqueta del elemento vaco que definimos en () es tratadaexactamente igual que un elemento vaco de dos etiquetas (

  • 8/4/2019 XML y java

    51/187

    dentificar los Eventos

    sta versin del programa echo podra ser til para mostrar un fichero XML, pero os dice mucho sobre haca donde va el analizador. El siguiente paso es modificarrograma para que podamos ver de dnde vienen los espacios y las lneas vertica

    Nota: El cdigo descrito en esta seccin est en Echo02.java. La salidaque produce est contenida en Echo02-01.log.

    aremos los cambios en negrita que hay abajo para identificar los eventos cuandocurran:

    public void startDocument ()

    throws SAXException

    {

    nl();

    nl();

    emit ("START DOCUMENT");

    nl();emit ("");

    nl();

    }

    public void endDocument ()

    throws SAXException

    {

    nl(); emit ("END DOCUMENT");

    try {

    ...}

    public void startElement (String name, AttributeList attrs)

    throws SAXException

    {

    nl(); emit ("ELEMENT: ");

    emit ("

  • 8/4/2019 XML y java

    52/187

    }

    if (attrs.getLength() > 0) nl();

    emit (">");

    }

    public void endElement (String name)

    throws SAXException

    {

    nl();emit ("END_ELM: ");

    emit ("");

    }

    public void characters (char buf [], int offset, int len)

    throws SAXException

    {

    nl(); emit ("CHARS: |");

    String s = new String(buf, offset, len);

    emit (s);

    emit ("|");

    }

    ompilamos y ejecutamos esta versin del programa para producir una salida mformativa. Los atributos se muestran uno por lnea, que es ms bonito. Pero, m

    mportante, las lneas de salida se parecen a esta:

    HARS: |

    |

    emos que el mtodo characters es responsable de mostrar tanto los espacios qean la identacin y las mltiples nuevas lneas que separan los atributos.

    Nota: La especificacin XML requiere que todos los separadores de lneasde entrada estn normalizados a una simple nueva lnea. El carcter denueva lnea se especifica como \ n en Java, C, y en sistemas Unix, perotiene el alias "linefeed" en sistemas Windows.

    omprimir la Salida

    ara hacer la salida ms leble, modificamos el programa para que slo muestre laracteres que tienen algo distinto de los espacios en blanco.

    Nota: El cdigo explicado en est seccin est en Echo03.java.

    aremos los cambios mostrados abajo para suprimir de la salida los caracteres quon espacios en blanco:

    http://usuarios.tripod.es/Ozito/xml/sax/work/Echo03.javahttp://usuarios.tripod.es/Ozito/xml/sax/work/Echo03.java
  • 8/4/2019 XML y java

    53/187

    public void characters (char buf [], int offset, int len)

    throws SAXException

    {

    nl(); emit ("CHARS: |");

    nl(); emit ("CHARS: ");

    String s = new String(buf, offset, len);

    emit (s);

    emit ("|");if (!s.trim().equals("")) emit (s);

    }

    ejecutamos el programa ahora, veremos que hemos eliminado tambin toda laentacin, porque el espacio de identacin forma parte de los espacios en blancoue preceden el inicio del elemento. Aadimos el cdigo en negrita de abajo paraanejar la identacin:

    static private Writer out;

    private String indentString = " "; // Amount to indent

    private int indentLevel = 0;

    ...

    public void startElement (String name, AttributeList attrs)

    throws SAXException

    {

    indentLevel++;

    nl(); emit ("ELEMENT: ");...

    }

    public void endElement (String name)

    throws SAXException

    {

    nl();

    emit ("END_ELM: ");

    emit ("");

    indentLevel--;}

    ...

    private void nl ()

    throws SAXException

    {

    ...

    try {

    out.write (lineEnd);

  • 8/4/2019 XML y java

    54/187

    for (int i=0; i < indentLevel; i++) out.write(indentStrin

    } catch (IOException e) {

    ...

    }

    ste cdigo configura un string de identacin, seigue la pista del nivel de identacictual, y saca el string de identacin siempre que se llame al mtodo nl.

    nspeccionar la Salidaa salida completa para esta versin del programa est contenida encho03-01.log.

    ELEMENT:

  • 8/4/2019 XML y java

    55/187

    ocumentos y Datos

    n este ejemplo, est claro que hay una mezcla de caracteres con la estructura ds elementos. El hecho de que el texto pueda rodear los elementos nos ayuda axplicar porque algunas veces omos hablar sobre "datos XML" y otras veces omoablar sobre "documentos XML". XML maneja confortablemente tanto estructurasatos como documentos de texto que pueden incluir marcas. La nica diferenciantre los dos es si se permite o no texto entre los elementos.

    Nota:En una futura seccin de este tutorial, trabajeremos con el mtodoignorableWhitespace del interface DocumentHandler. Este mtodoslo puede invocarse cuando est presente un DTD. Si un DTD especificaque slideshow no contiene texto, entonces todos los espacios en blancoque rodean a los elementos slide son ignorables por definicin. Por otrolado, si slideshow puede contener texto (lo que se debe asumir comoverdadero en ausencia de un DTD), el analizador debe asumir que losespacios y lneas que ve entre los elementos slide son parte importante

    del documento.zito

    mailto:[email protected]:[email protected]
  • 8/4/2019 XML y java

    56/187

    Aadir Manejadores de Eventos Adicionales

    unto a ignorableWhitespace, slo hay otros dos mtodos en el interfaceocumentHandler: setDocumentLocator y processingInstruction. En estaeccin del tutorial implementaremos estos dos manejadores de eventos.

    dentificar la Localizacin del Documento

    n locator es un objeto que contiene la informacin necesaria para encontrar unocumento. La clase Locator encapsula un ID de sistema (URL) o un identificad

    blico (URN), o ambos. Necesitaremos esta informacin si queremos encontrargo relativo al documento actual -- de la misma forma, por ejemplo, que unavegador HTML procesa un atributo href="anotherFile" en una etiqueta denlace -- el navegador usa la localizacin del documento actual para encontrarnotherFile.

    ambin podramos usar el locator para imprimir un buen mensaje de diagnstdems de la localizacin del documento y el identificador pblico, el locatorontiene mtodos que dan los nmeros de columna y de lnea de los eventos mecientemente procesados. Al mtodo setDocumentLocator se le llama slo u

    ez al principio del anlisis. Para obtener el nmero de lnea o de columna actuarabaremos el locator cuando se invoque a setDocumentLocator y luego pueer usado en otros mtodos manejadores de eventos.

    Nota:El cdigo descrito en est seccin est en Echo04.java. Su salida estalmacenada en Echo04-01.log.

    adimos el siguiente mtodo al programa Echo para obtener el locator delocumento y lo usamos para mostrar el ID del sistema del documento.

    ...

    private String indentString = " "; // Amount to indent

    private int indentLevel = 0;

    public void setDocumentLocator (Locator l)

    {

    try {

    out.write ("LOCATOR");

    http://usuarios.tripod.es/Ozito/xml/sax/work/Echo04.javahttp://usuarios.tripod.es/Ozito/xml/sax/work/Echo04-01.loghttp://usuarios.tripod.es/Ozito/xml/sax/work/Echo04-01.loghttp://usuarios.tripod.es/Ozito/xml/sax/work/Echo04.java
  • 8/4/2019 XML y java

    57/187

    out.write ("\n SYS ID: " + l.getSystemId() );

    out.flush ();

    } catch (IOException e) {

    // Ignore errors

    }

    }

    public void startDocument ()

    ...

    otas:

    Este mtodo, en contraste a todos los otros mtodos de DocumentHandlno devuelven una SAXException. Por eso, en vez de usar emit para lasalida, este cdigo escribe directamente en System.out. (Este mtodo seespera que grabe el Locator para su uso posterior, en vez de hacer el tipoproceso que genera una excepcin.)

    q

    El deletreo de estos mtodos es "Id", no "ID". Por eso tenemos getSystemy getPublicId.

    q

    uando compilemos y ejecutemos el programa sobre slideSample01.xml,odremos ver una salida parecida a esta:

    OCATOR

    SYS ID: file:/../samples/slideSample01.xml

    TART DOCUMENT

    ?xml version='1.0' encoding='UTF-8'?>

    ..qu, es aparent