Diverse Applications of Linked Data Notifications for IIIF Resources
Jeffrey C. Witt (Loyola University Maryland)
Patrick Cuba (St. Louis University)
LDN Goals and Motivation
The Goal of using Linked Data Notifications with IIIF is to connect “Supplemental Information” from third parties with institutional manifests.
When institutions make their images available, scholars and researchers use them, study them, and create new data.
How can institutions receive this supplemental information back to enrich the viewing experience of their own collections
How do we complete the circle, so that open data sharing is a
“rising tide that lifts ALL boats”?
Typical LDN / IIIF pattern
Problems
IIIF and LDN: History, Lessons Learned, and Solutions Proposed
Solution: Regional Inboxes; enter Rerum Inbox
"service": {� "@context": "http://www.w3.org/ns/ldp#inbox",� "@id":"http://inbox.rerum.io/messages� ?target=http://example.com/book1/manifest.json",� "inbox":"http://inbox.rerum.io/messages� ?target=http://example.com/book1/manifest.json"� "profile": "http://www.w3.org/ns/ldp#inbox",� "label": "Linked Data Notifications inbox"�}
Regional Inboxes can be pre-known by clients, so even if a manifest does not declare an inbox, a client can check known regional inboxes.
Solution: Client Side Inbox Retrieval and Manifest Modification
Example
Send a notification
Inbox Receives Notification
Sample Inbox: http://inbox.rerum.io/messages?target=https://scta.info/iiif/plaoulcommentary/sorb/manifest
{
"@context": "http://www.w3.org/ns/ldp",
"@type": "ldp:Container",
"@id": "http://inbox.rerum.io/messages?target=https://scta.info/iiif/plaoulcommentary/sorb/manifest",
"contains": [
{
"@id": "http://inbox.rerum.io/id/-L5UNLWrdYJwxgatb-z4",
"@context": "http://iiif.io/api/presentation/2/context.json",
"@type": "Announce",
"actor": {
"@id": "https://scta.info",
"label": "SCTA"
},
"motivation": "supplementing",
"object": {
"@id": "https://scta.info/iiif/plaoulcommentary/sorb/layer/transcription",
"@type": "sc:Layer",
"attribution": "SCTA",
"description": "A Transcription Layer for Plaoul Sorb",
"license": "creative commons link",
"logo": "http://scta.info/logo.png"
},
"published": "Fri Feb 16 16:10:16 UTC 2018",
"target": "https://scta.info/iiif/plaoulcommentary/sorb/manifest"
},
]
}
Open an institutional manifest with no ranges or transcriptions
Import Range
Learn about available transcriptions
Import transcriptions
Other Applications
Error Reporting
Distribution and Discovery
Sharing Links
Peer Review
Flag Planting
A Draft Specification
Basic Uses Inbox to connect IIIF content
Service Block: To be included in a manifest a service block
"service": {� "@context": "http://www.w3.org/ns/ldp#inbox",�"@id":"http://inbox.rerum.io/messages?target=http://example.com/book1/manifest.json",�"inbox":"http://inbox.rerum.io/messages?target=http://example.com/book1/manifest.json"� "profile": "http://www.w3.org/ns/ldp#inbox",� "label": "Linked Data Notifications inbox"�}�The @id and inbox and the @context and profile property pairs SHOULD match and both be present to allow the service to be recognized by both the internal context and the generic IIIF JSON-LD service block protocols.
{� "@context": "http://iiif.io/api/presentation/2/context.json",� "@type": "as:Announce",� "motivation": "supplementing",� "actor":{� "@id": "https://scta.info/#identity”,� "label": "SCTA"� },� "target": "http://inbox.rerum.io?target=http://example.com/book1/manifest.json",� "Object": {�"@id":"http://scta.info/iiif/lombardsententia/bnf15705/ranges/toc/wrapper”,� "@type":"sc:Range",� "attribution": "Created by Joe",� "description": "Table of Contents missing from the published Sequence.",� "license": "https://creativecommons.org/licenses/by-sa/4.0/",� "logo": "http://link.to.logo.png"� }�}
POST Payload: To be sent via a POST request to the value of the inbox property in the manifest service block
Example Url http://inbox.rerum.io/messages?target=https://scta.info/iiif/plaoulcommentary/sorb/manifest
Example Response
{
"@context": "http://www.w3.org/ns/ldp",
"@type": "ldp:Container",
"@id": "http://inbox.rerum.io/messages?target=https://scta.info/iiif/plaoulcommentary/sorb/manifest",
"contains": [ {array of notification objects}, ... ]
}
Inbox Payload: To be return by inbox, when target manifest id is provided
{� "@id": "http://inbox.rerum.io/id/1",� "@context": "http://iiif.io/api/presentation/2/context.json",� "@type": "as:Announce",� "motivation": "supplementing",� "published": "2017-01-02",� "actor":{� "@id": "https://scta.info/#identity",� "label": "SCTA"� },� "target": "http://example.com/book1/manifest.json",� "object": {� "@id":"http://scta.info/iiif/lombardsententia/bnf15705/ranges/toc/wrapper",� "@type":"sc:Range",� "attribution": "Created by Joe",� "description": "Table of Contents missing from the published Sequence.",� "license": "creative commons link"� "logo": "http://link.to.logo.png"� }�}�
Basic structure of individual notifications: To be returned by an inbox when an inbox notification id is dereferenced
Next steps