Uso

1. Consideraciones

Básicamente deben tomarse en cuenta consideraciones respecto a lo siguiente:

1.1 XML Native Databases:

Este apartado es muy importante ya que la generación de servidores OAI-XML se basa en la existencia de una colección de documentos XML almacenada en una base de datos xml nativa (XML N-db). No está enfocado hacia el otro tipo de bases de datos XML llamadas XML-enabled databases (XML-eDb); las cuáles básicamente son un tipo de bases de datos relacionales con funcionalidad agregada para el manejo de documentos XML.  ¿ Por qué se decidió enfocarnos hacia el uso de XML N-db ? : porque éstas permiten almacenar cualquier tipo de documentos XML (bien formados), sin la necesidad de tener un modelo previo ligado a cada tipo de documentos XML que se quisiera almacenar. Caso contrario sucede con las XML-eDb, las cuáles (dado que por lo regular son bases de datos relacionales) requieren de tener un modelo previo (modelo entidad-relación) sobre el cuál, válgase la redundancia, se modela la estructura existente en un tipo de documentos XML en particular. Este tipo de bases de datos  realizan 2 tipos de procesos : " Shredding " y " Publishing " que, respectivamente, se refieren a obtener los datos descritos en un documento XML, mapearlos a sus correspondientes " tablas " y posteriormente, cuando así lo requieren, tratar de reconstruir el documento XML original a través de la obtención de los datos que se almacenaron en dichas " tablas ". La limitante de esto es que no se garantiza la reconstrucción del documento XML que fue almacenado originalmente.

Caso contrario sucede con las XML N-db, las cuáles hacen uso del modelo que propone XML, el cuál es una estructura en árbol. Con este modelo es posible almacenar y posteriormente recuperar a exactitud el documento XML original; ya que representa a manera de " nodos " los elementos, atributos, instrucciones de procesamiento, comentarios y cualquier otro elemento constituyente de un documento XML.

Lo anterior puede visualizarse con mayor claridad a través de las siguientes ilustraciones [Steegmans B. et al. XML for DB2 Information Integration . 2004] :

  • XML enabled databases:

  • Native XML databases:

Ahora bien, ya que definimos el por qué del uso de una XML N-db en lugar de una XML-eDb, podemos abordar lo siguiente:

  • ¿ Qué requisitos debe cubrir la base de datos que se elija utilizar ?

Al igual que existen especificaciones para el acceso y uso de bases de datos relacionales (p.e. JDBC) las hay o, siendo más precisos aún, se pretende que las haya para las XML N-db´s. La iniciativa XML:DB es un esfuerzo por establecer una especificación estándar sobre la cuál puedan basarse tanto los que desarrollan XML N-db´s, como los propios usuarios de éstas.

Es importante mencionar lo anterior porque la configuración y el funcionamiento correcto de su servidor OAI-XML, depende del uso de una XML N-db que soporte la especificación que propone la iniciativa XML:DB. Para no hacer muy extensa esta explicación y suponiendo que hay un conocimiento básico sobre lo que es una XML N-db; así como de la iniciativa XML:DB, podemos concluir este apartado mencionando los " servicios " que su base de datos debe proveer o soportar :

  • XPathQueryService: para procesar consultas utilizando el lenguaje Xpath.
  • CollectionMangementService: para crear colecciones y documentos dentro de éstas.
  • XqueryService (*): para procesar consultas utilizando el lenguaje Xquery.

Dichos servicios son definidos en la iniciativa XML:DB. Los dos primeros servicios  son soportardos actualmente por la mayoría de las XML N-db´s ( por ejemplo eXist o Xindice de Apache); mientas que el último servicio ( XqueryService ) aún no es soportado por la totalidad de dichas bases de datos que se tienen hasta el momento.

Eso se debe a que Xquery recientemente fue catalogado como una recomendación de la W3C y muchas bases de datos aún no lo soportan. Por tal razón se desarrolló una interfaz para permitir agregar implementaciones específicas a la base de datos XML que decidiera utilizar. La interfaz es muy sencilla, únicamente describe la estructura que debe tener un método dentro de la clase que implemente dicha interfaz.

