I know planning for the Vatican in June is probably just getting started, but I want to put a vote in for a panel on "social web notifications" with working demos of "webmentions", "linked data notifications", and possibly a "pub-sub" approach, so that all three approaches could be evaluated in subsequent working groups.
This weekend, at a very exciting meeting at Penn, I met another large project based at Princeton with an extremely similar use case to my own (this is the Princeton Geniza Lab:
https://www.princeton.edu/~geniza/). They have lots of quality metadata (transcriptions, translations, etc.) for images, scattered and hosted by other libraries, including the Penn Library. The SCTA also has metadata and transcriptions about manuscripts at Penn. So this spring, I'd like to build another set of demos involving multiple research groups (the SCTA and the Princeton Geniza Lab) and multiple libraries (Penn, hopefully also with Harvard, and e-codices). This weekend we began planning for a small meeting at Penn with the Geniza lab to try to realize a more elaborate demo before the Vatican meeting. But this time I'd like to implement it with the Linked Data Notification spec, so that we could compare this demo with the webmention and analyze the pros and cons. (Note: this only takes care of two approaches, if we want the pub-sub approach to be a contender, we need to find a way to get a demo of that as well. Anyone??)
Target's Response -- IIIF Manifest (requires "inbox" property on manifest object):
HEAD /metadata/iiif/kba-WettF0015/manifest.json HTTP/1.1
Accept: application/ld+json
HTTP/1.1 200 OK
{
... rest of manifest
}
Sender's Post
POST /ldn/inbox/ HTTP/1.1
Content-Language: en
Sender's Announcement
{
"@id": "",
"@type": "Announce",
"updated": "2016-06-28T19:56:20.114Z"
}
Sender's Object
The supplement object with the "supplement" wrapper is probably the most controversial part of the earlier webmention demo. I also wish that this wrapper could be jettisoned, and I think in the case of a search service and a layer they could. In most cases, the above "announcement" basically replaces the "supplement" wrapper we proposed earlier.
However, I still have a problem with ranges. Because IIIF doesn't have a concept of a RangeList (i.e. a single object for the entire set of ranges), I can't point to the entire set of ranges in the Linked Data Announcement with one de-referencable URL. Thus the supplement becomes a wrapper, and the "profile" is a way to say the announcement is a connect grouping of ranges. With such a wrapper, I fear I would have to send a separate announcement range with the proposed range list.
(any chance IIIF would ever support a "RangeList" object, analogous to an "AnnotationList"?)
{
"@type": "supplement",
"within": [
],
"attribution": "Data provided by the Scholastic Commentaries and Texts Archive",
"description": "A range list for Sentences Commentary rothwellcommentary/wettf15",
"ranges": [
{
"@type": "sc:Range",
"label": "William de Rothwell Commentary",
"viewingHint": "top",
"ranges": [
]
},
{
"@type": "sc:Range",
"label": "Librum I",
"ranges": [
]
}
]
}
Inbox Post Response
POST /ldn/inbox/ HTTP/1.1
Content-Language: en
{
"@type": "Announce",
"updated": "2016-06-28T19:56:20.114Z"
}
HTTP/1.1 201 Created
Inbox Get Response for notifications 9272f00
(Again, the object value for the "object" key could be, the entire layer, search service, or a RangeList (if there were such a thing), but for now it's just the supplement object.)
GET /ldn/inbox/9272f00 HTTP/1.1
Accept: application/ld+json, text/turtle, application/xhtml+xml, text/html
Accept-Language: en-GB,en;q=0.8, en-US;q=0.6
HTTP/1.1 200 OK
Content-Language: en
{
"@context": [
{ "@language": "en" }
],
"@type": "Announce",
"object": {
"@type": "supplement",
"within": [
],
"attribution": "Data provided by the Scholastic Commentaries and Texts Archive",
"description": "A range list for Sentences Commentary rothwellcommentary/wettf15",
"ranges": [
{
"@type": "sc:Range",
"label": "William de Rothwell Commentary",
"viewingHint": "top",
"ranges": [
]
},
{
"@type": "sc:Range",
"label": "Librum I",
"ranges": [
]
}
]
},
"updated": {
"@value": "2016-06-28T19:56:20.114Z"
}
}
There may be places where I'm WAY of track, so comments and corrections are most welcome.