Versions Compared

Key

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

...

The LDN system, as a message exchanging i/o system, has an inbox and an outbox. Every LDN message refers to a Notify Service: all the Notify Services are configured manually from the admin application form. A Notify Service is just like an authority labelled on LDN messages.

The Quality Assurance system is the implementation of item metadata updates operations. A Quality Assurance Event contains informations for item metadata updates: QAEvent are stored into QAEvent solr collection. All of the QAEvent are shown on an administration form. Every QAEvent can be accepted, ignored or removed: if accepted some metadata of the referred item are modified, if ignored or removed nothing about the item is modified. Every QAEvent has a property named source : qa events created by processing an LDNMessage has source="coar-notify".

...

The following page is used to submit a new LDN Service:


Image Modified

Name: a label for the Notify Service used on the UI
Description: the description of the Notify Service - add details here

Service URL: the url of the remote Notify Service. This is mostly used as a descriptive URL when sending notification to an external system.

The service URL must not be confused with the inbox url. As said this url is descriptive so we expect the main application URL to be added here

Level of Trust: floating point number value accepted between 0 and 1.

This value is used to assign to the service a TRUST value that describes how much reliable the external service is.

This value is not used if the automatic processing of QA Events is disabled

Check the configuration file dspace/config/spring/api/qaevents.xml to enable the automatic approval

When the automatic approval is configured the trust value of the LDN Service is check against configured score thresholds. 

Thresholds for automatic Approval/Rejection/Ignoring can be set.

Also within a specified range QA Events will need a manual approval

Service IP Range: two IP addresses expected as minimum and maximum.

This range is used to validate the received LDN Messages.

When the LDN notification doesn't match the configured IP Range the notification is stored as UNTRUSTED

LDN Inbox URL: this is the url used to send the LDN Notifications. 

This url is also used when a notification is received to retrieve the registered LDN service it belongs to

This URL must is unique among the registered LDN Services

Inbound Pattern: the section for Inbound pattern is the section which describes what operations/actions are supported by the external service

The pattern itself can be selected from the dropdown as there's a list of pattern. To better understand pattern usage please 
refer to the official documentation https://notify.coar-repositories.org/patterns/ 

The item filter is used to describe which item can be processed for the current LDN Service/Inbound pattern. 
if the item filter is not set any item is allowed. If the filter is selected only for matching items the LDN Notification will be sent
(in case of automatic LDN Notification the notification is not sent, In case of NON-automatic service a validation will prevent requests 
to be sent to the external service) 

The automatic flag when set to true the ldn message exchange is performed automatically right after the item submission has finished.
this Automatic workflow generates an Outgoing LDN message targeting the Notify service for the just submitted item.
The automatic flag involves only the submission phase of an item.
If no item filter is set - the LDN notification is generated for any submitted item. 


LDN Inbox queueing

LDN incoming messages are stored into the ldn_message database table. As far as the property ldn.enabled  is true and the incoming json is valid, the LDN Message is stored on the table. Together with the storage of the record, the queue status of the message is initialized. The queue_status column of the table contains the status of the LDN message inside the queue. All the possible queue_status values are described into the java class org.dspace.app.ldn.LDNMessageEntity as integer constants.

Status name

Value in DBDescription

QUEUE_STATUS_UNTRUSTED_IP

QUEUE_STATUS_UNTRUSTED

0

5

Message must not be routed as it is not trusted.
This may occur if the IP address of the notifications' sender doesn't match the provided "IP Range"
 or if the service inbox URL in the origin section of the message doesn't match with any registered LDN Service entry's Inbox URL.
QUEUE_STATUS_QUEUED1Message is waiting in the queue to be processed by the Extractor
QUEUE_STATUS_PROCESSING2Message is currently being processed by the Extractor
QUEUE_STATUS_PROCESSED3Message has been successfully processed by the Extractor
QUEUE_STATUS_FAILED4Message has been evaluated but its routing has failed



If all validations are run successfully the LDN Notification status is set as QUEUE_STATUS_QUEUED and the notification will be processed as soon as the extractor retrieves it from the queue. 

...

In the example below it is shown the submission of an Item with a new section for COAR-Notify.
In this section we can manually choose ldn-services (which were not marked as automatic) in order to ask for Review, Endorsement and Ingest to external services.
If No (non-automatic) pattern has been configured for the LDN Service this service will not be displayed in any of the dropdown. 

Image Modified

Automatic Inbound pattern triggering

...

This consumer is responsible for the handling of both automatic a non-automatic patterns


event.consumer.ldnmessage.class = org.dspace.app.ldn.LDNMessageConsumer
event.consumer.ldnmessage.filters = Item+Install



Understanding the structure of the LDN Notification

...

The context section is the same for any LDN Notification 

  "@context": [
    "https://www.w3.org/ns/activitystreams",
    "https://purl.org/coar/notify"
  ]

actor

This section describes the actor which performs the request
This is a descriptive section and doesn't include important information

  "actor": {
    "id": "https://review-service.com",
    "name": "Review Service",
    "type": "Service"
  }

context

This is one of the most important section.
In this section we have a description of the Item being involved in the LDN Notification

...

other fields are descriptive fields for the item

  "context": {
    "id": "https://research-organisation.org/repository/preprint/201203/421/",
    "ietf:cite-as": "https://doi.org/10.5555/12345680",
    "type": "sorg:AboutPage",
    "url": {
      "id": "https://research-organisation.org/repository/preprint/201203/421/content.pdf",
      "mediaType": "application/pdf",
      "type": [
        "Article",
        "sorg:ScholarlyArticle"
      ]
    }
  }

id

The identifier of the LDN notification (Each notification has a different id)

"id": "urn:uuid:94ecae35-dcfd-4182-8550-22c7164fe23f"

inReplyTo

This field is used to reply to other LDN notification so that the system knows if the current notification is a response

"inReplyTo": "urn:uuid:0370c0fb-bb78-4a9b-87f5-bed307a509dd"

object

This is a descriptive section of the received Review, Endorsement etc..

  • id → is the URL of the review/endorsement etc.
  "object": {
    "id": "https://review-service.com/review/geo/202103/0021",
    "ietf:cite-as": "https://doi.org/10.3214/987654",
    "type": [
      "Document",
      "sorg:Review"
    ]
  }

origin

This is an important section since it is used (for incoming notifications) to determine the service among the registered ones.
If the service is not recognized as registered the notification is untrusted

The field being used for this check is inbox

  

  "origin": {
    "id": "https://review-service.com/system",
    "inbox": "https://review-service.com/inbox/",
    "type": "Service"
  }

target

This section is used to describe the target system involved in the notification workflow 

  "target": {
    "id": "https://generic-service.com/system",
    "inbox": "https://generic-service.com/system/inbox/",
    "type": "Service"
  }

type

This type section is important since it's determining how to process/evaluate any received notification

  "type": [
    "Announce",
    "coar-notify:ReviewAction"
  ]