Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Custom presentation & dynamic components

Statistics

Network

Metrics

Integration with the basic DSpace data model

 

     Discovery is required for DSpace-CRIS to work furthermore it will be the only search provider supported out-of-box also in the standard DSpace since 6.0

Please note that Discovery is the default search provider since DSpace 4.0, whereas in previous releases of DSpace it needs to be manually enabled.

The DSpace-CRIS build of DSpace enables it by default also in 1.8.x, 3.x. it MUST NOT be turned off

 

 

Browse 

DSpace-CRIS extends the DSpace browse system to all the CRIS entities.

This means that the user is able to configure browsing on researchers, organization units, projects and second level dynamic objects such as Journals, Events, Laboratories, and so on for any entity that the user has defined.

The configuration syntax follows the same rules of the standard DSpace configuration.

There are two types of browse:

1.      Full, single level browse, which just list in a specific order the instances of an Entity class: Researchers, OrgUnits, etc.

2.      Metadata, two levels browse, that provide a first page listing the values of a configured metadata leading to a second page where the instances that have the clicked value for that metadata are listed

Full, single level browse 

The syntax to configure full browse (single level) is

webui.browse.index.<n> = <index-name>:<display-type>:<sort-name>[:DESC]

index-name is used to refer to further configurations as the list of columns to show and generate the i18n keys for the navigation (menu links, page header, etc.)

 

display-type can be anything except metadata and metadataAuthority that are reserved word for the two level browse. It is recommended to use the prefix the shortname of the Class with the word cris

i.e. crisrp for researchers, crisou for orgunits, crispj for project and finally cris<shortname of the dynamic object>; again, this is just a convention to make the configuration more readable but any word than metadata or metadataAuthority can be used to define a full browse. A general name is useful when you want create several browse on the same entity (for example org unit) that explore different subsets (i.e. internal structure, external organization, etc.). Indeed, using the browse name it is possible to define filter to apply to the general SOLR query, see “Apply filters to the browse indexes

 

sort-name is used to refer to the sorting configuration described below

 

DESC if used make the descending order the default for that browse

webui.itemlist.sort-option.<n> = <sort-name>:<metadata>:<value-type>

metadata to give access to the properties of the cris objects using a DSpace like metadata syntax you need to prefix the shortname of the PropertiesDefinition with the shortname of the entity class (same of above, crisrp, crisou, etc.). So if you want to use for sorting the property defined with shortname “myproperty” in researcher entity you need to write crisrp.myproperty

When the property that you are referring to is a pointer you can use the qualifier to access to property of the pointed object, i.e. crisrp.dept.name will be the name of the orgunit assuming that dept is the shortname of a property that keep the relation between the researcher and the orgunits. You can also use virtual metadata, see “ItemEnhancer: virtual metadata”.

 

value-type: can be one of title, text, date or any other alias used to configure a Sort Plugin, see https://wiki.duraspace.org/display/DSDOC3x/Configuration#Configuration-OtherBrowseOptions 

 

To configure which information/columns are displayed for any objects is possible to use the following configuration property

webui.itemlist.<entity >.columns = <field1>(rendering), field2 (rendering), … fieldN

for example:

webui.itemlist.crisrp.columns = crisrp.fullName(cristitle), crisrp.translatedName, crisrp.email

the configuration defined for a specific entity (crisrp, item, etc.) can be overridden for a specific browse using the following configuration

webui.itemlist.browse.rpname.columns = crisrp.fullName(cristitle), crisrp.email

Metadata, two levels browse 

As for the DSpace item it is possible to define browse over a metadata (i.e. authors of an item). In this way the system will produce a two levels browse, the first level will show in a paginated way all the values of the metadata (i.e., all the authors) clicking on a single value will show the list of items that match the selection. Applying this concept to the CRIS entities, you can for example build a two level browse showing all the departments of the researchers and for any department the list of researchers affiliated

webui.browse.index.<n> = <index-name>:metadata:<schema.element.qualifier>:<text|date>

for example

webui.browse.index.6 = rpdept:metadata:crisrp.dept:text

index-name is used as reference in the column definition configuration to apply specific configuration for that browse

 

schema.element.qualifier defines the field upon which the browse is build

 

text|date specify if the values must be interpreted as String or Dates for sorting

 

Apply filters to the browse indexes 

It could be useful to restrict the set of objects for a specific browse applying additional SOLR filter query. To configure a filter for a specific browse you can define the following configuration property

browse.solr[BA1] .<display-type>.filter = <your-solr-filter-query>