A continuación se muestra la definición de la interfaz (XqueryDriver), así como la clase que se proporciona por default (para el caso de la base de datos eXist):

interfaz XqueryDriver.java

DefaultXqueryDriver.java

Como puede verse, la definición de la interfaz es muy sencilla y su único objetivo es definir una forma estándar de implementar las consultas usando Xquery. Tuvo que definirse así porque cada base de datos tiene su propia implementación. Sin embargo, dado que se apegan a la especificación que define la iniciativa XML:DB, podemos definir una forma general de procesar las consultas basadas en Xquery: la firma del método, la cuál nos dice que debemos recibir un objeto de tipo " org.xmldb.api.base.Collection " del cuál obtendremos el "servicio" requerido (en este caso XqueryService) , un " String " que es la consulta en sí y finalmente, que el tipo de dato retornado por el método debe de ser " org.xmldb.api.base.ResourceSet ". La implementación que se haga o, en términos de programación orientada a objetos : " el encapsulamiento ", está fuera del alcance de esta especificación.

Realmente es algo muy sencillo de implementar y si se utiliza una base de datos distinta a  eXist , lo único que tiene que hacer es modificar este método y adecuarlo a la manera en que su base de datos le indique. Ya sea que desee modificar directamente el " DefaultXqueryDriver.java " o que  nombre de otra manera a su clase en Java que implemente la interfaz  " XqueryDriver.java ". Lo único que debe considerar es tener cuidado de incluir como primera línea de su código la indicación de incluir el " .class" dentro del paquete correspondiente, tal como lo muestran las ilustraciones anteriores. De esa manera sigue respetando el orden establecido (mediante el uso de paquetes en Java) y no hay ningún riesgo de que el servidor no encuentre o no pueda accesar su clase.

Es muy prematuro mencionarlo en este punto pero quizá se preguntará : ¿ Cómo sabe mi servidor qué clase en Java debe de usar como XqueryDriver en dado caso de que Yo implemente mi propio manejador de consultas con Xquery ? ... la respuesta a esta pregunta se explica a detalle en la sección 3.2 (referente a la herramienta de configuración) de la descripción de XOAI.

Precísamente, es en el documento de configuración generado (collectionDescriptor.xml) en donde se especifican todos los aspectos de configuración de su colección, así como del servidor mismo. Características como:

  • Nombre del repositorio
  • Versión del protocolo OAI utilizada
  • Hojas de estilo que el servidor debe utilizar
  • Nombre de las clases en Java que servirán para el manejo de: Errores, Respuestas y consultas con Xquery

... entre otras características que se explicarán cuando lleguemos a la sección correspondiente.

1.2 WAR-files:

Lo único que hay que tener en cuenta al momento de elegir qué archivo WAR va a utilizar, es la versión del JDK que esté utilizando. Se proporciona uno para la versión 1.4.2 del JDK y otro para la versión más reciente del JDK, la 1.5 ó 5.0 .

2. Pasos a seguir para generar un servidor OAI-XML

Realmente es algo sencillo :

1.- Teniendo una colección de documentos XML almacenada en su BD, utilizar la herramienta headersGenerator para generar la sub-colección de encabezados que será utilizada por el servidor.

Lo anterior puede visualizarse mediante la ilustración siguiente :

2.- Con la sub-colección de encabezados generada previamente, hacer uso de la herramienta Configurator para, válgase la redundancia, configurar su servidor; indicando características de su colección y características inherentes al funcionamiento del servidor como : qué clases en Java debe utilizar como manejadores de respuestas, errores y consultas con XQuery; así como las diferentes hojas de estilo que deberá utilizar.

Lo anterior puede verse en la imagen siguiente:

3.- Con los 2 pasos anteriores su servidor ha sido configurado y está listo para utilizarse. Es por ello que el último paso consiste en especificar la forma de invocar a su servidor y los parámetros de entrada que usará como : XMLdb driver, URL, user, password y el path hacia su sub-colección de encabezados.

