Versions Compared

Key

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

Publication Claim

Scenario 2: A new researcher joins the institution and logins for the first time in the repository. The publication claim services found most of their publications in the OpenAIRE network and prompts for import. The researcher reviews the list, confirms the authorship and imports the publication saving a significant amount of (often publicly payed) time. Moreover, the authorship confirmation will come back later to OpenAIRE offering useful information about the data quality and potential enrichment. The same applies for publications authored by researchers in different institutes, having the data in multiple repositories makes the data more reliable and raises the chance to get more information and content from any of the authors.

...

In the original plan an integration with the ReCiter open source platform was originally planned but over the phase 2 we found that the internal data structure of ReCiter was too tight to the PubMed Article Model to be adapted to work with the data provided by the openAIRE Research Graph within the budget limit and for such reason we switched to a direct integration with the openAIRE Research Graph via the Publication REST API. Other good candidates to be integrated via such framework are ORCID or commercial databases via their authors' IDs.

Data source

The openAIRE Publication REST API are used to retrieve publication that could be authored by researcher at the Institution. The openAIRE Publication REST API are queried using the names known by the repository for its researchers, the retrieve list is later reduced passing identified publications to a pipeline of JAVA classes that can promote or reject his inclusion in the suggestion list. Publications previously discarded by the researcher are automatically filter out avoiding to re-present the same publication again and again.

...

The detailed REST contract for such endpoints are available on the 4Science Rest7Contract repository and embedded at the bottom of the page for easy reference.

Repository Manager UI

The resulting UI is accessible for the Repository Manager from the administrative menu. As entry point for the features a “Notifications” menu entry has been added to the DSpace administrative menu, from where the repository manager will be able to manage the suggestions got from the different sources.

...

The suggestions list can be sorted by total score descending or ascending (highlighting the weakest candidates).

source-suggesions

Researcher UI

This functionality requires to implement a mechanism to uniquely link user accounts with Person profiles. Such mechanism is implemented out-of-box in DSpace-CRIS. Where the link is not implemented, the Repository Manager UI can still be used.

...

and can proceed to review the suggestions list in the same way than the Repository Manager, the notification message is also always available at the top of the mydspace

alert-mydspace

Processing the decisions

The backend is responsible to process the repository manager or researcher decisions taken over the received suggestions. The publication to be imported are processed according to the Import from External Sources normal data flow of DSpace 7. Upon import the suggestion document is removed from the SOLR core, in case of rejection the document is updated flagging it as rejected so that it will be not longer proposed to the user.

Rest Contract

Three endpoints have been designed to interact with the publication claim service

  • /api/integration/suggestionsources to provide access to summary information about the available suggestion from each source (openaire, orcid, etc.)
  • /api/integration/suggestiontargets to provide access to summary information about the available suggestions for a specific researcher
  • /api/integration/suggestions to provide access to the detailed suggestions so that they can be reviewed and managed by the repository manager or the researcher to whom they related

/api/integration/suggestionsources

Suggestion Sources Endpoints

Back to the list of all defined endpoints

Main Endpoint

/api/integration/suggestionsources

It returns a paginated list of suggestion sources. All the sources are returned regardless to the existence or less of suggestions. This endpoint is reserved to administrators

single entry

GET api/integration/suggestionsources/<:source-key>

...

  • 200 Ok - if the operation succeed
  • 401 Unauthorized - if you are not authenticated
  • 403 Forbidden - if you are not logged in with sufficient permissions
  • 404 Not found - if the source doesn't exist or is not active in the system (when 403 doesn't apply)

/api/integration/suggestiontargets

Suggestion Targets Endpoints

Back to the list of all defined endpoints

Main Endpoint

/api/integration/suggestiontargets

Unsupported. The suggestion targets can be retrieved only by source or by target, see the search methods below.

single entry

GET api/integration/suggestiontargets/source:target-id

