La interoperabilidad es uno de los pilares fundamentales de cualquier repositorio institucional moderno. Gracias al protocolo OAI-PMH (Open Archives Initiative – Protocol for Metadata Harvesting), plataformas como DSpace, Omeka, EPrints y muchos otros sistemas pueden intercambiar metadatos de forma estandarizada, permitiendo la construcción de bibliotecas digitales, portales nacionales, recolectores temáticos y servicios de preservación digital.
En teoría, si un proveedor OAI cumple correctamente con el estándar, cualquier consumidor debería poder cosechar sus registros sin inconvenientes.
En la práctica, sin embargo, las cosas no siempre son tan simples.
Durante el desarrollo de un proyecto basado en DSpace 7, nos encontramos con un escenario particularmente interesante: una colección OAI aparentemente perfecta, validada desde múltiples herramientas, era incapaz de finalizar su cosecha desde DSpace, mientras que otros sistemas la importaban sin ningún inconveniente.
Después de varias horas de análisis, pruebas cruzadas y descartes, descubrimos que el problema no estaba donde esperábamos.
Todo comenzó con la configuración de una nueva colección cosechada desde un repositorio DSpace
La configuración era aparentemente sencilla:
La cosecha iniciaba normalmente. Los primeros registros eran importados correctamente. Posteriormente el proceso terminaba abruptamente mostrando un error bastante conocido para quienes trabajan con XML:
XML document structures must start and end within the same entity
Inmediatamente después aparecía otro error:
org.hibernate.LazyInitializationException
La conclusión inicial parecía obvia:
"Existe un registro XML mal formado."
Era una hipótesis completamente razonable y fue precisamente la primera que intentamos demostrar.
La colección contenía 413 registros.
Lo primero fue descargar manualmente la respuesta completa del proveedor OAI utilizando la operación ListRecords.
Cada página fue almacenada localmente y posteriormente validada mediante:
xmllint --noout archivo.xml
El resultado fue concluyente:
Era posible que el XML general fuese correcto, pero que alguno de los registros individuales presentara problemas al recuperarse mediante GetRecord.
Para comprobarlo:
El resultado volvió a sorprender.
La hipótesis quedaba descartada.
También evaluamos la posibilidad de un problema intermitente del servidor. Durante varias horas repetimos pruebas utilizando:
Las respuestas fueron siempre consistentes.
El proveedor OAI funcionaba correctamente.
Si el problema no estaba en el XML...
¿Por qué DSpace fallaba?
Decidimos cambiar completamente el enfoque. En lugar de seguir analizando el proveedor, probamos exactamente la misma colección utilizando otro software.
La elección fue Omeka.
El resultado fue revelador:
Aquello cambiaba completamente el escenario, ya no podíamos afirmar que el problema estuviera en el proveedor OAI. Para descartar cualquier particularidad propia de la instalación utilizada, repetimos exactamente la misma configuración en otra instalación completamente distinta.
Esta vez sobre:
El resultado fue exactamente el mismo: La cosecha comenzó normalmente. Importó alrededor de 180 registros. Posteriormente volvió a aparecer exactamente el mismo error:
XML document structures must start and end within the same entity
seguido nuevamente por:
org.hibernate.LazyInitializationException
En ese momento ya no se trataba de un problema de infraestructura. El comportamiento era reproducible en distintas instalaciones y distintas versiones de DSpace.
Revisando el código y los registros de depuración apareció un detalle muy interesante. La cosecha OAI en DSpace ocurre en dos etapas distintas.
Es precisamente durante esa segunda etapa donde aparece el error SAX:
XML document structures must start and end within the same entity
Sin embargo, todas las pruebas manuales utilizando exactamente esos mismos GetRecord devolvían XML completamente válido.
Es decir:
Antes de dar por concluido el análisis decidimos modificar únicamente un parámetro de la colección.
En lugar de utilizar la modalidad habitual de cosecha:
Configuramos la colección para:
La diferencia fue inmediata.
Esta experiencia dejó varias lecciones muy interesantes. La primera es que un mensaje de error aparentemente evidente no siempre apunta al verdadero origen del problema. Durante buena parte del análisis estuvimos convencidos de que existía un XML defectuoso, sin embargo, todas las pruebas demostraban exactamente lo contrario.
También aprendimos la importancia de validar una hipótesis utilizando herramientas independientes, si solamente hubiésemos probado desde DSpace, probablemente habríamos concluido que el proveedor OAI estaba incumpliendo el estándar.
El hecho de repetir exactamente la misma cosecha utilizando Omeka permitió demostrar que el proveedor funcionaba correctamente.
Finalmente, reproducir el problema tanto en DSpace 7.6 como en DSpace 8 fortaleció aún más la hipótesis de que el comportamiento corresponde a una limitación —o eventualmente un bug— en el flujo de cosecha de DSpace cuando trabaja con DIM y referencias ORE.
Cuando una cosecha OAI falle con errores XML, conviene seguir un proceso sistemático antes de atribuir el problema al proveedor.
En nuestra experiencia recomendamos:
Este enfoque permite separar con mucha mayor precisión los problemas del proveedor OAI de los problemas propios del cliente de cosecha.
Uno de los aspectos más interesantes del soporte técnico especializado es que muchas veces el verdadero problema no es el que muestran los mensajes de error.
En este caso, todo apuntaba inicialmente hacia un XML corrupto.
Después de validar más de cuatrocientos registros, analizar respuestas OAI completas, repetir la cosecha en múltiples plataformas y comparar el comportamiento entre distintas versiones de DSpace, la evidencia condujo hacia una conclusión muy distinta: el proveedor OAI cumplía correctamente con el estándar, mientras que el problema sólo aparecía bajo un flujo específico de cosecha implementado por DSpace.
Este tipo de investigaciones permiten fortalecer los ecosistemas de repositorios institucionales, mejorar la interoperabilidad entre plataformas y generar evidencia útil para toda la comunidad de DSpace, OAI-PMH, bibliotecas digitales y preservación digital.