IIIF Change Discovery API
Introduction
The IIIF Change Discovery API provides a mechanism to discover changes to resources. The Activity Streams 2.0 specification is used to describe these changes, through an OrderedCollection (an interlinked set of pages) in which each OrderedCollectionPage contains a certain number of change events.
The OrderedCollection serves as a navigational starting point for discovery, and provides a reference to the last OrderedCollectionPage within the collection. The last OrderedCollectionPage describes the most recent event(s), while the pages before that describe older event(s). Additionally, each page may contain a reference to the previous and/or the next page in a collection. Note that the API specification recommends to begin processing with the last page and that providing a reference to the first page is optional.
The client should keep track of the pages or events that have already been processed before. The client is also expected to interpret the types of change to a resource and infer what the current state of the resource is, and it should make intelligent decisions whether an event is still relevant or applicable to a resource.
Implementation
Rijksmuseum uses a IIIF Change Discovery API to facilitate the discovery of any changes to the metadata of e.g. its collection objects and bibliographic resources.
The API serves pages that contain a maximum of one hundred ordered events. Each event with a timestamp, the type of change and the persistent identifier of the resource that underwent the change. The actual metadata of the resource is not included; the content can be obtained by resolving the persistent identifier of the resource.
Datasets
The implementation also includes support for datasets, which scopes an
OrderedCollection
to events about an opiniated selection of resources.
Each dataset is assigned a unique dataset number
. Rijksmuseum registers
certain datasets (e.g. as DCAT entries
in the NDE Dataset Register)
or communicates relevant dataset numbers to interested parties directly.
However, discovery of datasets is currently not available.
Access
There are two endpoints available, a UAT and a production endpoint.
Intented Use | Resource Scope | Root Location |
---|---|---|
Acceptance Test | All | https://acc.data.rijksmuseum.nl/cd/collection.json |
Acceptance Test | Dataset | https://acc.data.rijksmuseum.nl/cd/dataset number /collection.json |
Production | All | https://data.rijksmuseum.nl/cd/collection.json |
Production | Dataset | https://data.rijksmuseum.nl/cd/dataset number /collection.json |
Examples
OrderedCollection
The following example does not represent an actual API response.
{
"@context": "http://iiif.io/api/discovery/1/context.json",
"@type": "OrderedCollection",
"first": {
"id": "http://data.rijksmuseum.nl/cd/pages/collection/forward/1.json",
"type": "OrderedCollectionPage"
},
"id": "http://data.rijksmuseum.nl/cd/collection.json",
"last": {
"id": "http://data.rijksmuseum.nl/cd/pages/collection/backward/500.json",
"type": "OrderedCollectionPage"
}
}
OrderedCollectionPage
The list of events was reduced to keep the example small and does not represent an actual API response.
{
"@context": "http://iiif.io/api/discovery/1/context.json",
"id": "http://data.rijksmuseum.nl/cd/pages/collection/backward/500.json",
"orderedItems": [
{
"endTime": "2024-12-10T16:00:00.723333",
"object": {
"id": "http://data.rijksmuseum.nl/2987654"
},
"type": "Create"
},
{
"endTime": "2024-12-10T16:00:00.656666",
"object": {
"id": "http://data.rijksmuseum.nl/2765432"
},
"type": "Create"
}
],
"partOf": {
"id": "http://data.rijksmuseum.nl/cd/collection.json",
"type": "OrderedCollection"
},
"prev": {
"id": "http://data.rijksmuseum.nl/cd/pages/500/backward/400.json",
"type": "OrderedCollectionPage"
},
"type": "OrderedCollectionPage"
}