...

  • 200 Ok - if the operation succeed
  • 401 Unauthorized - if you are not authenticated
  • 403 Forbidden - if you are not logged in with sufficient permissions
  • 404 Not found - if there are no suggestions for the requested profile (when 403 doesn't apply)

Search methods

findBySource

/api/integration/suggestiontargets/search/findBySource?source=<:source>

...

  • 200 Ok - if the operation succeed
  • 400 Bad Request - if the source parameter is missing
  • 401 Unauthorized - if you are not authenticated
  • 403 Forbidden - if you are not logged in as an administrator

findByTarget

/api/integration/suggestiontargets/search/findByTarget?target=<:target-uuid>

...

  • 200 Ok - if the operation succeed
  • 204 No Content - if no suggestion targets are available for the specified profile
  • 400 Bad Request - if the target parameter is missing or invalid
  • 401 Unauthorized - if you are not authenticated
  • 403 Forbidden - if you are not logged in with sufficient permissions

/api/integration/suggestions

Suggestions Endpoints

Back to the list of all defined endpoints

Main Endpoint

/api/integration/suggestions

Unsupported. The suggestions can be retrieved only by source and target or via direct link, see the single entry and search method below.

single entry

GET api/integration/suggestions/<:suggestion-id>

...

{
    "id": "reciter:gf3d657-9d6d-4a87-b905-fef0f8cae26:24694772",
    "display": "publication one",
    "source": "reciter",
    "score": "62.7",
    "external-source-uri": "https://dspace7.4science.cloud/server/api/integration/reciterSourcesEntry/pubmed/entryValues/24694772",
    "evidences": {
      "acceptedRejectedEvidence": {
        "score": "2.7",
        "notes": "some notes, eventually empty or null"
      },
      "authorNameEvidence": {
        "score": "0",
        "notes": "some notes, eventually empty or null"
      },
      "journalCategoryEvidence": {
        "score": "6",
        "notes": "some notes, eventually empty or null"
      },
      "affiliationEvidence": {
        "score": "23.7",
        "notes": "some notes, eventually empty or null"
      },
      "relationshipEvidence": {
        "score": "9",
        "notes": "some notes, eventually empty or null"
      },
      "educationYearEvidence": {
        "score": "3.6",
        "notes": "some notes, eventually empty or null"
      },
      "personTypeEvidence": {
        "score": "4",
        "notes": "some notes, eventually empty or null"
      },
      "articleCountEvidence": {
        "score": "6.7",
        "notes": "some notes, eventually empty or null"
      },
      "averageClusteringEvidence": {
        "score": "7",
        "notes": "some notes, eventually empty or null"
      }
    },
    "metadata": {
        "dc.identifier.uri": [
          {
            "value": "https://publication/0000-0003-3681-2038",
            "language": null,
            "authority": null,
            "confidence": -1,
            "place": -1
          }
        ],
        "dc.title" : [
          {
            "value" : "publication one",
            "language" : null,
            "authority" : null,
            "confidence" : -1
          }
        ],
        "dc.date.issued" : [
          {
            "value" : "2010-11-03",
            "language" : null,
            "authority" : null,
            "confidence" : -1
          }
        ]
    },
    "type": "suggestion",
    "_links": {
      "target": {
        "href": "https://dspace7.4science.cloud/server/api/core/items/gf3d657-9d6d-4a87-b905-fef0f8cae26"
      },
      "self": {
        "href": "https://dspace7.4science.cloud/server/api/integration/suggestions/reciter:gf3d657-9d6d-4a87-b905-fef0f8cae26:24694772"
      }
    }
}

Search methods

Get suggestions by a given target

/api/integration/suggestions/search/findByTargetAndSource?target=:target-uuid&source=:source-key[&size=10&page=0]

...

{
  "_embedded": {
    "reciterSourceEntries": [
{
        "id": "24694772",
        "display": "publication one",
        "source": "reciter",
        "external-source-uri": "https://dspace7.4science.cloud/server/api/integration/reciterSourcesEntry/pubmed/entryValues/24694772",
        "evidences": {
          "acceptedRejectedEvidence": {
            "score": "2.7",
            "notes": "some notes, eventually empty or null"
          },
          "authorNameEvidence": {
            "score": "0",
            "notes": "some notes, eventually empty or null"
          },
          "journalCategoryEvidence": {
            "score": "6",
            "notes": "some notes, eventually empty or null"
          },
          "affiliationEvidence": {
            "score": "xxx",
            "notes": "some notes, eventually empty or null"
          },
          "relationshipEvidence": {
            "score": "9",
            "notes": "some notes, eventually empty or null"
          },
          "educationYearEvidence": {
            "score": "3.6",
            "notes": "some notes, eventually empty or null"
          },
          "personTypeEvidence": {
            "score": "4",
            "notes": "some notes, eventually empty or null"
          },
          "articleCountEvidence": {
            "score": "6.7",
            "notes": "some notes, eventually empty or null"
          },
          "averageClusteringEvidence": {
            "score": "7",
            "notes": "some notes, eventually empty or null"
          }
        },
        "metadata": {
            "dc.identifier.uri": [
              {
                "value": "https://publication/0000-0003-3681-2038",
                "language": null,
                "authority": null,
                "confidence": -1,
                "place": -1
              }
            ],
            "dc.title" : [
              {
                "value" : "publication one",
                "language" : null,
                "authority" : null,
                "confidence" : -1
              }
            ],
            "dc.date.issued" : [
              {
                "value" : "2010-11-03",
                "language" : null,
                "authority" : null,
                "confidence" : -1
              }
            ]
        },
        "type": "suggestion",
        "_links": {
          "target": {
            "href": "https://dspace7.4science.cloud/server/api/core/items/gf3d657-9d6d-4a87-b905-fef0f8cae26"
          },
          "self": {
            "href": "https://dspace7.4science.cloud/server/api/integration/suggestions/reciter:gf3d657-9d6d-4a87-b905-fef0f8cae26c:24694772"
          }
        }
      }
    ]
  },
  "_links": {
    "self": {
      "href": "https://dspace7.4science.cloud/server/api/integration/suggestions/search/findByTargetAndSource?target=gf3d657-9d6d-4a87-b905-fef0f8cae26c&source=reciter"
    }
  },
  "page": {
    "size": 20,
    "totalElements": 1,
    "totalPages": 1,
    "number": 0
  }
}

Import suggestion

See the WorkspaceItem endpoint for details on how to import a suggestion

Discard suggestion

DELETE api/integration/suggestions/<:suggestion-id>

...