Warning: Constant WP_MEMORY_LIMIT already defined in /home/elorenzo/domains/arvo.es/public_html/dspace/wp-config.php on line 94
Documentación técnica | Hablando de DSpace - Part 3

Archivos de Categoría: Documentación técnica - Paginas 3

Interfaces e integraciones con DSpace

La pregunta primera que nos debemos hacer es ¿cuando necesitamos tener un interface con DSpace? y no estamos hablando solamente de interfaz de usuario (léase XMLUI o JSPUI) sino de interfaces sistema-sistema o integraciones. Bien, en ciertas ocasiones necesitaremos integrarnos con sistemas o aplicaciones web, como CMS, DMS, LMS, diseñar interfaces de usuario sustancialmente diferentes, como las móviles, lograr una interacción entre repositorios, etc. Un conjunto más amplio de lo que inicialmente se piensa.
De hecho, una gran parte de repositorios se interconectan mediante OAI-PMH. Llevamos toda la vida usando servicios de integración y ni nos habíamos dado cuenta…
Bien, este post es un repaso (con la impresión de que no es exhaustivo) a las diversas alternativas y sabores existentes.

Integración directa contra la Base de Datos y el sistema de Ficheros
Esto podríamos consideralo básicamente una declaración del tipo: «no me sirve nada el código java de Dspace y me voy a programar otra cosa». El proyecto, excepto si pensamos para el acceso a funciones muy básicas, será largo, pero claro, prácticamente podréis usar cualquier framework de desarrollo para el proyecto.

JavaAPI
Cualquier aplicación que sea capaz de llamar al JavaAPI de Dspace, podrá usarse para este tipo de integración. Así es como surgió XMLUI y están surgiendo continuamente nuevos proyectos. El problema es que la JavaAPI no proporciona una separación completa o nítida y normalmente se requerirá re-escribir parte de la lógica de negocio de DSPACE en la nueva aplicación. Ejemplo de ello es la duplicidad existente en el código XMLUI y JSPUI, indicación clara de esta insuficiencia o «imperfección» del JavaAPI.
Pero aparte de eso, ese el camino para el uso de Frameworks de Aplicaciones Web o de desarrollo rápido, como el framework Play!, la nueva interface anunciada en agosto de este año para Dspace, Freemarker WebMVC o incluso el uso de frameworks no-Java como Ruby on Rails.

OAI-PMH
Simplificando, OAI-PMH permite la recolección de los metadatos DSpace en otro sistema. El OAI-PMH, OAI’s Protocol for Metadata Harvesting, es la base de los proyectos de cooperación entre repositorios de diferente nivel (regional, nacional , temáticos…). OAI-PMH define los estándares para describir los intercambios de metadatos entre sistemas y con la creciente disponibilidad de librerías OAI-PMH para una diversidad de plataformas, pues es una opción siempre valorable.
Curiosamente siempre tenemos presente la recolección de nuestro DSpace, ya que la aplicación OAI se despliega de forma estándar en el proceso normal de construcción de DSpace, pero (creo que desde la versión 1.6) podemos configurar nuestro DSpace para recolectar otros repositorios que expongan sus contenidos mediante este interface. Por ejemplo, arXIv posibilita su recolección para proveer acceso a los metadatos de todos sus artículos. Guarden la debida precaución con los derechos y licencias.

OAI-ORE
OAI-ORE, Open Archive Initiative’s Object Reuse and Exchange, es la especificación para describir agregaciones de recursos web y el intercambio de recursos digitales. El soporte de este protocolo en Dspace se propociona desde la versión 1.6.
Si se usa en combinación con OAI-PMH el contenido de un repositorio (metadatos + ficheros) puede ser recolectado desde/hacia otro sistema. Como uso, quizá un poco raro, lo hemos usado para migraciones, obtener nuevas unidades de agregación de contenidos, y sincronización de instancias, sin necesidad de recurrir a procesos de import-export o similares.

REST-API
Existe una REST API en fase de desarrollo avanzado que permite la integración basada en REST: Transferencia de Estado Representacional (Representational State Transfer).  El código se  puede descargar para la 1.8 y previsiblemente irá incluido en el DSpace 3.0, pero ya hay una serie de proyectos interesantes sobre esta interfza, incluido una integración Moodle.