display-type is the value of the second part of the browse configuration. It is metatadata or metadataAuthority for two levels browse or something else for the configuration of a full browse index.

For example

browse.solr.item.filter = dateissued:[2000 TO *]

It will limit the browse to the items published after the 2000,

browse.solr.crisou.filter = crisou.relationwith_authority:"ou00001"

It will limit the browse to the OrgUnits that have the field “relationwith” valorized with a pointer to the OrgUnit ou00001.

ItemEnhancer: virtual metadata 

The enhancers allow to access information not immediately available in an object (item or cris object) as it was a direct metadata/field of the object. In this way is for example possible to access the item author’s affiliation as it was an item metadata.

There are three type of enhancer:

-          org.dspace.app.cris.discovery.CrisItemEnhancer, used to add dynamically to the item information from linked CRIS entities as it was metadata of the item

-          org.dspace.app.cris.discovery.CrisEnhancer, used to add dynamically to the CRIS entity information from linked CRIS entities as it was metadata of the current CRIS entity

-          org.dspace.app.cris.discovery.CrisNestedEnhancer, used to add dynamically to the CRIS entity information from the nested CRIS entities as it was metadata of the current CRIS entity

The enhancers are configured in the spring file [installDir]/config/spring/cris/cris-metadata-enhancers.xml

Below are included the snipped of an CrisItemEnhancer in the default configuration

<bean class="org.dspace.app.cris.discovery.CrisItemEnhancer">

            <property name="alias" value="author" />

            <property name="metadata">

                        <list>

                                   <value>dc.contributor.author</value>

                        </list>

            </property>

            <property name="clazz">

                        <value>org.dspace.app.cris.model.ResearcherPage</value>

            </property>

            <property name="qualifiers2path">

                        <map>

                                   <entry key="dept">

                                               <value>dept</value>

                                   </entry>

                        </map>

            </property>

</bean>

The properties have the following meaning

-          alias, is the “element” of the virtual field

-          qualifiers2path, is a map whose key are the “qualifier” of the virtual field and the value the path, evaluated as EL, in the target object

-          metadata, is the list of item metadata to consider that linkage the item with the CRIS object

-          clazz, is the canonical name of the linked CRIS Entity class

The previous example will create the virtual metadata crisitem.author.dept that will be evaluated as valorized with the department of the researcher linked to the item through the metadata dc.contributor.author.

The following snippet show a CRISEnhancer and a CRISNestedEnhancer

<bean class="org.dspace.app.cris.discovery.CrisEnhancer">

                <property name="clazz">

                               <value>org.dspace.app.cris.model.Project</value>

                </property>

                <property name="alias" value="coinvestigators" />

                <property name="qualifiers2path">

                               <map>

                                               <entry key="dept">

                                                               <value>dept</value>

                                               </entry>

                               </map>

                </property>

</bean>

<bean class="org.dspace.app.cris.discovery.CrisNestedEnhancer" scope="prototype">

                <property name="applicationService" ref="applicationService" />

                <property name="nestedClazz" value="org.dspace.app.cris.model.jdyna.ProjectNestedObject" />

                <property name="clazz">

                               <value>org.dspace.app.cris.model.Project</value>

                </property>

                <property name="alias" value="grant" />

                <property name="qualifiers2path">

                               <map>

                                               <entry key="agencies">

                                                               <value>agencies</value>

                                               </entry>                                                             

                               </map>

                </property>

</bean>

The first one allow to use crispj.dept instead of cripj.coinvestigators.dept in this way the field of the target OrgUnit are available for indexing when working on the Project.

The second one allows access to the agencies (the value) of the nested object named grant (the alias) using the metadata crispj.agencies where agencies is the key of the qualifiers2path map.

Search configuration: indexes, facets 

The discovery module used by DSpace-CRIS has been extended to be able to manage also CRIS Entities. In the [installDir]/config/spring/api/discovery-solr.xml file a new implementation of the SearchService/ IndexingService has been defined

<bean class="org.dspace.app.cris.discovery.CrisSearchService"                                                                                                                           id="org.dspace.discovery.SearchService"/>

New special entries can be used in the definition of the DiscoveryConfigurationService in the [installDir]/config/spring/api/discovery.xml file to allow specific configuration for entity type:

<bean  id="org.dspace.discovery.configuration.DiscoveryConfigurationService"

            class="org.dspace.discovery.configuration.DiscoveryConfigurationService">

            <property name="map">

                        <map>

                                   <entry key="default" value-ref="defaultConfiguration" />

                                   <entry key="site" value-ref="homepageConfiguration" />

                                   <entry key="dspacebasic" value-ref="dspaceConfiguration" />

                                   <entry key="crisrp" value-ref="crisRPConfiguration" />

                                   <entry key="crisproject" value-ref="crisPJConfiguration" />

                                   <entry key="crisou" value-ref="crisOUConfiguration" />

                                   <!-- <entry key="crisjournal" value-ref="crisDOJournalConfiguration" /> -->

                                   <!-- <entry key="123456789/7621" value-ref="defaultConfiguration"/> -->

                        </map>

                        …

The map containing all the settings, the key is used to refer to the page/scope of the search, the "site", a community/collection handle or an entity type, the value-ref is a reference to a spring bean that actually define the DiscoveryConfiguration format.

default is the configuration key used if a not more specific one exist for the current search/indexing scope

dspacebasic is the fallback configuration key for all the standard DSpace Objects: Items, Collections and Community

crisrp is the configuration key used searching/indexing a ResearcherPage

crispj is the configuration key used searching/indexing a Project

crisou is the configuration key used searching/indexing an OrgUnit

cris<shortname> is the configuration key used searching/indexing a Dynamic Object with <shortname>, for example journal

The searching scope is defined by the UI implicitly when the search is performed from a “specific page” as a community or collection home page or explicitly when the user choose to restrict the search to a specific subset.

During the indexing phase the scope/configuration key is defined as follow

Standard DSpace objects such Items, Collections and Communities, the configuration key is the handle of the object if not found the parent object handle will be used as fallback until to the dspacebasic or default key

CRIS Objects such ResearcherPages, OrgUnits, Projects, Dynamic Objects, the configuration key is dedined the by the entity type with fallback to the default key

To configure a DiscoverySearchFilter, DiscoverySearchFilterFacet, DiscoverySortFieldConfiguration the “DSpace like metadata syntax” previously explained, see metadata in the Browse customization.

Custom Indexer Plugins

The following IndexerPlugins has been added in the [installDir]/config/spring/api/discovery.xml file

Additional indexing plugin to implement the CRIS browse system via SOLR

<bean id="crisBrowseIndexer" scope="prototype"

            class="org.dspace.app.cris.discovery.CrisBrowseSolrIndexPlugin">

</bean>

Additional indexing plugin to implement CRIS relations preferences, see “Relation Preference Management”, via SOLR

<bean id="crisRelationPreferenceIndexer"            class="org.dspace.app.cris.discovery.RelationsPreferencesSolrIndexPlugin">

            <property name="applicationService" ref="applicationService" />

</bean>

Additional indexing plugin to add bitstream identifier to item SOLR document, this is used by the extended statistics functionalities as bitstream download are associated to the item using SOLR join query, see “Statistics configuration” for further details

<bean id="bitstreamIndexer" class="org.dspace.app.cris.discovery.BitstreamSolrIndexer" />

Additional indexing plugin to add resource type in human format readable to SOLR document

<bean id="resourceTypeIndexer" class="org.dspace.app.cris.discovery.ResourceTypeSolrIndexer" />

Additional indexing plugin to add cris authoritylookup for authority framework works with dynamic resource type to SOLR document

<bean id="researchObjectAuthorityLookupIndexer"             class="org.dspace.app.cris.discovery.ResearchObjectAuthorityLookupSolrIndexer />

Global search

What is it? How is it configured[BA2] ? 

Custom JSPs 

To customize the presentation of the data of a CRIS entity other than rearranging the order of the data inside a box and deciding positioning, see “Group Metadata, aka boxes”, the system allow you to define your custom JSPs used instead of the out-of-box layout.

You can use custom JSPs for example to add javascripts both in the visualization mode than in edit mode, show content retrieved from external systems, add static or dynamic content implementing the components or processors extension points (see below).

      In this case, even if the configuration is edited via UI, the layout does not change, because it is defined by the JSP fragment.

CRIS Components & processors[BA3]  

The system allows extension thought the use of component that can extends the presentation, tools and functionalities available for any entities.

The components are registered in the [installDir]/config/spring/cris/cris-components.xml spring file. For any CRIS entity type has been defined a service where that manage the components, these services need to be named rpComponentsService, pjComponentsService, ouComponentsService and doComponentsService. The first two letters of the service name refer to the short name of the related CRIS Entity: ResearcherPage (rp), Project (pj), OrgUnit (ou), Dynamic Object (do).

The snippet below show the default configuration for the Researcher Page components Service

<!-- Components -->

