IIIF / iiif-stories

Community repository for documenting stories and use cases related to uses of the International Image Interoperability Framework.
21 stars 0 forks source link

Group images across Canvases #136

Open lutzhelm opened 4 years ago

lutzhelm commented 4 years ago

Group images across Canvases

(Provide link to index.md of the issue, if available. To be filled in after issue is created - you need the issue number!)

Use case

A manifest provides multiple types of images for each Canvas, e.g. visible light and UV photographs. A user wants to select only one of those types to be displayed when navigating through the manifest.

lutzhelm commented 4 years ago

(I hope this idea is ready to become a cookbook recipe; if not, I'll post it in the iiif-stories repo.)

While the presentation API 3.0 beta draft quite clearly recommends the use of AnnotationCollections for grouping cross Canvas textual AnnotationsPages like translations of a certain language, grouping AnnotationsPages across Canvases is also useful for identifying commonalities of image annotations. If a IIIF manifest contains both visible light and UV photographs for each Canvas, a user might want to display only one of those two, without adjusting his viewer's settings for each new Canvas.

In a Manifest, the grouped AnnotationPages in the Canvases' items would have to contain a reference to an AnnotationCollection, somthing like:

{
  "@context": "http://iiif.io/api/presentation/3/context.json",
  "id": "https://example.org/iiif/book1",
  "type": "Manifest",
  "items": [
    {
      "id": "https://example.org/iiif/book1/canvas1",
      "type": "Canvas",
      "items": [
        {
          "id": "https://example.org/iiif/book1/annopage/daylight1",
          "type": "AnnotationPage",
          "label": { "@none": "Visible light photograph" },
          "partOf": {
            "id": "https://example.org/iiif/book1/annocoll/daylight",
            "type": "AnnotationCollection"
          },
          "next": {
            "id": "https://example.org/iiif/book1/annopage/daylight2",
            "type": "AnnotationPage"
          },
          "items": [...]
        },
        {
          "id": "https://example.org/iiif/book1/annopage/uv1",
          "type": "AnnotationPage",
          "label": { "@none": "UV photograph" },
          "partOf": {
            "id": "https://example.org/iiif/book1/annocoll/uv",
            "type": "AnnotationCollection"
          },
          "next": {
            "id": "https://example.org/iiif/book1/annopage/uv2",
            "type": "AnnotationPage"
          },
          "items": [...]
        }
      ]
    },
    {
      "id": "https://example.org/iiif/book1/canvas2",
      "type": "Canvas",
      "items": [
        {
          "id": "https://example.org/iiif/book1/annopage/daylight2",
          "type": "AnnotationPage",
          "label": { "@none": "Visible light photograph" },
          "partOf": {
            "id": "https://example.org/iiif/book1/annocoll/daylight",
            "type": "AnnotationCollection"
          },
          "items": [...]
        },
        {
          "id": "https://example.org/iiif/book1/annopage/uv2",
          "type": "AnnotationPage",
          "label": { "@none": "UV photograph" },
          "partOf": {
            "id": "https://example.org/iiif/book1/annocoll/uv",
            "type": "AnnotationCollection"
          },
          "items": [...]
        }
      ]
    }
  ]
}

Additionally, an AnnotationCollection resource would have to be provided for each group of images:

{
  "@context": "http://iiif.io/api/presentation/3/context.json",
  "id": "https://example.org/iiif/book1/annocoll/uv",
  "type": "AnnotationCollection",
  "label": {"@none": ["UV photographs"]},
  "first": { "id": "https://example.org/iiif/book1/annopage/uv1", "type": "AnnotationPage" },
  "last": { "id": "https://example.org/iiif/book1/annopage/uv2", "type": "AnnotationPage" }
}
glenrobson commented 4 years ago

As discussed in the cookbook discussion we though Ranges might be the place to express all of the different types of image in one place. This should allow the user to navigate using a table of contents to only see all of the UV images or only the Visible light.

If you had the different versions of a page (UV and Visible) all painted on one canvas with a choice annotation this would allow the layer functionality in existing viewers to work.

To create the experience to navigate the images in order e.g. all UV image or all Visible light images it should be possible to create a range which points to the UV images inside the canvas.

While looking at another recipe I came across the following for Start: https://iiif.io/api/presentation/3.0/#start which mentions that in Start and Ranges you can link to items within a canvas using a selector. I'm not sure what selector you could use to point to a image within a canvas but maybe SpecificResource would be an option.