SWORD
SWORD (Simple Web-service Offering Repository Deposit) es un protocolo, basado en atompub, Atom Publish Protocol, que define el depósito remoto de items en un repositorio por otras aplicaciones. Ya nos hemos explayado bastante en este blog sobre SWORD, está claro que nos gusta. La disponibilidad de librerias Sword en diversos lenguajes, (PHP, java…) promueve el uso de este tipo de integración, p.ej, en el depósito de publicaciones desde sistemas de investigación, y otros escenarios.
Dspace implementa el protocolo SWORD de diversas formas:

  • Servidor compatible con el protocolo SWORD v1, disponible desde la versión 1.6 de Dspace
  • Servidor compatible SWORD V2, disponible desde la versión 1.8 de Dspace.
  • Cliente SWORD, para hacer que DSPACE deposite items en otros sistemas que acepten este protocolo.

LNI (Lightweight Network Interface)
Este interface permite la integración de un sistema con DSpace via el protocolo WebDAV. Puedes encontrar más información aquí. La última actualización del código se realizó en la versión 1.5, su uso parece minoritario y hay reportados problemas de rendimiento (literalmente:    suffers horrible performance issues).  Desarrollado por el MIT, su proyecto más visible parece ser CWspace, una plataforma de este Instituto de contenidos OpenCourseware.

SOLR
En el Open Repositories 2012, Stuart Lewis presentó SkylightUI, que es un front-end sobre DSpace, desarrollado en CodeIgnitor(PHP), y que usa el índice SOLR de DSpace como una API. Como nunca nos podemos resistir a las propuestas de Stuart, pues lo probaremos lo antes que podamos, y os seguiremos contando.

Definir un nuevo índice de navegación

Además de la búsqueda (search), uno de los mecanismos que ofrecen los repositorios a sus usuarios es la navegación (browse) por sus contenidos, con los usuarios revisando un índice p.ej. de títulos para ver si encuentran contenidos de su interés.

En la mayoría de instalaciones surge la necesidad de redefinir los índices de navegación (Browse indexes), puesto que los cuatro índices (autor, título, fecha y materia) que vienen definidos por defecto en LUCENE, que es el buscador habitual de la mayoría de instalaciones Dspace, en contraposición a SOLR… posiblemente no se adapten suficientemente a las necesidades de nuestra organización. Dspace permite la definición de nuevos índices (incluyendo eliminar o modificar los ya definidos) como parte del proceso de configuración.

En primer lugar, índice se asocia por lo general a metadato, por lo que debemos tener definidos en Dspace los campos de metadatos relevantes, y sobre ellos configurar los índices de navegación.

  • Lo primero a tener en cuenta es incluir el metadato en el metadata-registry…claro. p.ej. dc.subject.unesco, porque queremos tener un índice de materias unesco.
  • Localizar la sección configurable browse indexes en dspace.cfg. Y en ella, editar el nuevo índice:
     webui.browse.index.(n) = Unesco:metadata:dc.subject.unesco:text

    para una explicación de la sintaxis de este campo, ver el cajetín al final de este post, y referirse al manual de Dspace. Sobre todo, cuidado con la numeración del índice, ya que deben quedar todos los índices en secuencia ordinal correcta…1,2,3..n , sin saltos, repeticiones…

  • realizar un index-init, rearrancar tomcat limpiando la memoria caché y el índice ya esta listo para ser usado..
  • Como el índice es nuevo, no existirán las etiquetas de lenguaje correspondientes. Avisados quedan, son un montón. Navegar sobre el índice recién construido y anotar las nuevas etiquetas, del tipo:
     xmlui.ArtifactBrowser.ConfigurableBrowse.title.metadata..........

    Para XMLUI, incluirlas en el messages.xml y en los messages_xx que use vuestra instalación

¿Sabías que…? si el campo sobre el que se construye el índice es un campo authority controlled, Lucene ofrece simultáneamente al índice «tradicional» un índice adicional sobre ese campo, que se construye únicamente con los valores validados… Para usar ese índice en el dspace.cfg tienes que configurar un nuevo índice con los valores:

webui.browse.index.5 = lcAuthor:metadataAuthority:dc.contributor.author:authority (ejemplo)

Sintaxis
webui.browse.index.<n>=<index name>:<metadata>:<schema prefix>.<element>.<qualifier>:<data-type field>:<sort option>.

  • Propiedad en dspace.cfg: webui.browse.index.<n>
  • <index name>: El nombre que queramos dar al índice, relevante para las messages keys
  • <metadata>: valores posibles “metadata”, “item” o «metadataAuthority»
  • <schema prefix>.<element>.<qualifier>: el campo dublin core cualificado sobre el que se construye el índice, p.ej.dc.contributor.author. Admite en <qualifier> caracteres de macheo múltiple (*)
  • <data-type field>: los tipos que permite son «date», «title», «text», «other», «authority» (y podriamos definir otros adicionales relevantes a configuraciones específicas de normalización del índice)
  • <sort option>: Opcional, puede ser ascendente o descendente.