<bean id="rpComponentsService" class="org.dspace.app.cris.integration.CrisComponentsService">

                <property name="components">

                               <map>

                                               <entry key="dspaceitems" value-ref="publicationlist" />

                                               <entry key="projects" value-ref="projectlist" />

                               </map>

                </property>

</bean>

      For every components, a box with the same name and a custom JSP file must be defined. Placing such box in one or more Tab will enable the components visualization.

Out-of-box the system include configurable components to explore inverse relationship between a CRIS object and DSpace items and a CRIS object and other CRIS objects. This approach other than be time saving make also the data model more consistent avoiding the creation of wrong unilateral relationship. For example: if a researcher belongs to a department it has to be set up a pointer field via UI (see “Field Definition”). However, the OrgUnit entity not need a pointer to track the relationships between the department and all its researchers. The component executes the appropriate SOLR query to retrieve the referencing objects. The snippet below show the configuration of the publicationList component for the ResearcherPage

<!-- Publication component for RP -->

<bean id="publicationlist"

                class="org.dspace.app.webui.cris.components.ItemsConfigurerComponent">

                <property name="relationConfiguration" ref="relationRPVSItemConfiguration" />

                <property name="commonFilter">

               <util:constant static-field="org.dspace.app.webui.cris.util.RelationPreferenceUtil.HIDDEN_FILTER"/>                 </property>                                        

                <property name="target" value="org.dspace.app.cris.model.ResearcherPage" />

                <property name="types">

                               <map>

                                               <entry key="selected" value-ref="selectedComponent" />

                                               <entry key="journal" value-ref="journalComponent" />

                                               <entry key="conference" value-ref="conferenceComponent" />

                                               <entry key="book" value-ref="bookComponent" />

                                               <entry key="patent" value-ref="patentComponent" />

                                               <entry key="other" value-ref="otherComponent" />

                               </map>

                </property>

</bean>

org.dspace.app.webui.cris.components.ItemsConfigurerComponent is the implementation of the abstract class org.dspace.app.webui.cris.components.ASolrConfigurerComponent<T extends DSpaceObject, IBC extends ICrisBeanComponent> able to manage relationship between CRIS objects and DSpace Items. The following class provide similar functionalities for the other kinds of relationship

·         org.dspace.app.webui.cris.components.CRISDOConfigurerComponent able to explore relationship with Dynamic Object

·         org.dspace.app.webui.cris.components.CRISOUConfigurerComponent able to explore relationship with OrgUnit

·         org.dspace.app.webui.cris.components.CRISPJConfigurerComponent able to explore relationship with Project

·         org.dspace.app.webui.cris.components.CRISRPConfigurerComponent able to explore relationship with ResearcherPage

The following attributes define the behavior of such classes

·         relationConfiguration defines a relation between two Entity Class (CRIS Objects or DSpace Item), see the dedicated paragraph for further details

·         commonFilter defines an additional SOLR filter query to apply to the relationship

·         target must match the class canonical name of the target Entity in the relationship, i.e. if the relationship is Item – ResearcherPage (author) the target class is the ResearcherPage

·         types is a map that allow clustering of the relationship under user-defined category (facet query), see the dedicated paragraph for further details

Relationship definition 

The relationships are defined in the [installDir]/config/spring/cris/cris-relationpreference.xml

A relationConfiguration is shown in the snippet below

<bean id="relationRPVSItemConfiguration" class="org.dspace.app.cris.configuration.RelationConfiguration">

                <property name="relationName" value="crisrp.publications" />                      

                <property name="relationClass" value="org.dspace.content.Item" />                             

                <property name="query">

                               <value>author_authority:{0}</value>

                </property>

</bean>

It is defined by

·         relationName, an unique name that characterize the relationship

·         relationClass, the class canonical name of the Entity Class that holds the main direction of the relationship

·         query, the solr query that can be used to retrieve the objects linked to the “current” object. {0} will be replaced with the authority key of the current object

Relation Preference Management 

The relationConfiguration are used other than by the components by the RelationPreferenceService that can be enabled over one or more relationship so to allow the user to hide some relationship of make a selected list. The RelationPreferenceService is configured through the definition of a spring bean for the class org.dspace.app.cris.configuration.RelationPreferenceServiceConfiguration the default configuration is shown below

