Contribute to the DSpace Development Fund
The newly established DSpace Development Fund supports the development of new features prioritized by DSpace Governance. For a list of planned features see the fund wiki page.
WORK IN PROGRESS
Since DSpace 7.3 a bidirectional ORCID integration is available for DSpace
experimental
Please note that the ORCID integration feature is classified as experimental at the time of 7.3 and it MUST be enabled manually. Due to the strict validation rules applied on the ORCID side and the absence of friendly edit UI for the archived items in DSpace (see issues#2876), it is hard at this time to achieve an optimal UX.
Acknowledgement
DSpace provides a bidirectional integration with ORCID based on the ORCID API v3.0. Both the Public ORCID API than the Membership API are supported.
The table below summarize the supported features according to the type of ORCID API configured
Feature | No credentials* | Public API | Member API |
---|---|---|---|
Authentication | | | |
Connect local profile to ORCID (authenticated ID) | | | |
ORCID Registry Lookup - import Person records | | | |
ORCID Registry Lookup - as authority | | | |
Import publication from ORCID | | | |
Push biographic data to ORCID | | ||
Push publications to ORCID (works) | | ||
Push projects to ORCID (fundings) | |
* No credentials: please note that ORCID strongly recommend to apply at least for public free API Key as this will help to trouble-shooting integration problem and get support from them. There is also a chance to get better performance/priority over "unknown" client
User features
Login via ORCID
...coming soon...
Connect/Disconnect the locat profile to ORCID
...coming soon...
Manage synchronization preferences
...coming soon...
Import publications from ORCID
...coming soon...
Configuration
Enable the integration
All the ORCID features requires a minimal common set of properties to configure in the local.cfg
# Switch to production API once ready https://github.com/ORCID/ORCID-Source/tree/master/orcid-api-web#endpoints orcid.domain-url= https://sandbox.orcid.org orcid.api-url = https://api.sandbox.orcid.org/v3.0 orcid.application-client-id = <YOUR-ORCID-CLIENT-ID> orcid.application-client-secret = <YOUR-ORCID-CLIENT-SECRET>
To enable the main integration (i.e. connect local profile with ORCID and push data to the ORCID registry) you need to be an ORCID Member, get a Member API Key and proper enable and configure the feature in DSpace.
In the ORCID API Credentials request form you will be asked to enter one or more redirect URLs for you application (DSpace), you will need to enter here the root URL of your REST and Angular interfaces that could eventually be different, otherwise it will be sufficient to put the URL of your angular UI. For the DSpace 7 official demo these are
- Angular: https://demo7.dspace.org (please note the absence of a /home or any subrouting)
- REST: https://api7.dspace.org (please note the absence of a /server or any subrouting)
Once ORCID has reviewed and approved your request, you will get from them the Client ID and Client Secret that need to be set in the local.cfg
among other properties (see below)
# the properties below are required only for the sync / linking part (not for authentication or import) orcid.synchronization-enabled = true # you need to enable the orcidqueue consumer to keep track of what need to be sync between DSpace and ORCID event.dispatcher.default.consumers = versioning, discovery, eperson, orcidqueue
By default DSpace will request permissions to READ and WRITE all the information from the ORCID profile as this will enable support for all the features. You can eventually fine-tuning that overriding the following properties, please note that if you are going to configure Public API Credential you MUST update this configuration keeping only the /authenticate
scope as all the other scopes require member API
# The scopes to be granted by the user during the login on ORCID (see https://info.orcid.org/faq/what-is-an-oauth-scope-and-which-scopes-does-orcid-support/) orcid.scope = /authenticate orcid.scope = /read-limited orcid.scope = /activities/update orcid.scope = /person/update
The push of DSpace data (Person, Publication, Project) to ORCID is based on mapping defined in the config/modules/orcid.cfg
file,
<bean id="orcidWorkFactoryFieldMapping" class="org.dspace.app.orcid.model.OrcidWorkFieldMapping" > <property name="contributorFields" value="${orcid.mapping.work.contributors}" /> <property name="externalIdentifierFields" value="${orcid.mapping.work.external-ids}" /> <property name="publicationDateField" value="${orcid.mapping.work.publication-date}" /> <property name="titleField" value="${orcid.mapping.work.title}" /> <property name="journalTitleField" value="${orcid.mapping.work.journal-title}" /> <property name="shortDescriptionField" value="${orcid.mapping.work.short-description}" /> <property name="subTitleField" value="${orcid.mapping.work.sub-title}" /> <property name="languageField" value="${orcid.mapping.work.language}" /> <property name="languageConverter" ref="${orcid.mapping.work.language.converter}" /> <property name="typeField" value="${orcid.mapping.work.type}" /> <property name="typeConverter" ref="${orcid.mapping.work.type.converter}" /> <property name="citationType" value="${orcid.mapping.work.citation.type}" /> </bean>
that respectively read the mapping from the config/modules/orcid.cfg
file
### Work (Publication) mapping ### orcid.mapping.work.title = dc.title orcid.mapping.work.sub-title = orcid.mapping.work.short-description = dc.description.abstract orcid.mapping.work.publication-date = dc.date.issued orcid.mapping.work.language = dc.language.iso orcid.mapping.work.language.converter = mapConverterDSpaceToOrcidLanguageCode orcid.mapping.work.journal-title = dc.relation.ispartof orcid.mapping.work.type = dc.type orcid.mapping.work.type.converter = mapConverterDSpaceToOrcidPublicationType ##orcid.mapping.work.contributors syntax is <metadatafield>::<role> orcid.mapping.work.contributors = dc.contributor.author::author orcid.mapping.work.contributors = dc.contributor.editor::editor ##orcid.mapping.work.external-ids syntax is <metadatafield>::<type> or $simple-handle::<type> ##The full list of available external identifiers is available here https://pub.orcid.org/v3.0/identifiers orcid.mapping.work.external-ids = dc.identifier.doi::doi orcid.mapping.work.external-ids = dc.identifier.scopus::eid orcid.mapping.work.external-ids = dc.identifier.pmid::pmid orcid.mapping.work.external-ids = $simple-handle::handle orcid.mapping.work.external-ids = dc.identifier.isi::wosuid orcid.mapping.work.external-ids = dc.identifier.issn::issn
To enable the ORCID Authentication you need to uncomment the following line in the modules/authentication.cfg
file or adding it to your local.cfg
plugin.sequence.org.dspace.authenticate.AuthenticationMethod = org.dspace.authenticate.OrcidAuthentication
Please note that you are NOT required to enable the ORCID Authentication to use the other ORCID features, including the synchronisation ones. It is also possible to use just the ORCID Authentication without enabling all the other features.
Configure the import features
The Import features from ORCID have been implemented using the Live Import Framework
The following bean is used to configure the import of person records from ORCID, it is activated as an external source in config/spring/api/external-services.xml
<bean class="org.dspace.external.provider.impl.OrcidV3AuthorDataProvider" init-method="init"> <property name="sourceIdentifier" value="orcid"/> <property name="orcidUrl" value="${orcid.domain-url}" /> <property name="clientId" value="${orcid.application-client-id}" /> <property name="clientSecret" value="${orcid.application-client-secret}" /> <property name="OAUTHUrl" value="${orcid.token-url}" /> <property name="orcidRestConnector" ref="orcidRestConnector"/> <property name="supportedEntityTypes"> <list> <value>Person</value> </list> </property> </bean>
the mapping between ORCID Person and the DSpace Person Item is the following, currently hard-coded
ORCID | DSpace |
---|---|
Name/FamilyName | person.firstName |
Name/GivenName | person.givenName |
Name/Path | person.identifier.orcid |
ORCID Profile URL | dc.identifier.uri |
the following bean is instead used to configure the import of publication records from ORCID (Work)
<bean id="orcidPublicationDataProvider" class="org.dspace.external.provider.impl.OrcidPublicationDataProvider"> <property name="sourceIdentifier" value="orcidWorks"/> <property name="fieldMapping" ref="orcidPublicationDataProviderFieldMapping"/> <property name="supportedEntityTypes"> <list> <value>Publication</value> </list> </property> </bean>
the mapping of the ORCID Work metadata to the DSpace metadata is performed by the following beans in config/spring/api/orcid-services.xml
<bean id="orcidPublicationDataProviderFieldMapping" class="org.dspace.orcid.model.OrcidWorkFieldMapping" > <property name="contributorFields" value="${orcid.external-data.mapping.publication.contributors}" /> <property name="externalIdentifierFields" value="${orcid.external-data.mapping.publication.external-ids}" /> <property name="publicationDateField" value="${orcid.external-data.mapping.publication.issued-date}" /> <property name="titleField" value="${orcid.external-data.mapping.publication.title}" /> <property name="journalTitleField" value="${orcid.external-data.mapping.publication.is-part-of}" /> <property name="shortDescriptionField" value="${orcid.external-data.mapping.publication.description}" /> <property name="languageField" value="${orcid.external-data.mapping.publication.language}" /> <property name="languageConverter" ref="${orcid.external-data.mapping.publication.language.converter}" /> <property name="typeField" value="${orcid.external-data.mapping.publication.type}" /> <property name="typeConverter" ref="${orcid.external-data.mapping.publication.type.converter}" /> </bean>
that respectively read the mapping from the config/modules/orcid.cfg
file
### Work (Publication) external-data.mapping ### orcid.external-data.mapping.publication.title = dc.title orcid.external-data.mapping.publication.description = dc.description.abstract orcid.external-data.mapping.publication.issued-date = dc.date.issued orcid.external-data.mapping.publication.language = dc.language.iso orcid.external-data.mapping.publication.language.converter = mapConverterOrcidToDSpaceLanguageCode orcid.external-data.mapping.publication.is-part-of = dc.relation.ispartof orcid.external-data.mapping.publication.type = dc.type orcid.external-data.mapping.publication.type.converter = mapConverterOrcidToDSpacePublicationType ##orcid.external-data.mapping.publication.contributors syntax is <metadatafield>::<role> orcid.external-data.mapping.publication.contributors = dc.contributor.author::author orcid.external-data.mapping.publication.contributors = dc.contributor.editor::editor ##orcid.external-data.mapping.publication.external-ids syntax is <metadatafield>::<type> or $simple-handle::<type> ##The full list of available external identifiers is available here https://pub.orcid.org/v3.0/identifiers orcid.external-data.mapping.publication.external-ids = dc.identifier.doi::doi orcid.external-data.mapping.publication.external-ids = dc.identifier.scopus::eid orcid.external-data.mapping.publication.external-ids = dc.identifier.pmid::pmid orcid.external-data.mapping.publication.external-ids = dc.identifier.isi::wosuid orcid.external-data.mapping.publication.external-ids = dc.identifier.issn::issn
Configure the author lookup in submission
Please note that there are two different possibilities:
- via an ORCID lookup authority available for DSpace repository that are not using Configurable Entities
- via a relation among the research output item (Publication, etc.) and a Person Item bind to the ORCID Person External Source defined in the previous paragraph
Configure the push of information from DSpace to ORCID
...coming soon...
Trouble-shooting & common issues
The toubleshooting guide from ORCID can help as well https://info.orcid.org/documentation/integration-guide/troubleshooting/
I cannot find the ORCID features described in this page in my installation
The ORCID features must be enabled by hand changing some configuration file, please refer to the Enable the integration section paragraph above in the page
I have configured my Public ORCID API credentials in DSpace but I get an error attempting to login via ORCID
When you use public ORCID API credentials you can only use a subset of the integration features (check ) moreover you need to limit the scopes (permissions) requested to the user via the ORCID authentication to the /authenticate
scope. Please check the Enable the integration section paragraph above in the page
I cannot push all my publications, only few or none of them are listed in the queue
Please double check that the orcidqueue
consumer has been enabled and that the orcid settings of your profile has the "All publications" checkbox flagged. ORCID features require the use of the new Configurable Entities. Only Publication item are synchronized with ORCID, legacy "untyped" items not. Please consider to convert your legacy collection to "Publication" collection and set a dspace.entity.type = Publication
metadata on your legacy items
Push of publications to ORCID fails
...
Push of projects to ORCID fails
...