Funcionando con varios DSpace

Hay muchas razones por las que nos puede interesar tener más de un DSpace, por mencionar unas cuantas: tener una instancia de producción y otra(s) de pruebas, servir a diferentes organizaciones, tener diferentes funcionalidades, preparar una migración, etc.

Y del mismo modo que hay múltiples razones, hay igualmente múltiples aproximaciones a esta situación. El post anterior planteaba un proceso simple, sin complicaciones, para tener múltiples instalaciones y funcionar alternativamente con ellas. En este post vamos a efectuar un recorrido rápido, no exhaustivo, por las alternativas existentes para tener instancias DSpace simultáneamente activas.

Un esquema simple, aunque efectivo para los objetivos que nos proponemos, de lo necesario para dspace sería: HW + sistema operativo + (servidor web y/o servidor de aplicaciones) + DSpace + bbdd, es decir:

Alternativa 1: Virtualización del HW por software
Es decir, emulación por software de un sistema físico con unas características de hardware determinadas: VMWare, VirtualBOX, Hyper_V, Xen-Server….. Si quieres realmente obtener copias idénticas de entornos, interesante en múltiples ocasiones, y aislamiento completo entre entornos, ésta es posiblemente vuestra opción.

 

Alternativa 2. Múltiples tomcat + bbdd + dspace
Instalar n Tomcat. No es trivial, pero se puede hacer con diferentes directorios de instalación, con scripts de aranque/parada diferenciados y diferentes puertos.
Instalar n bases de datos.
Instalar n Dspaces, con diferentes directorios dspace_src, los cual conducirá a ficheros de configuración separados, y por supuesto cada uno usando su base de datos correspondiente.
Además, cada Tomcat deberá apuntar al webapps de su dspace correspondiente …

 

 

Alternativa 3. Virtualizaciones Apache basada en Vhosts
En esta opción se debe usar Apache como front-end de los Tomcat.
Instalar y configurar n instancias Tomcat, n bases de datos y n Dspaces (como en la alternativa 2 anterior)
Con la directiva NameVirtualHost del servidor web Apache, crear n host virtuales, cada v-host dirigido a su Tomcat correspondiente. Más información sobre Vhosts, aquí

 

Alternativa 4 –> 1 tomcat + n BBDD + n dspace
Se puede usar un único Tomcat configurado para que use n directorios webapps correspondientes a n instancias Dspace. Pero claro, como siempre, (esto no hay manera de evitarlo) se necesitan n bases de datos diferentes y n instalaciones Dspace (con sus n directorios). Cada configuración Dspace apuntará a una base de datos diferente y hay que decirle a Tomcat donde está cada Dspace (bueno, cada aplicación jspui, xmlui, oai,….de Dspace) en el fichero server.xml de tomcat.

Algo así como

 
<Context path="/jspui_1" docBase="../dspace_1/webapps/jspui/" ..../>
<Context path="/jspui_2" docBase="../dspace_2/webapps/jspui/" ..../>
<Context path="/jspui_n" docBase="../dspace_n/webapps/jspui/" ..../>

<Context path="/xmlui_1" docBase="../dspace_1/webapps/xmlui/" ..../>
<Context path="/xmlui_2" docBase="../dspace_2/webapps/jspui/" ..../>
<Context path="/xmlui_n" docBase="../dspace_n/webapps/jspui/" ..../>

..

<Context path="/oai_1" docBase="../dspace_1/webapps/xmlui/" ..../>

 

 

 

Para profundizar más
Hay múltiples caminos y vías para tener más de una instalación de DSpace. Las líneas bocetadas en los párrafos anteriores pueden presentar características que para una organización en concreto no resulten aceptables. Quizá se quiera independizar o aislar fuertemente a los usuarios de desarrollo y producción, o las políticas TI no permitan virtualizaciones, etc..

En la página wiki.duraspace.org/display/DSPACE/MultipleDspaceOneServer encontraréis soluciones a algunos de los temas relacionados con la ejecución simultánea de varios DSpace.

Cómo instalar varios DSpace en paralelo

Durante los procesos de desarrollo e instalación de DSpace, surge la necesidad de tener varios DSpace (varias versiones diferentes, p.ej) ya que a veces nos interesa no ensuciar mucho nuestro instalación base y probar código nuevo, ….

Pues bien las siguientes instrucciones os van a dar una idea de como hay que hacer para tener varias versiones de DSpace funcionando a la vez para que luego cambiando una dirección del tomcat podamos acceder de uno a otro.

