|
|
DSpace es un proyecto Maven escrito mayoritariamente en el lenguaje de programación JAVA. Se divide en varios subproyectos, y generalmente cada uno se corresponde con una aplicación en DSpace.
|
|
|
|
|
|
* [Arquitectura](#arquitectura)
|
|
|
* [Tecnología](#tecnología)
|
|
|
* [Modelo de contenidos](#modelo-de-contenidos)
|
|
|
* [Estructura de proyectos](#estructura-de-proyectos)
|
|
|
* [Aplicaciones](#aplicaciones)
|
|
|
* [Módulos](#módulos)
|
|
|
* [Discovery](#discovery)
|
|
|
* [Embargo](#embargo)
|
|
|
* [Authority Managment](#authority-managment)
|
|
|
* [Authorization](#authorization)
|
|
|
* [Resource Policy](#resource-policy)
|
|
|
* [Grupos Anonymous, Administrator y SEDICI-ADMIN](#grupos-anonymous-administrator-y-sedici-admin)
|
|
|
* [Internacionalización](#internacionalización)
|
|
|
* [Submission y Workflow](#submission-y-workflow)
|
|
|
* [Google-analytics](#google-analytics)
|
|
|
* [Estadísticas](#estadísticas)
|
|
|
* [Línea de comandos](#línea-de-comandos)
|
|
|
|
|
|
# Arquitectura
|
|
|
|
|
|
DSpace se divide en varias capas donde se alojan distintas aplicaciones que implementan sus funcionalidades.
|
|
|
* **Capa de Aplicación**:
|
|
|
* Incluye todas las herramientas que permiten al exterior (usuarios u otros sistemas) hacer uso del repositorio; por ejemplo XMLUI, JSPUI, módulo OAI, SWORD Server, entre otros.
|
|
|
* **Capa de lógica de negocios**:
|
|
|
* Mantiene la lógica transversal a todas las aplicaciones y que rige el funcionamiento interno del repositorio, estando representada por la API de DSpace.
|
|
|
* **Capa de almacenamiento**:
|
|
|
* Se encarga de todas las tareas específicas de guardado y recuperación desde almacenamiento secundario, es decir, bases de datos y sistema de archivos.
|
|
|
|
|
|
### API basada en Servicios
|
|
|
|
|
|
A partir de DSpace 6.X se realizó un refactoring de toda su API de tal forma de integrar [Hibernate](http://hibernate.org/) transformando la API de DSpace en una [API basada en Servicios](https://wiki.duraspace.org/display/DSPACE/DSpace+Service+based+api#DSpaceServicebasedapi-Servicebasedapi), dividiéndola en las siguientes partes:
|
|
|
|
|
|
* **Capa de Servicios**: esta capa es totalmente pública y puede ser utilizada por la Capa de Aplicación. Se divide en 2 _subcapas_:
|
|
|
* **_Servicios basados en la base de datos_**: servicios que darán acceso a operaciones CRUD sobre los objetos en base de datos y a operaciones propias de la lógica de cada objeto.
|
|
|
* **_Servicios de la capa de negocios_**: servicios que se corresponden a los antiguos *Managers* en DSpace (p.e. AuthorizationManager).
|
|
|
* **Capa de acceso a la base de datos**: esta capa sólo puede ser accedida únicamente desde alguna de los servicios anteriores, y está habitada para acceder a la base de datos.
|
|
|
* **Objetos de base de datos**: estos son objetos que se corresponden unívocamente con las tablas en la base de datos, y sólo tienen métodos getters y setters sobre las columnas de las tablas.
|
|
|
|
|
|
## Modelo de contenidos
|
|
|
|
|
|
El repositorio se organiza en una o más comunidades de nivel base que se organizan jerárquicamente en subcomunidades, que son como espacios de trabajo. Las **colecciones** son los “estantes” dentro de las **comunidades**, que agrupan contenido relacionado. Los **ítems** son las obras que van en los estantes y que se pretende que el público encuentre. Los **metadatos** describen al recurso almacenado. Los **bitstreams** son la representación digital del recurso.
|
|
|
|
|
|

|
|
|
|
|
|
A nivel relacional podemos decir que las comunidades poseen subcomunidades y colecciones, las colecciones poseen ítems, los ítems se componen de bundles, y cada bundle posee bitstreams (archivos).
|
|
|
|
|
|

|
|
|
|
|
|
## Tecnología
|
|
|
|
|
|
**Intefaz gráfica**: actualmente, DSpace posee dos alternativas para la implementación de la GUI: XMLUI y JSPUI.
|
|
|
A comienzos del 2016 se comenzó a desarrollar la [nueva interfaz de DSpace](http://www.slideshare.net/tdonohue/introducing-the-new-dspace-user-interface), basada en Angular2.
|
|
|
|
|
|
**Base de datos**: Se puede utilizar alguno de los siguientes DBMS:
|
|
|
* [PostgreSQL](https://en.wikipedia.org/wiki/PostgreSQL)
|
|
|
* [Oracle MySQL](https://en.wikipedia.org/wiki/MySQL)
|
|
|
|
|
|
En la base de datos creada por DSpace se guardan todos los datos correspondientes al modelo de DSpace
|
|
|
|
|
|
**Indexación**: DSpace ofrece la posibilidad de usar un motor de indexación para realizar búsquedas sobre el repositorio. Estos son:
|
|
|
* [Apache Solr](https://en.wikipedia.org/wiki/Apache_Solr)
|
|
|
* [ElasticSearch](https://en.wikipedia.org/wiki/Elasticsearch) (deprecated en DSpace 6.X).
|
|
|
|
|
|
Cualquiera de estos motores ofrece características como búsquedas a texto completo (full-text search), resaltado de búsquedas (hit highlighting), búsquedas facetadas (faceted search), indexación en tiempo real, caché, así como una interfaz para su administración y una API REST.
|
|
|
|
|
|
**Compilación e instalación**: Para compilar los distintos proyectos que componen a DSpace, es necesario disponer de [Apache Maven](https://en.wikipedia.org/wiki/Apache_Maven), el cual se encarga de resolver las dependencias de librerías y módulos, de ordenar los proyectos a compilar y de armar los paquetes finales, como WAR o JAR.
|
|
|
|
|
|
Luego, se usan estos paquetes creados por maven para efectuar los procedimientos sobre la instalación final usando [Apache Ant](https://en.wikipedia.org/wiki/Apache_Ant). Ant se ocupa de tareas como migración de base de datos, test, instalación, actualización, entre otras tareas.
|
|
|
|
|
|
### Tecnologías utilizadas en RID-UNRN
|
|
|
|
|
|
En RID-UNRN se decidió utilizar la siguiente combinación de tecnologías para trabajar con DSpace:
|
|
|
* **JSPUI** para la interfaz gráfica.
|
|
|
* **PostgreSQL** como DBMS.
|
|
|
* **Apache Solr** como motor de indexación.
|
|
|
|
|
|
|
|
|
Para saber más acerca de las distintos componentes en DSpace leer el capítulo [Architechture](https://wiki.duraspace.org/display/DSDOC6x/Architecture) en la wiki de DSpace.
|
|
|
|
|
|
## Estructura de proyectos
|
|
|
|
|
|
DSpace es una plataforma escrita en JAVA y dividido en una jerarquía de proyectos Maven.
|
|
|
|
|
|
#### Directorios importantes en DSpace
|
|
|
|
|
|
Básicamente se tienen 3 directorios principales:
|
|
|
* **directorio de código fuente**
|
|
|
* **directorio de instalación**
|
|
|
* **directorio de aplicaciones o webapps**
|
|
|
|
|
|
Se puede encontrar una descripción detallada de éstos en la sección [Directory and Files](https://wiki.duraspace.org/display/DSDOC6x/Directories+and+Files) en la documentación oficial.
|
|
|
|
|
|
## Proyectos Maven
|
|
|
|
|
|
DSpace es un proyecto maven compuesto de otros subproyectos maven.
|
|
|

|
|
|
|
|
|
Cada proyecto maven tiene un archivo [pom.xml](https://maven.apache.org/guides/introduction/introduction-to-the-pom.html) asociado, que define la configuración del proyecto: nombre, propiedades, dependencias a librerias, dependencias a otros subproyectos, etc...
|
|
|
|
|
|
#### Overlays
|
|
|
|
|
|
Los [overlays](https://maven.apache.org/plugins/maven-war-plugin/overlays.html) permiten reutilizar y sobreescribir con cambios propios el código de otro proyecto maven. Esto sucede, por ejemplo, entre los proyectos **dspace-jspui** y **dspace/modules/jspui** en DSpace.
|
|
|
|
|
|
* Permiten "extender" una aplicación web (war), agregando nuevos elementos o redefiniendo los existentes.
|
|
|
* En maven, se hace overlay siempre que una aplicación web depende de otra aplicación web.
|
|
|
* Maven permite configurar explícitamente el orden en el que se realizará el overlay y qué recursos deben considerarse en el proceso
|
|
|
|
|
|
A modo ilustrativo, se muestra un overlay entre dos proyectos maven:
|
|
|
|
|
|

|
|
|
|
|
|
## Aplicaciones
|
|
|
DSpace se compone de varias aplicaciones y las más utilizadas son las siguientes:
|
|
|
|
|
|
* [XMLUI](https://wiki.duraspace.org/display/DSDOC6x/XMLUI+Configuration+and+Customization): Basado en el framework de aplicaciones web llamado [Apache Cocoon](https://en.wikipedia.org/wiki/Apache_Cocoon), y se divide en capas (estilos, temas y aspectos) que permiten su extensión y modularización mediante el uso de distintos archivos XML.
|
|
|
* [JSPUI](https://wiki.duraspace.org/display/DSDOC6x/JSPUI+Configuration+and+Customization): Basado en [JavaServer Pages](https://en.wikipedia.org/wiki/JavaServer_Pages), y utiliza JavaServlets para manejar la lógica de negocio y distintas páginas JSP que producen la vista en HTML para el usuario final.
|
|
|
|
|
|
* [REST](https://wiki.duraspace.org/display/DSDOC6x/REST+API): la aplicación REST API provee un punto de acceso externo a DSpace para realizar operaciones CRUD sobre las Comunidades, Colecciones, Items y Bitstreams.
|
|
|
|
|
|
* [SWORD](https://wiki.duraspace.org/display/DSDOC6x/SWORDv2+Server): aplicación que implementa el protocolo de interoperabilidad [sword](http://swordapp.org/) y permite el depósito remoto de items en el repositorio.
|
|
|
|
|
|
* [OAI](https://wiki.duraspace.org/display/DSDOC6x/OAI): aplicación que permite la exposición de metadatos del repositorio acorde a lo especificado por el protocolo [oai-pmh](https://www.openarchives.org/pmh/). Mediante ciertas configuraciones puede activarse como cosechador también.
|
|
|
|
|
|
* [SOLR](https://lucene.apache.org/solr/): esta aplicación es utilizada para indexar todo el contenido y permitir realizar operaciones complejas sobre el contenido del repositorio de una forma rápida. Los módulos que utilizan SOLR son *Discovery* (búsqueda en el repositorio), *OAI* (exposición de contenido mediante OAI-PMH) y *Statistics* (estadísticas del repositorio).
|
|
|
|
|
|
## Módulos
|
|
|
|
|
|
### Discovery
|
|
|
|
|
|
**Discovery** es el módulo de búsqueda de contenido en el repositorio. Este módulo habilita la búsqueda facetada y el browsing o exploración del repositorio.
|
|
|
|
|
|
La configuración de Discovery se encuentra separada en 2 archivos:
|
|
|
* **Configuración General:** [dspace-install-dir/config/modules/discovery.cfg](https://wiki.duraspace.org/display/DSDOC6x/Discovery#Discovery-GeneralDiscoverysettings(config/modules/discovery.cfg))
|
|
|
* **Configuración de la interfaz:** [dspace-install-dir/config/spring/api/discovery.xml](https://wiki.duraspace.org/display/DSDOC6x/Discovery#Discovery-ModifyingtheDiscoveryUserInterface(config/spring/api/discovery.xml))
|
|
|
|
|
|
### Embargo
|
|
|
|
|
|
El módulo de Embargo es utilizado para asignar embargos sobre los ítems del repositorio. Un **embargo** es una restricción sobre el acceso a un determinado ítem luego de su publicación durante un determinado *período de tiempo*, ya sea a sus metadatos y bitstreams, o únicamente a sus bitstreams. Durante este período de tiempo, sólo el submitter de una publicación (o algun usuario con permiso de ADMIN sobre la misma) puede acceder al contenido embargado y la publicación se mantiene restringida al resto del público.
|
|
|
|
|
|
#### Funcionamiento del módulo de embargo actual
|
|
|
El módulo de embargo actual se basa en la existencia de "Resource Policies" restrictivas sobre el acceso a un determinado ítem. Una [ResourcePolicy](https://wiki.duraspace.org/display/DSDOC6x/Embargo#Embargo-ResourcePolicy) es un elemento del modelo de DSpace que determina permisos sobre los DSpaceObjects que habitan el repositorio, p.e. permiso de LECTURA, MODIFICACIÓN, etc.
|
|
|
|
|
|
### Authority Managment
|
|
|
|
|
|
#### ¿Qué es un autoridad?
|
|
|
|
|
|
Una **autoridad** es una fuente de valores fijos para un dominio determinado, donde cada valor es identificado por una clave.
|
|
|
|
|
|
La necesidad de unificar los puntos de acceso a un determinado catálogo bibliográfico y entidad asociadas, como autores, es el origen del concepto de autoridades.
|
|
|
|
|
|
#### Herramienta de gestión de autoridades
|
|
|
|
|
|
DSpace provee distintos mecanismos para permitir el uso de autoridades sobre los metadatos:
|
|
|
1. Mediante el uso de archivos locales en texto plano que mantengan una jerarquía/conjunto de valores de autoridad.
|
|
|
|
|
|
2. Mediante la conexión a un sistema externo que administra autoridades.
|
|
|
> P.e. en otro repositorio, la administración de autoridades podría ser sustenta sobre el software de gestión de contenidos **Drupal** y varios módulos complementarios.
|
|
|
|
|
|
### Authorization
|
|
|
|
|
|
El módulo de autorización determina qué acciones puede realizar cierto usuario. Está basado en un conjunto de entidades llamadas "Resource Policies", donde cada una tiene información de [permisos](https://github.com/crai-unrn/DSpace/blob/master/dspace-api/src/main/java/org/dspace/core/Constants.java#L75-L123).
|
|
|
|
|
|
#### Resource Policy
|
|
|
Una [ResourcePolicy](https://wiki.duraspace.org/display/DSDOC6x/Embargo#Embargo-ResourcePolicy) es un elemento del modelo de DSpace que determina permisos sobre los DSpaceObjects que habitan el repositorio, p.e. permiso de LECTURA, MODIFICACIÓN, ADMIN, etc.
|
|
|
|
|
|
policy_id | resource_type_id | resource_id | action_id | start_date | end_date | rpname | rptype | rpdescription | eperson_id | epersongroup_id | dspace_object
|
|
|
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
|
|
|
37266 | 4 | 736 | 11 | | | | TYPE_CUSTOM | Permiso de ADMIN Comm XXY | | 1a93579f-b8dc-XXXX-YYYY-b7fe91083763 | 47140beb-2650-AAAA-BBBB-28d0b1ee3b98
|
|
|
|
|
|
#### Grupos Anonymous y Administrator
|
|
|
Los **grupos** (Group) en DSpace son entidades que agrupan usuarios (EPerson) y a las que pueden adjudicarseles determinados permisos.
|
|
|
|
|
|
* **Anonymous**: este grupo conteniene todos los usuarios que ingresan a DSpace (que inician sesión o no). Cualquier usuario tiene pertencencia a este grupo, independientemente si pertenece a otros grupos o no. Muchas veces, este grupo sirve para determinar ciertas cuestiones de la aplicación, p.e.: "si (User in Anonymous) entonces --> Hacer Submit a Colección de Autoarchivo".
|
|
|
|
|
|
* **Administrator**: este grupo contiene a todos los usuarios que son Administradores del Sistema en DSpace. El usuario que pertenezca a este grupo tiene casi dominio total de la aplicación a través de la backend web.
|
|
|
|
|
|
* **Bibliotecas**: este grupo contiene a todos los bibliotecarios propios del RID-UNRN. Estos usuarios tienen permiso de *Administrador* sobre todas las colecciones relacionadas a las tesis, y pueden eliminar/crear/modificar cualquier contenido (Comunidad-Colección-Item-Bundle-Bitstream) del repositorio.
|
|
|
|
|
|
### Internacionalización
|
|
|
DSpace cuenta con una interfaz completamente internacionalizable. Además de proveer un amplio numero de idiomas en la que su interfaz esta internacionalizada (p.e. inglés, español, italiano, francés, alemán, etc...), provee mecanismos para modificar o crear nuevos mensajes de internacionalización para un idioma nuevo o ya existente.
|
|
|
|
|
|
DSpace desarrolló el proyecto [dspace-xmlui-lang](https://github.com/DSpace/dspace-xmlui-lang) para traducir comunitariamente los archivos de i18n. Desde este proyeto se importan todos los archivos de i18n utilizados por XMLUI.
|
|
|
|
|
|
### Submission y Workflow
|
|
|
El _Submission_ y el _Workflow_ son los mecanismos más importantes que provee para permitir el ingreso de bitstreams al repositorio de parte de los usuarios (E-Person) vinculados al repositorio, a través de una interfaz web, amigable y guiada.
|
|
|
|
|
|
#### Submission
|
|
|
El Submission es un conjunto de pasos o *steps* que permiten enviar un nuevo item al repositorio a través de un *formulario de envío*. El formulario consta consta de un conjunto de páginas que permiten describir los metadatos del item. Cada step se corresponde con una o más páginas del formulario de envio, y permiten la interacción entre los usuarios y la aplicación. El proceso termina una vez todos los pasos fueron ejecutados, y tras su finalización, el item enviado por el usuario pasa al proceso de _Workflow_ para una revisión por parte de los administradores correspondientes.
|
|
|
|
|
|
#### Workflow
|
|
|
El Workflow es un mecanismo para la revisión de los items enviados mediante el Submission. Determina cuándo un envío está apto o no para su archivo en el repositorio. Básicamente, el workflow define un conjunto de *pasos* o *steps* a seguir. Cuando estos pasos son ejecutados *sin interrupción* hasta el final, entonces el envío es archivado en el repositorio.
|
|
|
|
|
|
Existen 2 variante para la implementación del Workflow en DSpace: "Legacy 3-step Workflow" y el "XMLWorkflow".
|
|
|
|
|
|
### Google-Analytics
|
|
|
Google Analytics es una herramienta de analítica web de la empresa Google. Ofrece información agrupada del tráfico que llega a los sitios web según la audiencia, la adquisición, el comportamiento y las conversiones que se llevan a cabo en el sitio web.
|
|
|
|
|
|
Se pueden obtener informes como el seguimiento de usuarios exclusivos, el rendimiento del segmento de usuarios, los resultados de las diferentes campañas de marketing online, las sesiones por fuentes de tráfico, tasas de rebote, duración de las sesiones, contenidos visitados, conversiones (para ecommerce), etc. Este producto se desarrolló basándose en la compra de Urchin (hasta entonces la mayor compañía de análisis estadístico de páginas web) por parte de Google.
|
|
|
|
|
|
#### Configuración
|
|
|
En el archivo {dspace.dir}/config/modules/google-analytics.cfg asegurarse que las siguientes configuraciones esten descomentadas
|
|
|
|
|
|
* application.name = Dummy project
|
|
|
(la documentación de DSpace hace la siguiente aclaracion con respecto a este valor: _"Not sure if this property is required but it was in the example code provided by Google. Please do not delete."_, por lo que no deberia modificarse ese valor)
|
|
|
|
|
|
* table.id = ga:12345678
|
|
|
* loguear en el dashboard de google analytics
|
|
|
* ir a la sección de admin
|
|
|
* seleccionar la opción _ver configuración_ en la columna que dice "_ver todos los datos del sitio web_"
|
|
|
* La propiedad es _ID de vista_ (a pesar de la confusión que podrían generar los nombres) este valor debe reemplazar la parte numerica del ejemplo de arriba
|
|
|
|
|
|
* account.email = El email que se genera automáticamente cuando se crea el proyecto en https://console.developers.google.com/project
|
|
|
|
|
|
* certificate.location = _La ruta al archivo P12 que descargamos previamente_
|
|
|
|
|
|
* authorization.admin.usage = true
|
|
|
|
|
|
#### Links útiles
|
|
|
https://wiki.duraspace.org/display/DSDOC5x/DSpace+Google+Analytics+Statistics
|
|
|
https://developers.google.com/analytics/devguides/reporting/core/v3/
|
|
|
https://developers.google.com/identity/protocols/OAuth2ServiceAccount
|
|
|
https://console.developers.google.com/iam-admin/projects
|
|
|
https://www.google.com/analytics
|
|
|
|
|
|
|
|
|
### Estadísticas
|
|
|
Paralelamente se cuenta con un módulo de estadísticas provisto por Apache SOLR que registra datos crudos de todos los accesos realizados al sistema. Para utilizar este modulo es necesario tener un mínimo conocimiento del lenguaje de consultas de SOLR
|
|
|
|
|
|
La forma mas sencilla de utilizarlo es ingresando a la dirección del servidor de SOLR (indicada en la propiedad solr.server del archivo de configuración local.cfg) donde se provee una interfaz relativamente amigable para realizar las consultas
|
|
|
|
|
|

|
|
|
|
|
|
DSpace provee una herramienta para interactuar con las estadísticas de SOLR, el uso esta herramienta esta especificado en
|
|
|
|
|
|
https://wiki.duraspace.org/display/DSDOC4x/Managing+Usage+Statistics
|
|
|
|
|
|
## Línea de comandos
|
|
|
|
|
|
A través del interfaz CLI de DSpace se pueden ejecutar diversas operaciones de mantenimiento. Este script se encuentra en [DSPACE_INSTALL_DIR]/dspace/bin/dspace. Ejecutando el comando `dspace/bin/dspace -h` se obtiene un listado de todos los comandos a ejecutar.
|
|
|
|
|
|
La CLI de DSpace es utilizada en combinación con las cronjobs del sistema para que periódicamente se ejecuten tareas de mantenimiento automáticas.
|
|
|
|
|
|
Para una guía completa de todas las operaciones posibles a ejecutar desde línea de comandos, leer la [documentación oficial](https://wiki.duraspace.org/display/DSDOC6x/Command+Line+Operations) en DSpace. |