En la sección dedicada a la descripción del contexto se da una explicación más a fondo de este último punto.

3. Descripción del contexto

A continuación se explicarán tres secciones importantes del archivo " web.xml ". La que aparece en la figura 3.1, se refiere a la declaración del servlet principal del servidor OAI-XML. Como puede verse, el .class (OaiXml.class)  reside en el paquete mx.udlap.ict.oaiXml.server . Los parámetros de entrada son los siguientes:

  • XMLdbDriver : su valor hace referencia al driver de su base de datos.
  • connectionURL : hace referencia al URL necesario para establecer comunicación con su base de datos.
  • pathToCollection : hace referencia al "path" de su sub-colección de encabezados.
  • user y password : en dado caso de que su base de datos soporte el manejo de usuarios. Lo importante aquí es que verifique que su colección tenga los permisos de lectura necesarios. Puede no especificar ningún user o password tal como lo muestra la ilustración.

Fig.3.1 . Declaración del servlet OaiXml y los parámetros que recibe de entrada

En la figura 3.2 se muestra la declaración de los servlets utilizados por las herramientas Configurator y headersGenerator .

Fig.3.2 . Declaración de los servlets ServerConfig y Headers

utilizados por las herramientas Configurator y headersGenerator respectivamente

Finalmente, como lo muestra la figura 3.3, tenemos la especificación de la forma en que se invocarán los servlets previamente declarados. En esta parte Ud. puede cambiar la forma en que se llama al servlet OaiXml , que es finalmente el que representa a su servidor.

La invocación a los otros 2 servlets no debe modificarse, ya que son los utilizados por las herramientas Configurator y headersGenerator .

Fig.3.3 . Especificación de la forma de invocación para

OaiXml,ServerConfig y Headers

4. Contenido del archivo WAR

El contenido del archivo WAR que se distribuye es el siguiente:

Como puede verse, de la figura anterior, se dispone de un API de Programación que describe todas las clases implementadas. También se distribuyen "ayudas" (archivo "OAI-XML-help.htm" en folders flash_help y help - flash y html respectívamente), las cuales profundizan en todos los puntos que llevamos abordados; así como otros apartados de suma importancia como: (1) generación de hojas de estilo; (2) descripción de la estructura de directorios del archivo WAR; (3) carpeta "WEB-INF" a detalle; (4) carpeta "stylesheet" como contenedora de las hojas de estilo a utilizar; (5) librerías ".jar" distribuidas de manera inicial, etc. Además de lo anterior, se distribuyen archivos en formato "txt" para usuarios que tengan costumbre de utilizarlos como referencia rápida; así también se distribuyen las herramientas de configuración y de generación de encabezados.

4.1 Contenido de la carpeta WEB-INF/Lib

Los archivos .jar que se distribuyen de manera inicial son los siguientes:

archivos .jar que se distribuyen inicialmente con la aplicación Web

  • exist.jar y exist-optional.jar : útiles si decide utilizar eXist como su base de datos.
  • xalan-2.6.0.jar , xml-apis y xercesImpl-2.6.2.jar : necesarios para el parseo de documentos XML y el uso de Xalan como procesador de hojas de estilo.
  • xmlrpc-1.2-patched.jar : necesario para poder accesar a su base de datos vía XML-RPC.

Nota: Si decide utilizar una base distinta a eXist, puede colocar los jars necesarios en esta carpeta. Es muy importante mencionar que se debe de tener cuidado con las versiones del procesador XSLT que se esté utilizando, así como del parser XML; ya que probablemente con versiones anteriores a las distribuidas (xalan-2.6.0.jar y xercesImpl-2.6.2.jar) se originan ciertos errores al momento de querer ejecutar el servidor OAI-XML. Si no está seguro de qué versión esté utilizando, puede forzar a la utilización de los que se distribuyen, al colocarlos en la carpeta "common/endorsed" de un contenedor de servlets como Tomcat.

About XOAI


Descripción


Descarga


Uso


Trabajo relacionado


English version