Vamos a suponer que queremos instalar un DSpace versión 1.x.x (se hace igual en todas las versiones) llamado dspace_1, con Postgresql en el cual crearemos una base de datos llamada dspace_1

En primer lugar descargamos el codigo fuente de un DSpace y hacemos el proceso de compilación mediante un maven.

Una vez hecho tenemos que tocar el fichero de configuración dspace.cfg y ahí tenemos que modificar un par de líneas con el siguiente contenido (modificar paths y puertos según instalación):

dspace.dir = /dspace_1

db.url = jdbc:postgresql://localhost:5432/dspace_1

Lo que hemos hecho es especificar una instalación de DSpace en el raiz, en una carpeta llamada dspace_1 y el segundo parámetro (db.url) que modificamos indica que estamos usando la base de datos dspace_1 mediante un conector postgresql.

Claramente en el proceso de instalación tenemos que crear una base de datos con el nombre acorde a lo especificado en db.url (en nuestro caso la base de datos se llama dspace_1).

Una vez creada la base de datos y guardado los cambios del dspace.cfg tenemos que hacer un ant fresh-install. Cuando acabe el proceso y obtengamos un success, antes de rearrancar el tomcat tenemos que modificar el fichero server.xml del tomcat para que apunte a nuestra instalación DSpace.

<Host name=»localhost»  appBase=»/dspace_1/webapps»
unpackWARs=»true» autoDeploy=»true»
xmlValidation=»false» xmlNamespaceAware=»false»>

 

Rearrancamos el tomcat y tenemos nuestro primer DSpace operativo con su propia base de datos asociada.

Ahora, si queremos otra versión de DSpace funcionando paralelamente a esta, tenemos que hacer el mismo proceso que antes, cambiando los nombres que de nuestra base de datos y la dirección de instalación del DSpace.  Suponiendo que quiero instalar un DSpace en el directorio raíz de nombre dspace_2, el proceso resumido sería el siguiente:

1- Hacer un maven

2- Modificar dspace.cfg de la carpeta target

dspace.dir = /dspace_2

db.url = jdbc:postgresql://localhost:5432/dspace_2

3- Crear una base de datos llamada dspace_2

4 – ant fresh-install

Con esto ya tenemos dos DSpace en nuestro ordenador, con dos bases de datos distintas

Ahora si queremos cambiar de una versión a otra tenemos que modificar el fichero server.xml haciendo que apunte el webapps de dspace_1 a dspace_2 o viceversa.

 

 

Búsquedas en Dspace

En DSpace, hasta la aparición de Discovery, existían dos tipos de búsqueda, la Simple y la Avanzada. La diferencia entre ambas radica en que en el caso de la Búsqueda Simple, el usuario introduce una palabra y el motor de búsqueda busca en todos los campos de los items (autor, título, fecha, etc), devolviendo cualquier coincidencia hallada, mientras que en la Búsqueda Avanzada el usuario puede, a través de una serie de filtros, indicar los campos donde buscar y combinarlos con el uso de los conectores lógicos AND, OR o NOT, depurando de esta manera los resultados de la búsqueda y adaptándolos a sus intereses. Todo ello aplicando los filtros que tenemos definidos en el search.analyzer, y que ya hemos explicado en otro post.

La Búsqueda Simple es rápida y directa, pero tiene el inconveniente de que si la consulta no es muy específica, los resultados pueden ser demasiado amplios, mientras que los obtenidos con la Búsqueda Avanzada pueden refinarse más.

En ambos casos, DSpace nos ofrece realizar una búsqueda en Todo DSpace, o bien restringirla a una Comunidad o Colección específica, cambiar el número de resultados que aparezcan en cada página y ordenar dichos resultados por relevancia, título, fecha de publicación o fecha de envío, tanto en orden descendente como en orden ascendente.

Para las búsquedas de múltiples términos, el motor de búsqueda de DSpace utiliza por defecto el operador booleano OR, que requiere que al menos uno de dichos términos esté presente. Este operador booleano de búsqueda utilizado por defecto, puede ser personalizado modificando la siguiente línea en el archivo dspace.cfg:

search.operator = OR

En caso de introducirse el operador AND, en las búsquedas de múltiples términos se requerirá que todos ellos estén presentes.


Modificando el Buscador Avanzado

El combo de selección de campos de búsqueda del Buscador Avanzado puede ser modificado para que incluya nuevos campos o se eliminen los existentes en la herramienta por defecto. Para ello, en el fichero dspace.cfg hay que buscar el bloque que comienza por ##### Fields to Index for Search ##### , donde pueden observarse varias líneas como las siguientes:

