Skip to content

Commit

Permalink
Merge pull request #317 from IIIF/0283-missing-image
Browse files Browse the repository at this point in the history
#283 Missing images in a sequence
  • Loading branch information
glenrobson authored Feb 16, 2024
2 parents c5b86ef + cf7137b commit 96c87fa
Show file tree
Hide file tree
Showing 4 changed files with 185 additions and 0 deletions.
1 change: 1 addition & 0 deletions _includes/links.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@

[0266]: {{ site.cookbook_url | absolute_url }}/recipe/0266-full-canvas-annotation/ "Simplest Annotation"
[0269]: {{ site.cookbook_url | absolute_url }}/recipe/0269-embedded-or-referenced-annotations/ "Embedded or Referenced Annotations"
[0283]: {{ site.cookbook_url | absolute_url }}/recipe/0283-missing-image/ "Missing Images in a Sequence"

[0326]: {{ site.cookbook_url | absolute_url }}/recipe/0326-annotating-image-layer/ "Annotate a specific images or layers"
[0306]: {{ site.cookbook_url | absolute_url }}/recipe/0306-linking-annotations-to-manifests/ "Linking external Annotations targeting a Canvas to a Manifest"
Expand Down
1 change: 1 addition & 0 deletions index.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ _The corresponding 2.1 test fixture(s) is given like this, where appropriate: ..
* [Book behavior (paging) variations][0011] (15,16,17)
* [Addressing a spatial region][0299]
* [Viewing direction and its effect on navigation][0010] (11,12,13,14)
* [Missing Images in a Sequence][0283]
* [Manifest Thumbnail][0117]
* [Implementation discussion: Thumbnails on Canvases][0232]
* [Load a Preview Image Before the Main Content][0013]
Expand Down
54 changes: 54 additions & 0 deletions recipe/0283-missing-image/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
---
title: Missing Images in a Sequence
id: 283
layout: recipe
tags: [image, presentation]
summary: "Represent a missing image from a paged object in a sequence."
viewers:
- UV
- Mirador
topic:
- image
- basic
---

## Use Case

You have a paged object, such as a printed book or early manuscript, that has an image missing. You want to include a Canvas in the page flow to acknowledge the missing sequenced image and also to make sure the recto/verso paging functionality isn't thrown off by altogether eschewing a Canvas at the point of the missing image.

## Implementation notes

This recipe attempts to address desires to have a good user experience for people interacting with IIIF resources presented sequentially but lacking one or more images. The recipe also contemplates software consumption of the same. None of the Manifest information described here is required by the [IIIF Presentation API][prezi3], but it may bring benefits to those accessing your work. Nothing in the IIIF Presentation API makes any provision for specifying how or even whether a Canvas replaces what is supposed to appear at that point of the page flow, as the API is agnostic both about your content and its semantics as well as any semantics of your Manifest's structure.