<bean class="org.dspace.app.cris.configuration.RelationPreferenceServiceConfiguration">

    <property name="list">

        <list>

                <bean class="org.dspace.app.cris.configuration.RelationPreferenceConfiguration">

                               <property name="relationConfiguration"                 ref="relationRPVSItemConfiguration"/>

                               <property name="selectActionAuthLevel">

                                               <util:constant static-field="org.dspace.app.cris.configuration.RelationPreferenceConfiguration.ENABLED" />

                               </property>

                               <property name="hideActionAuthLevel">

                                               <util:constant static-field="org.dspace.app.cris.configuration.RelationPreferenceConfiguration.ENABLED" />

                               </property>

                               <property name="unlinkActionAuthLevel">

                                               <util:constant static-field="org.dspace.app.cris.configuration.RelationPreferenceConfiguration.ONLY_SYSTEM_ADMIN" />

                               </property>

                               <property name="extraAction">

                                               <bean class="org.dspace.app.cris.configuration.ItemExtraAction" />

                               </property>

                               <property name="columnsVisualizationConfiguration">

                                               <list>

                                               <bean class="org.dspace.app.cris.configuration.ColumnVisualizationConfiguration">

                                                               <property name="name" value="title" />

                                                               <property name="metadata">

                                                                              <list>

                                                                                              <value>dc.title</value>

                                                                              </list>

                                                               </property>        

                                               </bean>

                                               <bean class="org.dspace.app.cris.configuration.ColumnVisualizationConfiguration">

                                                               …

                                               </bean>

                                               </list>

                               </property>

                </bean>

       </list>

    </property>

</bean> 

The RelationPreferenceServiceConfiguration keeps a list of RelationPreferenceConfiguration that defines for a specific relationConfiguration which actions (select, hide, unhide, unlink[1]) are available and to whom (researcher and/or system administrators). Finally, the columnsVisualizationConfiguration allows to define which columns show in the relation management functionality (see ) and the extraAction allows to inject the business logic needed to manage the preference changes (from a standard relationship to a selected one, from an hide relationship to a standard one and so on).

 

Relation Clustering 

The configuration of the clustering categories are done using spring beans. The snippet below show the default configuration for a “journal article” category applied to the publication list

<bean id="journalComponent" class="org.dspace.app.webui.cris.components.BeanFacetComponent">

                <property name="componentIdentifier" value="journal" />

                <property name="facetQuery">

                               <value>dc.type:Article -relationpreferences.crisrp.publications.selected:{1}</value>

                </property>

                <property name="order"><value>asc</value></property>

                <property name="rpp"><value>20</value></property>

                <property name="sortby"><value>1</value></property>     

</bean>

The facetQuery property is evaluated replacing {0} with the authority key of current object and {1} with the uuid.

 

Statistics configuration 

The SOLR Statistics system of DSpace has been extended in several aspects. It is now able to collect and visualize statistics about the CRIS Entities as allow further extension using StatsIndexPlugin in a similar way than the IndexerPlugin for the Search system.

The extended implementation is configured in the [installDir]/config/spring/statistics-solr.xml file

<bean class="org.dspace.app.cris.statistics.CrisSolrLogger" id="org.dspace.statistics.SolrLogger">

                <property name="spiderDetector" ref="org.dspace.statistics.util.SpiderDetector"/>

</bean>

<bean class="org.dspace.statistics.util.SpiderDetector" id="org.dspace.statistics.util.SpiderDetector"/>

The [installDir]/config/spring/statistics.xml file contains the spring beans definition to configure the extra indexers to invoke collecting statistics and most of the UI aspects of the statistics functionalities (number of  “top relation”, “top country” to show, timeline, etc.)

<bean id="identifierExtraIndexer" class="org.dspace.statistics.IdentifierStatsIndexPlugin"/>     

Allow the indexing of the unique key of the SOLR search document in the statistics document so to allow the use of SOLR join query to retrieve statistics of related objects (i.e. number of visualization over time of all researcher’s items, top visualized items for researcher, etc.)

 

The configuration of the statistics functionalities for the DSpace standard entities (Items, Collections and Communities) are done through spring beans. The following snippet show the default configuration for the DSpace Items

<bean id="itemStatsComponent" class="org.dspace.app.cris.integration.statistics.StatComponentsService">

                <property name="excludeBot" value="true"/> <!-- <value>-isBot:true</value>  -->

                <property name="showSelectedObject" value="true"/>

                <property name="topRelation" value="20"/>

                <property name="components">

                               <map>

                                               <entry key="selectedObject" value-ref="statsitem" />                                                          

                                               <entry key="bitstream" value-ref="statsbitstreamforitem" />

                               </map>

                </property>

                <property name="topCountryLength" value="10" />

                <property name="topContinentLength" value="-1" />

                <property name="topCityLength" value="10" />                    

                <property name="showMoreLength" value="20" />

                <property name="yearsQuery" value="5" />

</bean>