search.index.1 = author:dc.contributor.*
search.index.2 = author:dc.creator.*
search.index.3 = title:dc.title.*
search.index.4 = keyword:dc.subject.*
search.index.5 = abstract:dc.description.abstract

Si se desea añadir un nuevo campo de búsqueda al combo, hay que añadir una línea del tipo search.index.#. Mantener el ordinal de los índices de la forma 1,2,3,4… sin saltos y bien ordenado.. Para que la etiqueta mostrada sea comprensible por el usuario, sería necesario, además, modificar los ficheros Messages.properties y advanced.jsp o messages.xml correspondientes.

En el caso de modificar el combo de selección de campos de búsqueda, es importante reindexar DSpace para evitar que la búsqueda funcione de forma anómala, ejecutando el comando:

[dspace]/bin/dspace index-init

Configurando el buscador Lucene, sobre alfabetos, diacríticos, stemmers ….

A raiz de algunas preguntas que aparecieron últimamente en las listas de GUDE , sobre anomalías en los resultados de búquedas, me comprometí a escribir sobre el tema. No se si este post arrojará alguna luz o confundirá aún más…espero que lo primero.

Este post es aplicable a las configuraciones de buscador basadas en Lucene, no en SOLR, es decir, todas las 1.6 y anteriores y las 1.7 y 1.8 que no usen la facilidad Discovery…

Nuestro camino empieza a partir de la línea en dspace.cfg:

search.analyzer = org.dspace.search.DSAnalyzer

es decir, el analizador estándar de Dspace, que como bien nos recuerdan, está diseñado para textos en inglés. Y este analizador tiene los siguientes filtros, aplicados en cascada:

  • StandarFilter -> labores preparatorias de conversión del texto en cadena de palabras para el resto de filtros
  • LowerCaseFilter–> conversión a minúsculas
  • StopFilter –> Elimina las palabras gramaticales o «vacías» , que no aportan gran significado a la búsqueda, como artículos, conjunciones, preposiciones, etc, a partir de una lista de exclusión o «stopword». La lista original del filtro incorpora términos ingleses
  • PorterStemFilter–> El algoritmo de Raíces de Porter (es lo que significa Porter Stem) retira sufijos y otras terminaciones morfológicas comunes de las palabras inglesas. Y desde luego con el español, catalán, portugués, etc… no es donde ofrece sus mejores resultados….

Sobre PorterStemFilter: Básicamente mejora las búsquedas en inglés, obteniendo la raíz de una mayoría de términos. Así loving, loves, loved, lovable, .., se ven reducidas a lov- y se mejora sustancialmente la búsqueda. De manera colateral, y por eso su uso pasa desapercibido a los hispanohablantes, es un stemmer válido para algunos plurales, pero no todos, del español, ya que recordemos que no está diseñado para nuestro idioma.

Para los curiosos, el filtro implementa un proceso definido en 1979 por Martin Porter, y que puede verse aquí .. Como dice Porter, y otros antes y después, el algoritmo simplemente devuelve mejores resultados en las búsquedas automatizadas, en inglés. Mejores que si no se usa el filtro. Pero tiene, evidentemente, sus carencias y equivocaciones, ya identificadas por Porter.

Y de forma «histórica», como un conocimiento pasado de instalación en instalación, y que nosotros mismos hemos implentado, la mayoría de instalaciones con textos en español, portugués, francés… han añadido, a continuación en la cadena de transformaciones un nuevo filtro:

  • ISOLatin1AccentFilter, que reemplaza los caracteres acentuados del juego de caracteres ISO Latin 1 (ISO-8859-1) por sus equivalentes sin acentuar, es decir reemplaza á por a.

Con esta configuración, y con este orden de transformaciones, entre otros efectos, las palabras terminadas en es, son consideradas plurales (en inglés, pero plurales) y reducidas a su raíz, singular, por el PorterStemFilter. Por contra, las palabras terminadas en és, no son reducidas, pues para este Filtro, si terminas en és no eres un plural. Los resultados de la búsqueda son así dispares…y de ahí las preguntas en GUDE.

