jueves, 24 de diciembre de 2009

XML en Java – APIs y Parsers

El uso de XML es primordial al momento de desarrollar software, sobre todo empresarial, y Java por supuesto cuenta con APIs y Parsers que facilitan el trabajo con este tipo de documentos. A través de este pequeño artículo aprenderemos qué APIs y Parsers existen, y cual debemos escoger al momentode desarrollar una aplicación. En futuros artículos pondré algunos ejemplos. Pero, primero lo primero:

¿Qué es XML?

XML significa Extensible Markup Language, es un metalenguaje extensible de etiquetasdesarrollado por el W3C. XML no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades. Y por tanto tiene algunas ventajas:

  • Es extensible (una vez que un xml fue diseñado y puesto en producción, es posible extenderlo con la adición de nuevas etiquetas de modo que los antiguos consumidores puedan continuar utilizando el servicio sin complicación alguna).
  • El analizador es un componente estándar, no es necesario crear un analizador específico para cada lenguaje. Esto posibilita el empleo de uno de los tantos disponibles. De esta manera se evitan bugs y se acelera el desarrollo de la aplicación.
  • Si un tercero decide usar un documento creado en XML, es sencillo entender su estructura y procesarlo. Mejora la compatibilidad entre aplicaciones.

¿Qué es un XML Parser?

Al momento de desarollar una aplicación que necesite leer archivos XML, no es conveniente crear piezas de código que hagan éste tipo de tareas desde cero. Un parser XML es una librería de clases que ofrece al programador métodos para manipular documentos XML, además de abstraer el funcionamiento complejo o no particular de XML, incluyendo:

  • Resuleve referencias
  • Entiende las secciones CDATA
  • Verificar si el documento está bien formado
  • Validar el documento contra su DTD
  • Asignar tipos y atributos

Los Parsers XML generalmente pueden usar una o más APIs XML para llevar a cabo su misión. Pero... ¿qué son las APIs XML?

APIs XML en Java

Escoger un API XML es quizás una de las más importantes decisiones que debes tomar, de acuerdo al proyecto que se está desarrollando. Muchos Parsers tienen la capacidad de usar una u otra, por lo que es relativamente sencillo cambiar de parser si es necesario; por otro lado, cambiar de API puede llegar a ser bastante doloroso, incluso podrías tener que reescribir todo. Así que, se cuidadoso al momento de escoger alguno. He aquí una lista de los más importantes:

  • SAX: Simple API for XML, es de lejos la mejor API para XML. Es muy poco lo que no puedes hacer con dicha API. Las clases e interfaces de SAX modelan el parser, el flujo desde el cual losdocumentos son leídos, y la aplicación cliente recibe datos desde el parser. Sin embargo, ninguna clase modela el documento XML; en vez de ello, el parser provee el contenido a la aplicación cliente a través de una interfaz callback. Esto hace a SAX muy rápido y eficiente, puesto que no tiene que guardar el documento entero en la memoria. Esto hace que sea, por eficiencia, la única opción si deseas manipular documentos XML demasiado grandes.
  • DOM: Document Object Model, es un API que modela un documento XML como un árbol. A diferencia de SAX, DOM puede leer y generar documentos XML. Cada documento XML es representado por un objeto Document. Toda operación (escribir ,leer, modificar, etc.) sobre dichos objetos se realiza a través de la invocación de métodos.
  • JAXP: Java API for XML Processing, es el API estándar de Java que envuelve tanto a SAX como a DOM. Por tanto, al momento de iniciar un proyecto, no te preguntas si usar SAX o JAXP, o DOM o JAXP. SAX y DOM son parte de JAXP.
  • Otras APIs para XML en Java son: JDOM, dom4j, XMLPull.

XML parsers para Java

Aquí un pequeño listado de los parsers más usados:

  • XERCES: es parte de Apache XML Project, y es bastante completo. Además, soporta completamente a SAX, DOM y JAXP. Se distribuye bajo la licencia Apache 2.0, por lo cual tienes bastantes libertades al momento de usarlo.
  • Crimson: actualmente Crimson posee casi todas las características de xerces (soporta SAX, DOM, XML 1.0 y JAXP), y también forma parte del proyecto Apache XML. Fue desarrollado por ingenieros de Sun que no estaban de acuerdo en cómo XERCES parseaba los documentos XML; y aunque en un principio huvo un inmenso afán entre los dos grupos de desarrolladores por hacer más rápido y eficiente su proyecto, actualmente son casi igual de rápidos y confiables. Aunque éste no es muy usado, hay que decirlo.