Most of the properties are self-explained; the one that need further details is components. A map of referring beans that describe the sections available in the statistics UI for DSpace Items.

There are two sections:

-          selectedObject, is the reserved word to define the StatComponent “section” used to visualize the statistics of the current object

-          bitstream, it defines a “section” where the top bitstream visualization are shown

 

 

<bean id="statsitem"

                               class="org.dspace.app.webui.cris.components.statistics.StatSelectedObjectComponent">      

                <property name="relationObjectType" value="2" />                             

</bean>

               

<bean id="statsbitstreamforitem"

                class="org.dspace.app.webui.cris.components.statistics.StatBitstreamTopObjectComponent">

                <property name="relationObjectType" value="0" />             

                <property name="bean" ref="commonItemBean" />

                <property name="crisSearchService" ref="org.dspace.discovery.SearchService" />

</bean>

 

<bean id="commonItemBean" class="org.dspace.app.webui.cris.components.BeanComponent">

                <property name="componentIdentifier" value="collection" />

                <property name="query"><value>search.resourceid:{0}</value></property>                

</bean>

Also the configuration of the statistics functionalities for the CRIS entities (ResearcherPage, OrgUnit, Project and DynamicObject) are done through spring beans. The following snippet show the default configuration for the ResearcherPages

<bean id="rpStatsComponent"                                                                                                                                class="org.dspace.app.cris.integration.statistics.CrisStatComponentsService">

            <property name="excludeBot" value="true"/> <!-- <value>-isBot:true</value>  -->

            <property name="showSelectedObject" value="true"/>

            <property name="showExtraTab" value="true"/>

            <property name="topRelation" value="20"/>

            <property name="topCountryLength" value="10" />

            <property name="topContinentLength" value="-1" />

            <property name="topCityLength" value="10" />                  

            <property name="showMoreLength" value="20" />

            <property name="yearsQuery" value="5" />

            <property name="crisComponentsService" ref="rpComponentsService"/>

            <property name="selectedObject" ref="rpSelectedObject"/>

</bean>

The bean definition is very similar to the definition used for standard DSpace Entities except for the components management. For the CRIS Entities the components are derived by the definitions done in the CrisComponentService, see “CRIS Components”.

This mean that the user defined categories for clustering the relationship, for example the researcher’s publication list by publication type, are used also in the statistics functionality so to show view and download of all the researcher’s publication over time by publication type.

The current object is specified as direct property of the CrisStatComponent bean

<bean id="rpSelectedObject"

                class="org.dspace.app.webui.cris.components.statistics.CrisRPStatsDualSelectedComponent">          

                <property name="applicationService" ref="applicationService" />

</bean>

These settings are injected in the UI using spring beans definition in [webapp-JSPUI]/WEB-INF/springmvc-rp-servlet.xml, the following snippet show the injection of the rpStatsComponets

<bean id="rpStatisticsController"

                        class="org.dspace.app.webui.cris.controller.statistics.CrisStatisticsController">

            <property name="solrConfig">

                        <ref bean="solrConfig" />

            </property>

            <property name="statsComponentsService">

                        <ref bean="rpStatisticRequestsManager" />

            </property>

            …

The rpStatisticRequestsManager is indeed defined in

[webapp-JSPUI]/WEB-INF/spring/applicationContext-rp.xml 

<bean id="rpStatisticRequestsManager" factory-bean="researcher"

                                               factory-method="getRPStatsComponents" />

where the factory bean researcher is only used to access the upper level “dspace-api” Spring Context.

 

Network configuration 

The system is able to draw graph about network collaborations, see “Network visualization”, between Researchers using data in the RPs, Projects, OrgUnits, Dynamic Objects and DSpace Items.

      This functionality can be extensively configured editing a dedicated configuration file [installDir]/config/modules/network.cfg. Any property, plugin or setting listed below, if not otherwise stated, must be configured in that file