Un poco de wikipedia: Un signo diacrítico es un signo gráfico que confiere a los signos escritos, no necesariamente letra, un valor especial.
Son diacríticos, por ejemplo, los acentos ortográficos ( ´ ; ` ), la diéresis ( ¨ ), los signos empleados en el alfabeto fonético, como la oclusión (^) o la nasalización ( ~ ), la tilde de la ñ (virgulilla), la cedilla ( ¸ ) , la colita ( ˛ ), la coma ( , ), el doble acento agudo, ( ˝ ), el carón ( ˇ ), el breve ( ˘ ), el macrón ( ˉ ), el anillo ( ˚ ), el punto ( . ), el acento circunflejo ( ^ ) y el garfio ( ̉ ).

Otro poco de wikipedia: ISO 8859-1 es la norma de la ISO que define la codificación del alfabeto latino, incluyendo los diacríticos (como letras acentuadas, ñ, ç), y letras especiales (como ß, Ø), necesarios para la escritura de las siguientes lenguas originarias de Europa occidental: afrikáans, alemán, aragonés, asturiano, castellano, catalán, danés, escocés, español, feroés, finés, francés, gaélico, gallego, inglés, islandés, italiano, neerlandés, noruego, portugués, sueco y Euskera.
También conocida como Alfabeto Latino n.º 1 o ISO Latín 1.

Dicho esto, señalar que ISOLatin1AccentFilter ha sido retirado, «deprecated», por Apache Lucene y ha sido sustituido por ASCIIFoldingFilter (hubo un ISOLatinACCENT por el intermedio..). Los detalles de la sustitución, aquí.

Esta clase mejora la ISOLatin1Accent, ya que ésta solo trataba el primer bloque de BASIC Latin, y lo amplía incluyendo (y filtrando a sus caracteres base) una larga lista de extensiones: C1 Controls y Latin-1 Supplement, Latin Extended-A, Latin Extended-B, Phonetic Extensions, General Punctuation, Superscripts and Subscripts, etc…

Y también señalar que Lucene tiene un org.apache.lucene.analysis.es.SpanishAnalyzer, que puede ser declarado en dspace.cfg como sustitución a org.dspace.search.DSAnalyzer. Las implicaciones de esta sustitución, es que en vez de usar la cadena StandarFilter -> LowerCaseFilter–> StopFilter –> PorterStemFilter–> ISOLatin1AccentFilter, usa el filtro definido por SpanishAnalyzer, un SpanishLightStemFilter. Las malas noticias son que las pruebas que hemos realizado con este Stemmer son ¿decepcionantes?, con un tratamiento desconcertante de las palabras agudas acentuadas terminadas en o, a y e …os suena, ¿verdad? No obstante, nos reservamos una segunda evaluación más pausada sobre este filtro.

ya casi… Conclusiones o recomendaciones

  • Seguir adoptando y adaptando org.dspace.search.DSAnalyzer, no cambiar a org.apache.lucene.analysis.es.SpanishAnalyzer, en tanto Lucene no mejore el Stemmer de español incluido por defecto.
  • Posiblemente cambiar ISOLatin1AccentFilter por ASCIIFoldingFilter. No mejorará radicalmente los resultados de ninguna búsqueda, pero si en el futuro se retira de las librerías Apache, el build no os dará problemas
  • Dependiendo del idioma predominante en nuestro Repositorio, valorar quitar PorterStemFilter de la cadena del analizador. Si requerís un Stemmer, otra opción, que hemos probado y aparentemente no tiene los problemas reportados en las listas GUDE, aunque a lo peor tiene otros efectos colaterales, es invertir el orden de los filtros PorterStem e ISOLatin1/ASCIIFolding.

con lo que org.dspace.search.DSAnalyzer nos podría quedar así:

import org.apache.lucene.analysis.ASCIIFoldingFilter;
..
..
result = new StandardFilter(result);
result = new LowerCaseFilter(result);
result = new StopFilter(result, stopSet);
result = new ASCIIFoldingFilter(result);
result = new PorterStemFilter(result);

Ya terminamos

Sobre todo, recordar los objetivos de un analizador: simplemente devolver mejores resultados en la mayoría de consultas. Es una transacción. Si dejamos pelada la cadena de análisis, los resultados serán extremadamente precisos, en el sentido de ofrecer solo resultados coincidentes con la cadena de búsqueda, pero no estaremos aprovechando las posibilidades de Lucene y nos habremos dejado en el camino un porcentaje amplio de resultados relevantes. Vuestra decisión.

(y perdón por que esta vez me ha salido un rollo)
(y sacaremos un post con la configuración propuesta para SOLR)

Structure-builder, un comando para cómodos ¿o dubitativos?

Este es un artículo orientado principalmente a las instalaciones que están arrancando y por tanto definiendo la estructura jerárquica de comunidades-subcomunidades-colecciones. Structure-builder es una herramienta que puede ser una ayuda inestimable en las definiciones iniciales de una instalación, para organizar, reorganizar y volver a re-reorganizar y darle otra vuelta y otra, y …..

Permite la creación «masiva» de una estructura o jerarquía compleja y completa de forma rápida. Lamentablemente no sirve para gestionar permisos de colección u otras funcionalidades de administración de colección…. Y si nunca te has enfrentado a los permisos de un centenar de colecciones, no sabrás a qué me refiero.

El comando structure-builder usa la clase java org.dspace.administer.StructBuilder (deriva del package Org.Dspace.administer). No hay versión GUI, solo hay versión CLI, por lo que toca pelearse con la pantalla oscura del terminal e invocar con un [dspace]/bin/dspace xxxxxx

El comando require de los parámetros -f -o -e ¿autoexplicativos?

[dspace]/bin/dspace structure-builder -f (/path)/source.xml -o (/path)/output.xml -e admin@user.com

que busca en (/path)/ un fichero p.ej. source.xml con un estructura como:

 
Recomendamos validar la estructura con alguna herramienta de edición de xml antes de invocar el comando. Éste nos dejará en output.xml el resultado, que difiere del xml de entrada básicamente en que tendremos el parámetro adicional identifier añadido en las etiquetas <community> y <collection> con los handles asignados. Y claramente, si todo ha ido bien, voilà, nos habrá definido una bonita estructura.

Además de las etiquetas <import_structure> <community>, <collection> y <name>, que son las mínimas obligatorias, podríamos añadir los metadatos de comunidad y subcomunidad siguientes:

<description>
<intro>
<copyright>
<sidebar>

y de colección, que corresponden a las etiquetas

<description>
<intro>
<copyright>
<sidebar>
<license>
<provenance>

pues que ustedes lo definan cómodo, y rápido, y bien..

Activar Mirage y Discovery

Una de las principales propuestas de DSpace 1.7 fue la funcionalidad de búsquedas Discovery. Desarrollado, y cedido a la comunidad DSpace, por la empresa AtMire, el sistema de búsquedas por facetas (faceted search) es de indudable atractivo para las nuevas instalaciones y posiblemente imprescindible en instalaciones con un número de items elevado, pues las facilidades de búsqueda en esos entornos necesitan ser «reforzadas».

Faceted search, also called faceted navigation or faceted browsing, is a technique for accessing information organized according to a faceted classification system, allowing users to explore a collection of information by applying multiple filters (wikipedia)

Para poder manejar correctamente el nuevo sistema de búsquedas, se distribuye conjuntamente con la release, el tema Mirage (y ahora debe quedar claro que hablamos de XMLUI, no de JSPUI) como complemento visual de la funcionalidad Discovery.

En este post va a proceder a explicar como se hace para activar Mirage y Discovery en nuestro Dspace 1.7 o 1.8.

ACTIVACION DE MIRAGE

Tendremos que ir al fichero xmlui.xconf ubicado en [dspace-instalación]/conf/xmlui.xconf

Ahí vamos a quitar los comentarios referentes a la linea

<!–<theme name=»Atmire Mirage Theme» regex=».*» path=»Mirage/» />–>

Por lo que nos quedaría de la siguiente forma

<theme name=»Atmire Mirage Theme» regex=».*» path=»Mirage/» />

Una vez hecho esto, debemos comentar el tema que se estuviese usando, normalmente el tema Reference, es decir:

<theme name=»Default Reference Theme» regex=».*» path=»Reference/» />

y añadirle los comentarios, dejándola así.

<!– <theme name=»Default Reference Theme» regex=».*» path=»Reference/» /> –>

Por ahora no hemos hecho mas que cambiar un tema por otro. Llega ahora la hora de la verdad, activar el faceted search.

ACTIVACIÓN DE DISCOVERY

Activar Discovery supone en primer lugar sustituir las transformaciones (aspects) relacionadas con la búsqueda de XMLUI por las nuevas transformaciones que supone Discovery. Para ello, en el fichero xmlui.xconf ubicado en la ruta [dspace-instalación]/conf/xmlui.xconf tenemos que desactivar la linea referente al uso del SearchArtifact, y activar la correspondiente al Discovery. Así, hay que comentar la linea siguiente:

<aspect name=»Searching Artifacts» path=»resource://aspects/SearchArtifacts/» />

quedando la línea de la siguiente forma

<!–<aspect name=»Searching Artifacts» path=»resource://aspects/SearchArtifacts/» />–>

y siendo consecuentes, descomentar la línea de Discovery:

<!–<aspect name=»Discovery» path=»resource://aspects/Discovery/» />–>

quedando la línea de la siguiente forma

<aspect name=»Discovery» path=»resource://aspects/Discovery/» />

El siguiente paso que tenemos que modificar el fichero dspace.cfg, cambiando un par de parámetros:

event.dispatcher.default.consumers

y añadirle a la derecha el parámetro discovery quedando de la siguiente forma.

event.dispatcher.default.consumers = search, browse, discovery, eperson, harvester

La siguiente línea a tocar es la siguiente:

recent.submissions.count

En este caso pondremos el parámetro a cero quedando así la línea:

recent.submissions.count=0

Ya estamos finalizando. El último fichero que debemos comprobar es el dspace-sorl-search.cfg, ubicado en la misma carpeta que los anteriores ficheros. Simplemente chequear que la dirección de nuestro dspace/solr coincide con la especificada en el fichero ¿aún no habíamos dicho que Discovery se apoya en SOLR?… Aseguraros que SOLR está desplegado y funcionando en vuestro Tomcat.

Bien, buscamos la línea:

solr.search.server = http://localhost:8080/solr/search

y ahí debemos comprobar que el puerto de acceso es correcto, lo cambiamos al nuestro, 8180, 8888, el que usemos:

solr.search.server = http://localhost:8180/solr/search

Cuidado, que hay una serie de problemas reportados en JIRA respecto el uso de 127.0.0.1 y el uso de localhost, por lo que quizá se tenga que tantear. (CORREGIDO gracias a la aportación de Javier, de la Universidad de Piura, Perú)

Una vez editados estos ficheros, hay que reiniciar el tomcat para que se apliquen los cambios y ejecutar en línea de comandos el programa update-discovery-index para que se actualicen los índices del Discovery.

[dspace-instalación]/bin/dspace update-discovery-index

Una vez ejecutada, podemos ver los cambios en nuestro Dspace, un magnífico DSPace con búsqueda por facetas:

Ah, un último punto… las etiquetas/textos que usa Discovery no están traducidas, pues no se incluyen en el messages-es.xml del núcleo de Dspace. La opción más razonable es localizar su messages.xml en las fuentes de dspace-discovery y copiarlas, es decir añadirlas, al messages_es.xml que usemos de forma habitual (una vez traducidas, claro..)

Suerte (y gracias a Atmire…)

Estructura de los archivos de importación de items

A un repositorio normalmente le llega el momento de realizar una importación masiva de items, sin tener que recurrir al método de carga de uno en uno de la interfaz de usuario.  El método estándar de importación es mediante el formato simple de archivo  (simple archive format) y el uso por línea de comandos del import. El comando import tratará de importar una estructura de directorio-subdirectorios y ficheros con una estructura predeterminada (es decir la Simple archive format). Cada subdirectorio corresponde a un item final de nuestro Dspace y contiene una serie de ficheros para lograr la descripción completa del item.

Esta estructura es :

Realmente, los únicos ficheros importantes y/o necesarios son el dublin_core.xml y el contents. Aclaremos, normalmente tendremos ficheros de contenidos (bitstreams),  pero en sentido estricto, el fichero o ficheros de bitstreams podrían no existir en un item sólo con metadatos y en ese caso, el contents sería un fichero vacio. Extraño caso de uso del import, pero posible.

Contents
El fichero contents enumera los ficheros que van en el subdirectorio, junto con posibles indicaciones del bundle en el que deben ir.

Los bundles son agrupaciones de ficheros dentro del item, que separan los diversos tipos de ficheros de modo que DSpace pueda tratarlos de forma diferenciada. Los bundles más habituales son ORIGINAL, LICENSE, LICENSE_CC y THUMBNAIL de contenido obvio, pero pueden aparecer otros bundles como METADATA, ORE y TXT y seguro que me dejo alguno. De hecho, si en el fichero Contents se nombra un nuevo bundle, DSpace creará el objeto con el fichero correspondiente incluido en ese bundle. Queda luego la tarea de modificar DSpace para que incorpore tratamientos diferenciados a los ficheros del nuevo bundle así creado…porque, claro está, el usuario con permisos normales de DSPACE solo podrá ver los ficheros contenidos en el bundle ORIGINAL.

Un ejemplo de Contents (por ahí en medio hay tabuladores, ya que el fichero content está delimitado con tabuladores)

license.txt     bundle:LICENSE
Fichero1.pdf   bundle:ORIGINAL
Fichero2.pdf   bundle:ORIGINAL

Dublin_core.XML

A su vez el dublin_core.xml será algo similar a…

<dublin_core>
<dcvalue element="contributor" qualifier="author">Nombre</dcvalue>
<dcvalue element="language" qualifier="iso">es_ES</dcvalue>
<dcvalue element="title" qualifier="none">Título</dcvalue>
...
</dublin_core>

Bien, pues una vez tengamos esta super-estructura formada llega el momento de pelearse con el comando import. Pero eso es otra historia.