To maintain a sequence presentation of a paged object with missing images, we suggest adding a content-less Canvas with, at a bare minimum, the `id`, `type`, `height`, `width`, and `items` properties. The `items` property would be written as empty specifically to assert there is no image available. In addition, while the spec doesn’t require the presence of `items`, [the IIIF Presentation API Validator](https://presentation-validator.iiif.io/) will fail to validate a Canvas without `items` as it differentiates between Canvas references found in Ranges and Canvas references found not in Ranges by the presence of `items`.

Using an empty Canvas is a very lightweight and authentic way to show missing content. That is, having a content-free Canvas takes modest effort and can represent the lack of content in a real-world object or an error in creating a digital version. However, with only the bare minimum properties neither viewers, nor people interacting with the resources, nor code interacting with it have any indication of why the image is absent. Consequently, as shown in this recipe's Manifest, it's a good idea to make use of the `label` property to contain useful text.

### Additional Information

For a representation of an absent IIIF resource, accessibility to non-visual interactions is particularly important. Using both the minimum suggested properties thoughtfully and additional other properties as the situation demands will be more likely to provide an equitable experience for people with visual disabilities. As an example, note that the `metadata` property can contain as many arbitrary pairs of `label` and `value` as needed to convey accessible information about the missing resource. Note that because viewers are not required to display the metadata in any predictable way or at all, `metadata` content cannot be assumed to be always readable by both visual and non-visual means.

If the best approach is to redirect visitors away from the resource to explain the absence, other Manifest and Canvas properties can be used to provide content pointers to more information about missing image(s). For instance, `homepage` can direct them to a webpage that talks about the object and its physical state.

## Restrictions

No known restrictions.

## Example

For this example, we are using views from a paged Ethiopic manuscript. One verso page has been imagined missing, and represented in the Manifest as discussed above.

{% include manifest_links.html manifest="manifest.json" %}

{% include jsonviewer.html src="manifest.json" config='data-line="50-77"' %}


# Related recipes

* [Simple Manifest - Book][0009]
* [Linking to Web Page of an Object (`homepage`)][0047]
* [Metadata on Any Resource][0029]


{% include acronyms.md %}
{% include links.md %}
129 changes: 129 additions & 0 deletions recipe/0283-missing-image/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
{
"@context": "http://iiif.io/api/presentation/3/context.json",
"id": "{{ id.url }}",
"type": "Manifest",
"label": {
"en": [ "Ethiopic Ms 10" ]
},
"items": [
{
"id": "{{ id.path }}/canvas/p1",
"type": "Canvas",
"label": { "en": [ "f. 1r" ] },
"height": 2504,
"width": 1768,
"items": [
{
"id": "{{ id.path }}/page/p1/1",
"type": "AnnotationPage",
"items": [
{
"id": "{{ id.path }}/annotation/p0001-image",
"type": "Annotation",
"motivation": "painting",
"body": {
"id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg",
"type": "Image",
"format": "image/jpeg",
"height": 2504,
"width": 1768,
"service": [
{
"id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master",
"type": "ImageService3",
"profile": "level1"
}
]
},
"target": "{{ id.path }}/canvas/p1"
}
]
}
]
},
{
"id": "{{ id.path }}/canvas/p2",
"type": "Canvas",
"label": { "en": [ "f. 1v — MISSING" ] },
"height": 2504,
"width": 1768,
"metadata": [
{
"label": { "en": [ "Description" ] },
"value": { "en": [ "Image unavailable or does not exist" ] }
}
],
"items": []
},
{
"id": "{{ id.path }}/canvas/p3",
"type": "Canvas",
"label": { "en": [ "f. 2r" ] },
"height": 2456,
"width": 1792,
"items": [
{
"id": "{{ id.path }}/page/p3/1",
"type": "AnnotationPage",
"items": [
{
"id": "{{ id.path }}/annotation/p0003-image",
"type": "Annotation",
"motivation": "painting",
"body": {
"id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg",
"type": "Image",
"format": "image/jpeg",
"height": 2456,
"width": 1792,
"service": [
{
"id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master",
"type": "ImageService3",
"profile": "level1"
}
]
},
"target": "{{ id.path }}/canvas/p3"
}
]
}
]
},
{
"id": "{{ id.path }}/canvas/p4",
"type": "Canvas",
"label": { "en": [ "f. 2v" ] },
"height": 2440,
"width": 1760,
"items": [
{
"id": "{{ id.path }}/page/p4/1",
"type": "AnnotationPage",
"items": [
{
"id": "{{ id.path }}/annotation/p0004-image",
"type": "Annotation",
"motivation": "painting",
"body": {
"id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg",
"type": "Image",
"format": "image/jpeg",
"height": 2440,
"width": 1760,
"service": [
{
"id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master",
"type": "ImageService3",
"profile": "level1"
}
]
},
"target": "{{ id.path }}/canvas/p4"
}
]
}
]
}
]
}

0 comments on commit 96c87fa

Please sign in to comment.