The system use the Jit javascript library (http://thejit.org/ ) to draw the graphs. A customized version of the RGraph layout has been developed. This customization changes the positioning algorithm of the nodes. Nodes are equally positioned in the “circle” corresponding to the degree of the relationship and not limited to the area of circle “assigned” to the intermediate node at the previous level. Below there is a comparison between the DSpace-CRIS customization (on the left) and the standard RGraph layout.

 

                     

 

 

The relationships that are used by the system to build the network are defined as plugin in the network.cfg file

plugin.named.org.dspace.app.cris.network.NetworkPlugin = \

            org.dspace.app.cris.network.VisualizationGraphCoauthors = coauthors,\

org.dspace.app.cris.network.VisualizationGraphInterests = interests,\

            org.dspace.app.cris.network.VisualizationGraphKeywordsPublication = kwdpub,\

            org.dspace.app.cris.network.VisualizationGraphCoinvestigators = coinvestigators,\

            org.dspace.app.cris.network.VisualizationGraphKeywordsGrants = keywordsgrants

all the connection-type needs to implement the it.cilea.surplus.oa.network.NetworkPlugin

A special, single plugin implementation is used to provide the “Department network: visualization & metrics

plugin.single.org.dspace.app.cris.network.NetworkPlugin = \             org.dspace.app.cris.network.DepartmentNetworkPlugin

The network.connection property define the exact order used to list the network in the UI

network.connection = coauthors, interests, coinvestigators, keywordsgrants, kwdpub

The UI load the graph data asynchronous via JSON. In the JSP UI there is a single servlet able to produce JSON for different purpose using plugins, these plugins are configured in the dspace.cfg file with the following names: collaborationnetwork, departmentnetwork

plugin.named.org.dspace.app.webui.json.JSONRequest = \

           

            org.dspace.app.webui.cris.servlet.JSONResearcherNetworkServlet = collaborationnetwork,\

            org.dspace.app.webui.cris.servlet.JSONDeptNetworkServlet = departmentnetwork

The colors used by a specific connection-type is defined as follow

 

# node color

network.connection.color.node.default = #ddeeff

network.connection.color.node.interests = orange

# connection edge color

network.connection.color.edge.default = #C17878

network.connection.color.edge.interests = orange

# multi-connection edge color (only apply from the 2nd degree)

network.connection.color.edgetooverride.default = #C17878

As the number of nodes and connections in the graph grow, the graph will become more and more unreadable and less useful so the system allows to set some configuration properties that limiting the visualized data to the most important and will keep the graph more clear and fast to load.

 

# Max degree or relationship to show

network.connection.maxdepth = 2

# default value for the Show external people (not RP)                      # (RP Network graph & Department graph)

network.connection.showexternal = true

# default value for the show only relationships inside the department      # (Department graph)

network.connection.showsamedept = false

# max number of nodes to show, for any node in the previous level,         # on each level (degree) of relationship (i.e. the first X co-author at the # first level, the first X co-author of any first degree coauthor at the   # second level and so on. This mean that at the ith degree the graph could  # have a max of Xi nodes

network.connection.nodestoshoweachlevel.default = 30

# you can override all the previous settings on a connection-type/level    # basis

#network.connection.coauthors.nodestoshoweachlevel.0 = 15

#network.connection.coauthors.nodestoshoweachlevel.1 = 10

#network.connection.interests.nodestoshoweachlevel.0 = 15

Limiting the number of nodes shown could produce some unexpected behavior. For example, if you limit the display to the first 10 top co-authors  than, in the case that, the 11th co-author of the focus RP is also in the top ten list of co-authors for one or more 1st level co-author this 11th co-author will be show as 2nd level relationship. But, when the user click on it, the system will report that the relationship with the focus RP is a first level relationship and the strength of the relationship will be shown.

For some relationship it is useful introduce some limit also during the indexing phase for both performance and meaning reasons. Looking for co-keywords relationship including all the keywords used in any publication is a no sense because some keywords are really general and widely used. Look to these keywords will produce a network of all the RPs and external authors in the repository. A better strategy is to only assign a keyword to an RP or external author if these people have used the keyword more than other. We look for all the keywords used in the repository and we assign any keyword to the top X authors that use it.

# -1 works on all possible results, configurable on a relationship basis

network.connection.loader.limitnode.default = -1

network.connection.loader.limitnode.kwdpub = 50

This limitation could be applied to the co-interest, co-discipline, co-keywords in grant, etc. as well.

The batch script 

org.dspace.app.cris.batch.ScriptIndexNetwork (you can use the –a option to elaborate any connection-type or –s <alias> to elaborate a single connection-type) is used to build a dedicated SOLR core where network information are pre-assembled.

 

Network metrics 

For any network the system is able to calculate four metrics

-          Numbers of collaboration

-          Max strength of the collaboration in the network

-          Average strength of the collaboration network

-          Quadratic variance of the collaboration network

These metrics are calculated by the batch script:

org.dspace.app.cris.batch.ScriptMetricsNetwork –a [or –s <alias> for single connection mode]

These values are stored in the RP data so that, if desired, you can also show them in the public RP visualization

      This feature requires that the following TextField exist in your RP configuration for each connection-type:                                                                numberscollaboration_network_<connection-alias>; maxstrengthcollaboration_network_<connection-alias>; averagestrengthcollaboration_network_<connection-alias>; quadraticvariancecollaboration_network_<connection-alias>

      If you run the batch script without make the required changes to the configuration the script will prompt the missing field

The SOLR network core 

The SOLR core used by the network visualization is defined as follow

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

In the network core a SOLR document represent a connection between two nodes (RP, external or department), the document includes the following fields:

-          connection-type: the network alias (coauthors, interests, etc.)

-          node A: text value, authority (rp key), rp department

-          node B: text value, authority (rp key), rp department

-          connection-value: the publication in common (co-authorship), the keyword (co-keywords), the interest (co-interest) etc.

-          focus: these fields (values, authority) are automatically copied from the node fields to get fast response to some queries

-          dept: this field contains the concatenation of the node A department and node B department field separated by a |||. It is used to get fast response to some queries 

Use DSpace-CRIS entities as DSpace authority 

All the DSpace-CRIS Entities can be used as authority for Item’s metadata. The system provides the following ChoiseAuthority plugins

#####  Authority Control Settings  #####

plugin.named.org.dspace.content.authority.ChoiceAuthority = \

            org.dspace.app.cris.integration.RPAuthority = RPAuthority,\

            org.dspace.app.cris.integration.ProjectAuthority = ProjectAuthority,\

            org.dspace.app.cris.integration.OUAuthority = OUAuthority,\

            org.dspace.app.cris.integration.DOAuthority = DOAuthority

the following snippet from the default configuration show how to configure the ResearcherPages as authority for the dc.contributor.author metadata, the Projects as authority for the dc.relation metadata, the OrgUnits as authority for the dc.description.sponsorship and a DynamicObject “Journals” as authority for the dc.relation.ispartof metadata.

choices.plugin.dc.contributor.author = RPAuthority

choices.presentation.dc.contributor.author = suggest

authority.controlled.dc.contributor.author = true

 

choices.plugin.dc.relation = ProjectAuthority

choices.presentation.dc.relation = suggest

authority.controlled.dc.relation = true

 

choices.plugin.dc.description.sponsorship = OUAuthority

choices.presentation.dc.description.sponsorship = suggest

authority.controlled.dc.description.sponsorship = true

 

choices.plugin.dc.relation.ispartof = JOURNALAuthority

choices.presentation.dc.relation.ispartof = suggest

authority.controlled.dc.relation.ispartof = true

cris.DOAuthority.dc_relation_ispartof.filter = resourcetype_filter:"Journals"

It must be noted that the DOAuthority allows to define a SOLR query filter to limit the set of objects available as authority for example to only a specific Dynamic Object type.

resourcetype_filter is a SOLR field that contains the human-readable translation of the resource type (item, researcher, orgunit, etc.) it is configured in the [installDir/config/modules/cris.cfg] file as follow

### SOLR TYPE FACET – NOTE: separator \n|||\n must match the discovery configuration ###

facet.type.item = items\n|||\nItems

facet.type.community = communities\n|||\nCommunities

facet.type.collection = collections\n|||\nCollections

facet.type.crisrp = researchers\n|||\nResearchers

facet.type.crispj = projects\n|||\nProjects

facet.type.crisou = orgunits\n|||\nOrgUnits

facet.type.nested = nobjects\n|||\nN-Object

 

## You can define a clustered type for other research object or set a fine granularity configuration    ## custom

## use @label@ to use default behaviour (<typedefinitionlabellowercase>|||<typedefinitionlabel>)

# facet.type.crisdo.default = others\n|||\nOthers

# facet.type.crisdo.crisprize = prize\n|||\nHonours, Awards and Prize

# facet.type.crisdo.crisqualification = @label@

facet.type.crisdo.crisjournals = @label@

If you have used the ItemEnhancer to add virtual metadata to the DSpace Item exploring the relationship with CRIS objects for the search and/or the browse system, see “ItemEnhancer: virtual metadata”, you need to define an authority also for that virtual metadata to allow proper indexing of the authority key, variants and label.

## It comes from ItemEnhancer configuration - see cris-metadata.enhancers.xml

choices.plugin.crisitem.author.dept = OUAuthority

authority.controlled.crisitem.author.dept = true

authority.management.crisitem.author.dept = false

[1] The unlink action will remove the reference to the target object, i.e. unlinking an item from a researcherpage will remove the authority key in the corresponding item metadata

 [BA1]Check if this is right (.bi_<> is not required)

 [BA2]To be compled

 [BA3]Add details about processors