diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 79e41ad02..8bd420d14 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -7,7 +7,7 @@ name: Deploy-preview on: push: branches: - - '*' + - '**' - '!master' - '!main' - '!beta' diff --git a/_includes/viewer_link.html b/_includes/viewer_link.html index 5bba00c55..0c192bdac 100644 --- a/_includes/viewer_link.html +++ b/_includes/viewer_link.html @@ -56,7 +56,12 @@ https://demo.viewer.glycerine.io/viewer?iiif-content={{manifest_url |strip}} {% endcapture %} {% assign default_text="View in Glycerine Viewer" %} -{% else %} +{% elsif include.type == 'Theseus' %} + {% capture viewer_url %} + https://theseusviewer.org/?iiif-content={{manifest_url |strip}} + {% endcapture %} + {% assign default_text="View in Theseus" %} +{% else %} {% capture default_text %}Unknown Viewer type '{{ include.type}}'{% endcapture %} {% capture viewer_url %}{{manifest_url |strip}}{% endcapture %} {% endif %}{{ include.text | default: default_text }} diff --git a/recipe/0000_template/index.md b/recipe/0000_template/index.md index 52be3cb8b..a6cf0d178 100644 --- a/recipe/0000_template/index.md +++ b/recipe/0000_template/index.md @@ -5,7 +5,7 @@ layout: recipe tags: [tbc] summary: "tbc" viewers: -topic: +topic: - basic --- @@ -21,7 +21,7 @@ How do you implement the pattern? ## Restrictions -When is this pattern is usable / not usable? Is it deprecated? If it uses multiple specifications, which versions are needed, etc.? +When is this pattern is usable / not usable? Is it deprecated? If it uses multiple specifications, which versions are needed, etc.? Delete this section if it is not needed. If you don't know what the restrictions might be initially, just leave the following line: @@ -32,7 +32,7 @@ If you don't know what the restrictions might be initially, just leave the follo Describe the solution in prose and provide an example. The example json document must be an external document, and imported with the following: -{% include manifest_links.html viewers="UV, Mirador, Curation" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Ramp, Aviary, Glycerine, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" %} @@ -44,4 +44,3 @@ Provide a bulleted list of related recipes and why they are relevant. {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0001-mvm-image/index.md b/recipe/0001-mvm-image/index.md index 9d4ed4ecc..9ac30a3c5 100644 --- a/recipe/0001-mvm-image/index.md +++ b/recipe/0001-mvm-image/index.md @@ -10,6 +10,7 @@ viewers: - Annona - Clover - Glycerine Viewer + - Theseus topic: - basic - image diff --git a/recipe/0002-mvm-audio/index.md b/recipe/0002-mvm-audio/index.md index 50b887f74..880cb3de5 100644 --- a/recipe/0002-mvm-audio/index.md +++ b/recipe/0002-mvm-audio/index.md @@ -10,7 +10,8 @@ viewers: - Clover - Ramp - Aviary -topic: + - Theseus +topic: - basic - AV code: @@ -30,7 +31,7 @@ The implementation is identical to the [image example][0001], except that the co This example shows a Manifest with a single Canvas that lasts for 1985.024 seconds. It has a single audio file (audio-sample.mp4) which is associated with it. The mp4 also has a duration of 1985.024 seconds. -{% include manifest_links.html viewers="UV, Mirador, Clover, Ramp, Aviary" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Clover, Ramp, Aviary, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" %} diff --git a/recipe/0003-mvm-video/index.md b/recipe/0003-mvm-video/index.md index c35953316..7871881b1 100644 --- a/recipe/0003-mvm-video/index.md +++ b/recipe/0003-mvm-video/index.md @@ -10,7 +10,8 @@ viewers: - Clover - Ramp - Aviary -topic: + - Theseus +topic: - basic - AV code: @@ -28,9 +29,9 @@ The implementation is identical to the [image example][0001], except that the co ## Example -This example shows a Manifest with a single Canvas that lasts for 572 seconds, or just under 10 minutes. It has a single video file (lunchroom_manners_1024kb.mp4) which is associated with it. The mp4 also has a duration of 572 seconds. +This example shows a Manifest with a single Canvas that lasts for 572 seconds, or just under 10 minutes. It has a single video file (lunchroom_manners_1024kb.mp4) which is associated with it. The mp4 also has a duration of 572 seconds. -{% include manifest_links.html viewers="UV, Mirador, Clover, Ramp, Aviary" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Clover, Ramp, Aviary, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" %} diff --git a/recipe/0004-canvas-size/index.md b/recipe/0004-canvas-size/index.md index 16eadb1d6..77a1a38b9 100644 --- a/recipe/0004-canvas-size/index.md +++ b/recipe/0004-canvas-size/index.md @@ -6,8 +6,9 @@ tags: [image, presentation, canvas] summary: "Demonstrates that image dimensions (pixels) need not be the same as the Canvas dimensions (unit-less)" viewers: - UV - - Mirador + - Mirador - Annona + - Theseus topic: image code: - iiif-prezi3 @@ -38,7 +39,7 @@ The aspect ratio should be consistent between your source image and Canvas. Othe This example shows a Manifest with a single Canvas that has height and width dimensions three times the pixel dimensions of the image in order to construct a Canvas with both dimensions greater than 1000px. -{% include manifest_links.html viewers="UV, Mirador, Annona" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config="data-line='14-15,29-30'"%} # Related recipes diff --git a/recipe/0005-image-service/index.md b/recipe/0005-image-service/index.md index c15412621..18652404e 100644 --- a/recipe/0005-image-service/index.md +++ b/recipe/0005-image-service/index.md @@ -9,8 +9,9 @@ viewers: - Annona - Clover - Glycerine Viewer -topic: - - basic + - Theseus +topic: + - basic - image code: - iiif-prezi3 @@ -22,7 +23,7 @@ You have a rare or special object in your collection that you'd like to make ava ## Implementation Notes -A service may be attached to any IIIF resource type, and requires at minumum the use of `id` and `type`. The annotation structure follows that of the [Simplest Manifest - Image][0001] recipe. Within the `body` of the image annotation, specify the IIIF Image API service using the `service` property. The service's `id` property value is the base URI of that IIIF Image API service. +A service may be attached to any IIIF resource type, and requires at minumum the use of `id` and `type`. The annotation structure follows that of the [Simplest Manifest - Image][0001] recipe. Within the `body` of the image annotation, specify the IIIF Image API service using the `service` property. The service's `id` property value is the base URI of that IIIF Image API service. The `type` tells the client what version of the IIIF Image API (1, 2, or 3) you are referencing. Values for `type` are defined in [the IIIF Registry of Services][service-registry] and include values for compatibility with other IIIF APIs. See [the service property in the IIIF Presentation specification][prezi3-service] for more information. @@ -36,7 +37,7 @@ Though a version 3 Manifest may specify a service using the version 2 `@id` and ## Example -{% include manifest_links.html viewers="Mirador, Annona, Clover, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador, Annona, Clover, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="36-42"' %} diff --git a/recipe/0006-text-language/index.md b/recipe/0006-text-language/index.md index 2008c2bd2..6f5f27531 100644 --- a/recipe/0006-text-language/index.md +++ b/recipe/0006-text-language/index.md @@ -6,9 +6,10 @@ tags: [i18n, text, presentation] summary: "An example of a IIIF Resource with labels/descriptions in multiple languages." viewers: - UV - - Mirador + - Mirador - Annona - Glycerine Viewer + - Theseus topic: basic property: label, summary, metadata, requiredStatement code: @@ -41,7 +42,7 @@ To see the language choice in the linked viewers, open the settings menu (gear i The image in this example was sourced via Wikimedia Commons and is public domain. -{% include manifest_links.html viewers="UV, Mirador, Annona, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="6-11, 16-21, 24-26, 31-36, 39-44, 49-54, 58-63, 66-68"' %} diff --git a/recipe/0007-string-formats/index.md b/recipe/0007-string-formats/index.md index fb5e31384..72fc67c7a 100644 --- a/recipe/0007-string-formats/index.md +++ b/recipe/0007-string-formats/index.md @@ -6,10 +6,11 @@ tags: [text, presentation] summary: "You want to have more control on how your metadata is displayed. For example scientific names, and also links out to other sites. Also legacy systems that might include things like italic tags." viewers: - UV - - Mirador + - Mirador - Annona - Clover - Glycerine Viewer + - Theseus topic: property property: label, summary, metadata, requiredStatement code: @@ -32,7 +33,7 @@ For security reasons, clients are expected to allow only `a`, `b`, `br`, `i`, `i ## Example -{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="7,12,24,38"' %} diff --git a/recipe/0008-rights/index.md b/recipe/0008-rights/index.md index 893dfe58a..7ff438e0f 100644 --- a/recipe/0008-rights/index.md +++ b/recipe/0008-rights/index.md @@ -10,6 +10,7 @@ viewers: - Annona - Clover - Glycerine Viewer + - Theseus topic: property property: rights, requiredStatement code: @@ -40,7 +41,7 @@ None known. ## Example -{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="15-27"' %} @@ -51,4 +52,3 @@ None known. {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0009-book-1/index.md b/recipe/0009-book-1/index.md index 643f56fc7..1be820589 100644 --- a/recipe/0009-book-1/index.md +++ b/recipe/0009-book-1/index.md @@ -6,11 +6,12 @@ tags: [image, presentation] summary: "Represent a book, or any object composed of a set of images, as a simple Manifest." viewers: - UV - - Mirador + - Mirador - Annona - Clover - Glycerine Viewer -topic: + - Theseus +topic: - image - basic code: @@ -37,7 +38,7 @@ You should also consider providing a [thumbnail][prezi3-thumbnail] for each Canv ## Example -{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" %} @@ -52,4 +53,3 @@ You should also consider providing a [thumbnail][prezi3-thumbnail] for each Canv {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0010-book-2-viewing-direction/index.md b/recipe/0010-book-2-viewing-direction/index.md index bfff56635..fb728035d 100644 --- a/recipe/0010-book-2-viewing-direction/index.md +++ b/recipe/0010-book-2-viewing-direction/index.md @@ -6,9 +6,10 @@ tags: image, text, layout summary: "Informing a client how the Canvases should be displayed to the viewer in order to read the contents authentically in accordance with the script used, object layout, or reading practice." viewers: - UV - - Mirador + - Mirador - Annona -topic: + - Theseus +topic: - image - property property: viewingDirection @@ -40,7 +41,7 @@ None known This Manifest shows the playbill for "Akiba gongen kaisen-banashi," "Futatsu chōchō kuruwa nikki", and "Godairiki koi no fūjime", kabuki performances at the Chikugo Theater in Osaka, from the fifth month of Kaei 2 (May, 1849). -{% include manifest_links.html viewers="UV, Mirador, Annona" manifest="manifest-rtl.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Theseus" manifest="manifest-rtl.json" %} {% include jsonviewer.html src="manifest-rtl.json" config='data-line="15"' %} diff --git a/recipe/0011-book-3-behavior/index.md b/recipe/0011-book-3-behavior/index.md index f6a062fce..87a69d557 100644 --- a/recipe/0011-book-3-behavior/index.md +++ b/recipe/0011-book-3-behavior/index.md @@ -7,9 +7,10 @@ summary: "The 'behavior' property specifies how Canvases should be displayed in viewers: - id: UV support: partial - - Mirador + - Mirador + - Theseus topic: property -property: +property: - behavior - image code: @@ -44,7 +45,7 @@ The property is permissible for all resource types, but some values (`unordered` This Manifest represents an Ethiopic accordion book with a continuous layout running left-to-right. It has four images that, when using the `"behavior": "continuous"` property, will display as a single continuous image in the viewer. -{% include manifest_links.html viewers="Mirador" manifest="manifest-continuous.json" %} +{% include manifest_links.html viewers="Mirador, Theseus" manifest="manifest-continuous.json" %} {% include jsonviewer.html src="manifest-continuous.json" config='data-line="10-12"' %} @@ -52,7 +53,7 @@ This Manifest represents an Ethiopic accordion book with a continuous layout run This Manifest represents a book imaged as 2-page spreads (two facing pages in a single image). When using the `"behavior": "individuals"` property, the presentation client will force a one-at-a-time view and remove the "book view" option. -{% include manifest_links.html viewers="UV, Mirador" manifest="manifest-individuals.json" %} +{% include manifest_links.html viewers="UV, Mirador, Theseus" manifest="manifest-individuals.json" %} {% include jsonviewer.html src="manifest-individuals.json" config='data-line="10-12"' %} diff --git a/recipe/0013-placeholderCanvas/index.md b/recipe/0013-placeholderCanvas/index.md index ee290fedb..078594917 100644 --- a/recipe/0013-placeholderCanvas/index.md +++ b/recipe/0013-placeholderCanvas/index.md @@ -7,7 +7,8 @@ summary: "Provide the user with something to look at before they choose to start viewers: - Clover - Ramp -topic: + - Theseus +topic: - property - AV property: placeholderCanvas @@ -16,7 +17,7 @@ property: placeholderCanvas ## Use Case -You have an exceptionally large video to present to site visitors. As each visitor's connection reliability and bandwidth are unknown and unpredictable, you want to show them a still image preview of the video (which will load more quickly) until the video has finished loading or has sufficiently buffered. +You have an exceptionally large video to present to site visitors. As each visitor's connection reliability and bandwidth are unknown and unpredictable, you want to show them a still image preview of the video (which will load more quickly) until the video has finished loading or has sufficiently buffered. ## Implementation notes @@ -45,4 +46,3 @@ In the example, the main content is a video of a performance of Donizetti's _L'e {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0014-accompanyingcanvas/index.md b/recipe/0014-accompanyingcanvas/index.md index b65578a72..786fc02c8 100644 --- a/recipe/0014-accompanyingcanvas/index.md +++ b/recipe/0014-accompanyingcanvas/index.md @@ -5,9 +5,10 @@ layout: recipe tags: [audio,image] summary: "Provide the user with something to look at before they choose to start interacting with the main content, and/or while they wait for it to load/buffer, and/or while interacting with the main content." viewers: - - Clover - - Aviary -topic: + - Clover + - Aviary + - Theseus +topic: - property - AV property: accompanyingCanvas @@ -33,7 +34,7 @@ Each instance of `accompanyingCanvas` may only contain one Canvas, and as such m In the example, the main Canvas contains audio of a performance of Gustav Mahler's Symphony No. 3 and the `accompanyingCanvas` contains an image of a page from the score. -{% include manifest_links.html viewers="Clover, Aviary" manifest="manifest.json" %} +{% include manifest_links.html viewers="Clover, Aviary, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config="data-line='20-58'"%} diff --git a/recipe/0015-start/index.md b/recipe/0015-start/index.md index d5e203df4..241ad16a7 100644 --- a/recipe/0015-start/index.md +++ b/recipe/0015-start/index.md @@ -7,7 +7,8 @@ summary: "This manifest uses the 'start' property to specify a point in an audio viewers: - Ramp - Aviary -topic: + - Theseus +topic: - AV - property property: start @@ -39,7 +40,7 @@ For more information on other Selector classes, see: [IIIF Open/Web Annotation E This example shows a Manifest with a single Canvas with a duration of 1801.055 seconds. It has a single video file (30-minute-clock.mp4) which is associated with it. The `start` property specifies a start point of 120.5 seconds into the playback. The video was created by [DrLex1](https://www.youtube.com/watch?v=Lsq0FiXjGHg) and was released using a [Creative Commons Attribution license](https://creativecommons.org/licenses/by/3.0/). -{% include manifest_links.html viewers="Ramp, Aviary" manifest="manifest.json" %} +{% include manifest_links.html viewers="Ramp, Aviary, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="10-18"' %} diff --git a/recipe/0017-transcription-av/index.md b/recipe/0017-transcription-av/index.md index da72dc9f6..40470dda3 100644 --- a/recipe/0017-transcription-av/index.md +++ b/recipe/0017-transcription-av/index.md @@ -7,6 +7,7 @@ summary: "Transcripts as alternative representation of A/V content" viewers: - Ramp - Aviary + - Theseus topic: AV property: rendering code: @@ -16,7 +17,7 @@ code: ## Use Case -You have a transcription file for your A/V resource and want to allow users to download it. +You have a transcription file for your A/V resource and want to allow users to download it. ## Implementation notes @@ -36,7 +37,7 @@ In this example, the Manifest is using a single A/V file; therefore, it is equiv In Ramp, the transcript file is made available to download on the right of the player controls. Click the filename listed in the menu to download the transcript file. -{% include manifest_links.html viewers="Ramp, Aviary" manifest="manifest.json" %} +{% include manifest_links.html viewers="Ramp, Aviary, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="39-50"'%} @@ -50,4 +51,3 @@ In Ramp, the transcript file is made available to download on the right of the p {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0019-html-in-annotations/index.md b/recipe/0019-html-in-annotations/index.md index afe21e041..b7a1f0576 100644 --- a/recipe/0019-html-in-annotations/index.md +++ b/recipe/0019-html-in-annotations/index.md @@ -8,7 +8,8 @@ viewers: - Mirador - Annona - Glycerine Viewer -topic: + - Theseus +topic: - basic code: - iiif-prezi3 @@ -44,7 +45,7 @@ If you have requirements outside of these rules you may be able to configure a c This example Manifest contains an embedded Annotation containing the HTML text "Göttinger Marktplatz mit Gänseliesel Brunnen" with a link to the Wikipedia Article "Gänseliesel-Brunnen (Göttingen)" behind the words "Gänseliesel Brunnen" and an image of the Wikipedia logo. The Annotation has the motivation `commenting` targeting the whole Canvas. The Annotation is the single content of an Annotation Page contained in the `annotations` property of the Canvas. -{% include manifest_links.html viewers="Mirador,Annona, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador,Annona, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="53-58"' %} @@ -55,4 +56,3 @@ This example Manifest contains an embedded Annotation containing the HTML text " {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0021-tagging/index.md b/recipe/0021-tagging/index.md index 0909523a4..8d73070e4 100644 --- a/recipe/0021-tagging/index.md +++ b/recipe/0021-tagging/index.md @@ -5,9 +5,10 @@ layout: recipe tags: [annotation] summary: "Tagging as a basic Annotation" viewers: - - Mirador + - Mirador - Annona - Glycerine Viewer + - Theseus topic: annotation code: - iiif-prezi3 @@ -33,7 +34,7 @@ In this Manifest, we use a photograph of Göttingen from the 2019 IIIF annual co Because the statue is not the sole or dominant element of the photo, we've targeted the tag to a portion of the photo using fragment selector syntax. -{% include manifest_links.html viewers="Mirador,Annona,Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador,Annona,Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="44-63"' %} @@ -43,4 +44,3 @@ Because the statue is not the sole or dominant element of the photo, we've targe {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0022-linking-with-a-hotspot/index.md b/recipe/0022-linking-with-a-hotspot/index.md index 680cfe934..b6a266cae 100644 --- a/recipe/0022-linking-with-a-hotspot/index.md +++ b/recipe/0022-linking-with-a-hotspot/index.md @@ -5,6 +5,7 @@ layout: recipe tags: [annotation] summary: "Link a portion of a Canvas to another resource. " viewers: + - Theseus topic: annotation code: --- @@ -56,7 +57,7 @@ We link the Annotation of the fountain to the Canvas containing its close-up by The body contains a Specific Resource with the `id` of the Canvas containing the close-up of the fountain as `source` and the `id` of the Manifest in the `partOf` property. -{% include manifest_links.html viewers="" manifest="manifest.json" %} +{% include manifest_links.html viewers="Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="49-75"' %} @@ -66,4 +67,3 @@ The body contains a Specific Resource with the `id` of the Canvas containing the {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0022-linking-with-a-hotspot/manifest.json b/recipe/0022-linking-with-a-hotspot/manifest.json index 264e7ab6b..5cdb128ab 100644 --- a/recipe/0022-linking-with-a-hotspot/manifest.json +++ b/recipe/0022-linking-with-a-hotspot/manifest.json @@ -3,9 +3,7 @@ "id": "{{ id.url }}", "type": "Manifest", "label": { - "en": [ - "Picture of Göttingen taken during the 2019 IIIF Conference" - ] + "en": ["Picture of Göttingen taken during the 2019 IIIF Conference"] }, "items": [ { @@ -43,7 +41,7 @@ ], "annotations": [ { - "id": "{{ id.path }}/page/p2/1", + "id": "{{ id.path }}/page/p1/2", "type": "AnnotationPage", "items": [ { @@ -112,4 +110,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/recipe/0024-book-4-toc/index.md b/recipe/0024-book-4-toc/index.md index 2b29057d3..6a19fb492 100644 --- a/recipe/0024-book-4-toc/index.md +++ b/recipe/0024-book-4-toc/index.md @@ -7,8 +7,9 @@ summary: "Using Ranges to create a table of contents for a book" viewers: - UV - Mirador + - Theseus - Glycerine Viewer -topic: structure +topic: structure property: structures --- @@ -37,7 +38,7 @@ In this example, an Ethiopic manuscript contains multiple works, one of which co * Monday * Tuesday -{% include manifest_links.html viewers="UV, Mirador, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="246-326, 247-254, 275-282"' %} diff --git a/recipe/0026-toc-opera/index.md b/recipe/0026-toc-opera/index.md index 8ab3bbcbc..473c03bef 100644 --- a/recipe/0026-toc-opera/index.md +++ b/recipe/0026-toc-opera/index.md @@ -8,7 +8,8 @@ viewers: - UV - Ramp - Aviary -topic: + - Theseus +topic: - AV - structure --- @@ -36,7 +37,7 @@ Leaf Range nodes in a structure are played linearly so they should be contiguous The opera covers the whole length of the Canvas and is divided into two Ranges for the two acts. Atto Primo has a Range for the prelude and first song and then a Range for the remainder of the act. Atto Secondo has not been subdivided into Ranges for simplicity of this example. -{% include manifest_links.html viewers="UV, Ramp, Aviary" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Ramp, Aviary, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" %} ## Related Recipes diff --git a/recipe/0029-metadata-anywhere/index.md b/recipe/0029-metadata-anywhere/index.md index 02b410264..901f1cb0c 100644 --- a/recipe/0029-metadata-anywhere/index.md +++ b/recipe/0029-metadata-anywhere/index.md @@ -6,11 +6,12 @@ tags: [presentation] summary: "Provide item metadata for displaying to users" viewers: - UV - - Mirador + - Mirador - Annona - id: Clover support: partial - Glycerine Viewer + - Theseus topic: property property: metadata --- @@ -37,7 +38,7 @@ Note: Clover supports Metadata at the Manifest level but not down at the Canvas. Credit: *John Dee performing an experiment before Queen Elizabeth I*. Oil painting by Henry Gillard Glindoni. Credit: Wellcome Collection. Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) -{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="10-59, 83-96, 136-149"' %} diff --git a/recipe/0030-multi-volume/index.md b/recipe/0030-multi-volume/index.md index b4d3ae449..9af73108e 100644 --- a/recipe/0030-multi-volume/index.md +++ b/recipe/0030-multi-volume/index.md @@ -6,9 +6,10 @@ tags: [tbc] summary: "tbc" viewers: - UV - - Mirador + - Mirador - Annona - Glycerine Viewer + - Theseus topic: structure --- @@ -36,19 +37,19 @@ Following the Collection resource are the two Manifests for vol. 1 and vol. 2 th **Example Collection for the multi-volume work *青楼絵本年中行事 [Seirō ehon nenjū gyōji]*:** -{% include manifest_links.html viewers="UV, Mirador, Annona, Glycerine Viewer" manifest="collection.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Glycerine Viewer, Theseus" manifest="collection.json" %} {% include jsonviewer.html src="collection.json" config='data-line="4, 10-12"' %} **Example Manifest for vol. 1 of *青楼絵本年中行事 [Seirō ehon nenjū gyōji]*:** -{% include manifest_links.html viewers="UV, Mirador, Annona, Glycerine Viewer" manifest="manifest_v1.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Glycerine Viewer, Theseus" manifest="manifest_v1.json" %} {% include jsonviewer.html src="manifest_v1.json" %} **Example Manifest for vol. 2 of *青楼絵本年中行事 [Seirō ehon nenjū gyōji]*:** -{% include manifest_links.html viewers="UV, Mirador, Annona, Glycerine Viewer" manifest="manifest_v2.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Glycerine Viewer, Theseus" manifest="manifest_v2.json" %} {% include jsonviewer.html src="manifest_v2.json" %} diff --git a/recipe/0031-bound-multivolume/index.md b/recipe/0031-bound-multivolume/index.md index bfe4d211a..103696e78 100644 --- a/recipe/0031-bound-multivolume/index.md +++ b/recipe/0031-bound-multivolume/index.md @@ -5,9 +5,10 @@ layout: recipe tags: [sammelband, multi-volume] summary: "Recipe for a multi-volume object where the volumes are bound together in a single codex." viewers: -- UV -- Mirador -- Glycerine Viewer + - UV + - Mirador + - Theseus + - Glycerine Viewer topic: - structure --- @@ -67,7 +68,7 @@ This will produce an index of the constituent volumes like so: * Erste Ausgabe... (Vol. 1) * Zweyte Ausgabe... (Vol. 2) -{% include manifest_links.html viewers="UV, Mirador, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="246-315"'%} diff --git a/recipe/0032-collection/index.md b/recipe/0032-collection/index.md index a9064f13a..e755e1b10 100644 --- a/recipe/0032-collection/index.md +++ b/recipe/0032-collection/index.md @@ -10,6 +10,7 @@ viewers: - Annona - Clover - Glycerine Viewer + - Theseus topic: - basic --- @@ -28,7 +29,7 @@ As with a Manifest, the `label` property is mandatory, and the language of its v The Collection `items` property is an array of referenced Manifests. In this example there are two Manifests. Each `items` entry must have an `id`, `type`, and a `label`. The `id` must be the URI where the Manifest can be available online. The `type` must be `Manifest` or a `Collection`. Each `items` entry referenced should not be fully embedded into the Collection, and should contain only necessary properties for presentation of the collection such as `thumbnail`. Various other [descriptive](https://iiif.io/api/presentation/3.0/#31-descriptive-properties) and [linking](https://iiif.io/api/presentation/3.0/#33-linking-properties) properties such as `summary`, minimal `metadata`, and `homepage` may be useful as well for presentation. See the [Summary of property requirements](https://iiif.io/api/presentation/3.0/#a-summary-of-property-requirements) for a complete list. -Collections may also reference other Collections. +Collections may also reference other Collections. Collections may have `behavior` defined in order to influence user experience when viewing the resource. Manifests within a Collection DO NOT inherit [behaviors](https://iiif.io/api/presentation/3.0/#behavior) from their referencing Collections; however referenced Collections will. @@ -51,19 +52,19 @@ Note: Each supporting viewer has a distinct method for toggling between Collecti **Example Collection** -{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer" manifest="collection.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer, Theseus" manifest="collection.json" %} {% include jsonviewer.html src="collection.json" %} **Example Manifest for _The Gulf Stream_** -{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer" manifest="manifest-01.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer, Theseus" manifest="manifest-01.json" %} {% include jsonviewer.html src="manifest-01.json" %} **Example Manifest for _Northeaster_** -{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer" manifest="manifest-02.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Clover, Glycerine Viewer, Theseus" manifest="manifest-02.json" %} {% include jsonviewer.html src="manifest-02.json" %} diff --git a/recipe/0033-choice/index.md b/recipe/0033-choice/index.md index c6b6f5242..e4ecb4f78 100644 --- a/recipe/0033-choice/index.md +++ b/recipe/0033-choice/index.md @@ -8,6 +8,7 @@ viewers: - id: Mirador support: partial - Annona + - Theseus topic: structure property: --- @@ -35,7 +36,7 @@ There are many potential user interface approaches for this model. For example, This pattern is important because it is not uncommon, especially for artworks and for early manuscripts, to have more than one image available for the same view. -This recipe should not be used if the images make up multiple parts of the scene, where the intention is to display them together. For example, a digital reconstruction of parts of a manuscript page. In that scenario the intent is not to offer the user a choice of alternative views of the same thing, it is to build an overall view from multiple source images. This scenario is covered by the recipe [Composition of one view from multiple image sources][0036]. +This recipe should not be used if the images make up multiple parts of the scene, where the intention is to display them together. For example, a digital reconstruction of parts of a manuscript page. In that scenario the intent is not to offer the user a choice of alternative views of the same thing, it is to build an overall view from multiple source images. This scenario is covered by the recipe [Composition of one view from multiple image sources][0036]. ## Implementation notes @@ -69,7 +70,7 @@ In this example, we have a single Canvas with the `body.type` "Choice" containin Credit: *John Dee performing an experiment before Queen Elizabeth I*. Oil painting by Henry Gillard Glindoni. Credit: Wellcome Collection. Attribution-NonCommercial 4.0 International (CC BY-NC 4.0) -{% include manifest_links.html viewers="Mirador, Annona" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador, Annona, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="25-67"' %} diff --git a/recipe/0035-foldouts/index.md b/recipe/0035-foldouts/index.md index e27d4b607..6b5604fa4 100644 --- a/recipe/0035-foldouts/index.md +++ b/recipe/0035-foldouts/index.md @@ -5,6 +5,7 @@ layout: recipe tags: [images, behavior, non-paged] summary: "Demonstrates how to model a foldout diagram or map." viewers: + - Theseus topic: structure property: behavior --- @@ -51,7 +52,7 @@ The "non-paged" behavior on Canvases is not yet supported by viewers making this ![thumbnail layout example with non-paged](layout_example1.jpg) -{% include manifest_links.html viewers="" manifest="manifest.json" %} +{% include manifest_links.html viewers="Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="10-12, 134-136"' %} diff --git a/recipe/0036-composition-from-multiple-images/index.md b/recipe/0036-composition-from-multiple-images/index.md index d16b70d57..4bf4a706d 100644 --- a/recipe/0036-composition-from-multiple-images/index.md +++ b/recipe/0036-composition-from-multiple-images/index.md @@ -8,6 +8,7 @@ viewers: - id: Mirador support: partial - Annona +- Theseus topic: structure property: --- @@ -60,7 +61,7 @@ A manifest with a single canvas that has two images painted on it. One is of the *Note: Currently, Mirador 3 only partially supports the layering of multiple images on a single Canvas and it is particularly noteworthy in this use case. While previous iterations of Mirador processed the images upwards from the first painting annotation, Mirador 3 does this in reverse. This means that the second image (the missing illustration detail) is hidden behind the image of the full folio and the user cannot view the reconstructed scene.* -{% include manifest_links.html viewers="Mirador, Annona" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador, Annona, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="22-45, 46-70"' %} diff --git a/recipe/0046-rendering/index.md b/recipe/0046-rendering/index.md index c4e95d725..9d98425bc 100644 --- a/recipe/0046-rendering/index.md +++ b/recipe/0046-rendering/index.md @@ -5,10 +5,11 @@ layout: recipe tags: [image, presentation, canvas] summary: "Linking to non-IIIF representations of the object, such as a PDF." viewers: - - Mirador + - Mirador - Annona - Clover - Glycerine Viewer + - Theseus topic: property property: rendering --- @@ -21,15 +22,15 @@ You have a IIIF format resource for which you would like to offer researchers th This property is used for pointing a viewer to a non-IIIF representation of the resource to which it is attached. In general, the other representation will need a distinct client for viewing from the one used for the IIIF resource. -Three other properties may seem similar, so it's worth highlighting the differences. +Three other properties may seem similar, so it's worth highlighting the differences. -* `homepage` [(IIIF Presentation API reference)](https://iiif.io/api/presentation/3.0/#homepage) +* `homepage` [(IIIF Presentation API reference)](https://iiif.io/api/presentation/3.0/#homepage) Where `rendering` presents an additional representation of the same resource, `homepage` points to a webpage _about_ the object represented by the resource. -* `accompanyingCanvas` [(IIIF Presentation API reference)](https://iiif.io/api/presentation/3.0/#accompanyingcanvas) +* `accompanyingCanvas` [(IIIF Presentation API reference)](https://iiif.io/api/presentation/3.0/#accompanyingcanvas) An `accompanyingCanvas` resource is a IIIF resource presented simultaneously with the main resource, where a target of `rendering` is not IIIF-compatible and must be viewed outside the main resource's viewer. In addition, `accompanyingCanvas` is used for content complementary to the main resource while `rendering` points to additional representations of the same resource. -* `seeAlso` [(IIIF Presentation API reference)](https://iiif.io/api/presentation/3.0/#seealso) +* `seeAlso` [(IIIF Presentation API reference)](https://iiif.io/api/presentation/3.0/#seealso) Unlike `rendering`, the `seeAlso` property provides the URI of a machine-readable resource related to the current resource. In most cases and most effectively, this will be structured metadata in a format such as Dublin Core, MODS, or RDF. `seeAlso` contributes significantly to discovery, such as by providing an aggregator what it needs for faceting its content. The `type` value for `seeAlso` is usually `dataset`, while `type` values for `rendering` vary more widely, in keeping with the variety of target formats possible. Any resource may have the `rendering` property. Each instance of it may have multiple items contained inside it, provided each has the `id`, `type`, and `label` properties at a minimum. Conforming clients should render this property in some way on a Collection, Manifest, or Canvas, but may on other resources. Note particularly that the client's display of the property has no defined form. @@ -44,7 +45,7 @@ In this example, a PDF is made available for the program as a whole, and as such To see the property in action in Mirador, toggle the sidebar by activating the three-line ("hamburger") menu in the upper left-hand corner of the content window. You should then, in the "Related" area, see the link under the "Alternate formats" heading. -{% include manifest_links.html viewers="Mirador,Annona,Clover,Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador,Annona,Clover,Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="16-27"' %} diff --git a/recipe/0047-homepage/index.md b/recipe/0047-homepage/index.md index e98bdf597..708729fc7 100644 --- a/recipe/0047-homepage/index.md +++ b/recipe/0047-homepage/index.md @@ -9,6 +9,7 @@ viewers: - Clover - Annona - Glycerine Viewer + - Theseus topic: property property: homepage --- @@ -37,7 +38,7 @@ In this example we have a Manifest representing an object housed at the Getty Mu _Laocöon_. Credit: Getty. -{% include manifest_links.html viewers="Mirador, Clover, Annona, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador, Clover, Annona, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="10-24"' %} diff --git a/recipe/0053-seeAlso/index.md b/recipe/0053-seeAlso/index.md index ea1637feb..d09c871ef 100644 --- a/recipe/0053-seeAlso/index.md +++ b/recipe/0053-seeAlso/index.md @@ -5,10 +5,11 @@ layout: recipe tags: [metadata,presentation] summary: "tbc" viewers: - - Mirador + - Mirador - Annona - Clover - Glycerine Viewer + - Theseus topic: property property: seeAlso --- @@ -21,15 +22,15 @@ You have a IIIF manifest resource along with additional machine-readable metadat This property is used for pointing a viewer to the URI of a non-IIIF resource with information about the IIIF resource to which it is attached. Most frequently, the non-IIIF resource will be structured metadata, and to be most effective, the target resource should be a machine-readable format such as XML, JSON, or RDF. The `type` value for `seeAlso` is usually `dataset`. Manifest creators or editors should look in [the IIIF Registry of Profiles](https://iiif.io/api/registry/profiles/#3-registry) to see if a consistent URI exists for use as the `seeAlso` property's `profile` value. -Three other properties may seem similar, so it's worth highlighting the differences. +Three other properties may seem similar, so it's worth highlighting the differences. -* `homepage` [(IIIF Presentation API reference)](https://iiif.io/api/presentation/3.0/#homepage) +* `homepage` [(IIIF Presentation API reference)](https://iiif.io/api/presentation/3.0/#homepage) Where `rendering` presents an additional representation of the same resource, `homepage` points to a webpage _about_ the object represented by the resource. -* `accompanyingCanvas` [(IIIF Presentation API reference)](https://iiif.io/api/presentation/3.0/#accompanyingcanvas) +* `accompanyingCanvas` [(IIIF Presentation API reference)](https://iiif.io/api/presentation/3.0/#accompanyingcanvas) An `accompanyingCanvas` resource is a IIIF resource presented simultaneously with the main resource, where a target of `rendering` is not IIIF-compatible and must be viewed outside the main resource's viewer. In addition, `accompanyingCanvas` is used for content complementary to the main resource while `rendering` points to additional representations of the same resource. -* `rendering` [(IIIF Presentation API reference)](https://iiif.io/api/presentation/3.0/#rendering) +* `rendering` [(IIIF Presentation API reference)](https://iiif.io/api/presentation/3.0/#rendering) Unlike `seeAlso`, the `rendering` property provides the URI of an alternate representation of the current resource, such as a PDF or ePub version. The `type` values for `rendering` vary more widely than do those for `seeAlso`, in keeping with the variety of target formats possible. Any resource may have the `seeAlso` property. Each instance of it may have multiple items contained inside it, provided each has the `id` and `type` properties; `label`, `format`, and `profile` are strongly recommended properties. Conforming clients may process this property in some way, but the outcomes of a client's processing has no defined form. @@ -46,7 +47,7 @@ A consistent URI to use for the `profile` value for MODS can be found in [the II To see the property in action in Mirador, toggle the sidebar by activating the three-line ("hamburger") menu in the upper left-hand corner of the content window. You should then, in the "Related" area, see the link in the "Related" section under the "See also" subheading. -{% include manifest_links.html viewers="Mirador, Annona, Clover, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador, Annona, Clover, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="16-28"' %} @@ -60,4 +61,3 @@ The direct link to the fixture is a useful convenience. {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0064-opera-one-canvas/index.md b/recipe/0064-opera-one-canvas/index.md index 89930698b..59780c531 100644 --- a/recipe/0064-opera-one-canvas/index.md +++ b/recipe/0064-opera-one-canvas/index.md @@ -7,6 +7,7 @@ summary: "A video recording of an opera on one Canvas." viewers: - UV - Ramp + - Theseus topic: AV property: start --- diff --git a/recipe/0065-opera-multiple-canvases/index.md b/recipe/0065-opera-multiple-canvases/index.md index 7170767cd..1263fef10 100644 --- a/recipe/0065-opera-multiple-canvases/index.md +++ b/recipe/0065-opera-multiple-canvases/index.md @@ -7,6 +7,7 @@ summary: "A real world example of an audio recording of an opera spread across m viewers: - UV - Ramp + - Theseus topic: AV --- @@ -24,7 +25,7 @@ Given the need for the player to switch context when moving from one file to the ## Example -{% include manifest_links.html viewers="UV, Ramp" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Ramp, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" %} ## Related Recipes diff --git a/recipe/0068-newspaper/index.md b/recipe/0068-newspaper/index.md index a1d5fcd73..5757949a7 100644 --- a/recipe/0068-newspaper/index.md +++ b/recipe/0068-newspaper/index.md @@ -9,13 +9,14 @@ viewers: - Annona - UV - Glycerine Viewer -topic: + - Theseus +topic: - realWorldObject --- ## Use Case -Digitized Newspapers are more complicated than some other types of content as the hierarchy of Titles, Volumes and Issues are important in making them accessible. The date of publication and providing access to OCR data are also important to the viewing experience. This recipe gives an example of a basic Newspaper with two issues and links to text generated from Optical Character Recognition (OCR) software. The aim is to give a good outline of common mapping solutions for Newspapers. +Digitized Newspapers are more complicated than some other types of content as the hierarchy of Titles, Volumes and Issues are important in making them accessible. The date of publication and providing access to OCR data are also important to the viewing experience. This recipe gives an example of a basic Newspaper with two issues and links to text generated from Optical Character Recognition (OCR) software. The aim is to give a good outline of common mapping solutions for Newspapers. ## Implementation notes @@ -57,7 +58,7 @@ Members of the IIIF community have arrived at the following as the best correspo | Page | Canvas | | Page Text (OCR) | Annotation List | | Article | Range | -| Illustration | Range | +| Illustration | Range | | Supplement | Manifest or Range | {: .api-table style="max-width: 780px;"} @@ -87,17 +88,17 @@ Viewer support for any particular feature will depend on the viewer and any cust | IIIF component | Viewer Support (May 2024) | |-----------|------| -| Collection | Mirador, Annona, Universal Viewer, Clover, Glycerine Viewer | -| Manifest per issue | Mirador, Annona, Universal Viewer, Clover, Glycerine Viewer | -| `navDate` | Universal Viewer | -| OCR in Annotations | Annona, Glycerine Viewer | -| ALTO via `rendering` | Glycerine Viewer | -| `seeAlso` for dataset version | Annona, Mirador, Glycerine Viewer | +| Collection | Mirador, Annona, Universal Viewer, Clover, Glycerine Viewer, Theseus | +| Manifest per issue | Mirador, Annona, Universal Viewer, Clover, Glycerine Viewer, Theseus | +| `navDate` | Universal Viewer, Theseus | +| OCR in Annotations | Annona, Glycerine Viewer, Theseus | +| ALTO via `rendering` | Glycerine Viewer, Theseus | +| `seeAlso` for dataset version | Annona, Mirador, Glycerine Viewer, Theseus | {: .api-table style="max-width: 780px;"} Similarly, the quality of the OCR as well as the formatting and positioning data of the Annotations containing it will determine how useful it is. IIIF Presentation v3 only provides a standard for structuring it and communicating layout to a viewer. -{% include manifest_links.html viewers="Mirador, Annona, UV, Clover, Glycerine Viewer" manifest="newspaper_title-collection.json" %} +{% include manifest_links.html viewers="Mirador, Annona, UV, Clover, Glycerine Viewer, Theseus" manifest="newspaper_title-collection.json" %} {% include jsonviewer.html src="newspaper_title-collection.json" config='data-line="7-11,14-27,78-85,86-107"' %} @@ -111,4 +112,3 @@ Similarly, the quality of the OCR as well as the formatting and positioning data {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0074-multiple-language-captions/index.md b/recipe/0074-multiple-language-captions/index.md index 780efb803..c5668299a 100644 --- a/recipe/0074-multiple-language-captions/index.md +++ b/recipe/0074-multiple-language-captions/index.md @@ -7,6 +7,7 @@ summary: "Representing the relationship between a video file and its caption or topic: AV viewers: - Ramp +- Theseus --- @@ -18,24 +19,24 @@ Captions and subtitles may be available in multiple languages for video content This recipe builds on the pattern for [Using Caption and Subtitle Files with Video Content][0219], extending it to represent the availability of captions and subtitles in multiple languages. -Similarly to offering a single caption/subtitle file, the multiple subtitle/caption files are provided as a `supplementing` Annotation on the Canvas that contains the video file. In the case of multiple captions/subtitles, however, the Annotation provides all the available languages as choices. IIIF viewers are then able to offer to end-users the choice for displaying subtitles/captions in one of the available languages during the video playback. +Similarly to offering a single caption/subtitle file, the multiple subtitle/caption files are provided as a `supplementing` Annotation on the Canvas that contains the video file. In the case of multiple captions/subtitles, however, the Annotation provides all the available languages as choices. IIIF viewers are then able to offer to end-users the choice for displaying subtitles/captions in one of the available languages during the video playback. In addition to this implementation, one might consider to provide the captions/subtitles also as multiple timed annotations. Although redundant, providing both implementations will enable more IIIF viewers to display the captions/subtitles, since they may use whichever implementation they support. See [Using Annotations for Timed Text][0079]. ## Restrictions -Formats other than WebVTT (Web Video Text Tracks) are supported by the [Presentation API 3.0](https://iiif.io/api/presentation/3.0/), but current IIIF viewers do not support the display of captions/subtitles. Nevertheless, WebVTT is the format most likely to be implemented. +Formats other than WebVTT (Web Video Text Tracks) are supported by the [Presentation API 3.0](https://iiif.io/api/presentation/3.0/), but current IIIF viewers do not support the display of captions/subtitles. Nevertheless, WebVTT is the format most likely to be implemented. When using segmented WebVTT with HLS (HTTP Live Streaming), see [Serving HLS Files][0257]. ## Example -In this example we represent a video with subtitles in two languages: English and Italian. -For expressing the availability of the subtitles in the two languages, we use an Annotation with a Choice body that contains two items, one for each language. The language of each subtitle file is expressed with a `language` property containing a [BCP 47](https://tools.ietf.org/html/bcp47) language code as specified by the [Presentation API 3.0](https://iiif.io/api/presentation/3.0/#language-of-property-values). +In this example we represent a video with subtitles in two languages: English and Italian. +For expressing the availability of the subtitles in the two languages, we use an Annotation with a Choice body that contains two items, one for each language. The language of each subtitle file is expressed with a `language` property containing a [BCP 47](https://tools.ietf.org/html/bcp47) language code as specified by the [Presentation API 3.0](https://iiif.io/api/presentation/3.0/#language-of-property-values). In this example we use subtitle files in the WebVTT format. Other format options include SRT (SubRip Text) or TTML (Timed Text Markup Language), but these are less likely to be supported in IIIF viewers. -{% include manifest_links.html viewers="Ramp" manifest="manifest.json" %} +{% include manifest_links.html viewers="Ramp, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="60-92"'%} diff --git a/recipe/0117-add-image-thumbnail/index.md b/recipe/0117-add-image-thumbnail/index.md index 46bd559fb..2c7b3f2bf 100644 --- a/recipe/0117-add-image-thumbnail/index.md +++ b/recipe/0117-add-image-thumbnail/index.md @@ -5,9 +5,10 @@ layout: recipe tags: [image,presentation] summary: "Display a thumbnail image for a resource other than a Canvas, such that it can be used by clients to represent the object." viewers: - - Mirador + - Mirador - Clover - Glycerine Viewer + - Theseus topic: property property: thumbnail --- @@ -20,7 +21,7 @@ You have images of a booklet, and you want to select one to use as the singular Thumbnails can permit non-human interfaces consuming your manifests to present representations of your content for rapid comprehension by human readers. For instance, this could be in a cross-institutional catalog website. -Thumbnails are strongly recommended for Collections and Manifests, and permitted on Canvases, content resources, and other resource types. Conforming clients are not required to render any thumbnails, though they are strongly recommended to do so when they exist for Collections, Manifests, Canvases, and content resources. Clients are permitted to render thumbnails when they exist for all other resource types. Each resource may contain multiple thumbnails, each of which may be — but are not required to be — of the same `type` and `format` as its containing resource. +Thumbnails are strongly recommended for Collections and Manifests, and permitted on Canvases, content resources, and other resource types. Conforming clients are not required to render any thumbnails, though they are strongly recommended to do so when they exist for Collections, Manifests, Canvases, and content resources. Clients are permitted to render thumbnails when they exist for all other resource types. Each resource may contain multiple thumbnails, each of which may be — but are not required to be — of the same `type` and `format` as its containing resource. Multiple methods exist for describing a thumbnail in your manifest. For a Manifest, it makes most sense to use a full-size image URI in conjunction with a IIIF Image Service containing the whole IIIF Image service JSON. Clients consuming a Manifest thumbnail will have unpredictable size requirements; reproducing the complete service JSON gives them the most flexibility and best shot at quickly and efficiently displaying your object's thumbnail. @@ -32,7 +33,7 @@ None known. This example uses an image of the cover of the same kabuki performance program as in the recipe for [Viewing direction and its effect on navigation][0010]. This image, though, has a color bar and the Manifest contains an explicit `thumbnail` property for the Manifest. In this particular use case, to avoid having a Manifest thumbnail image with a color calibration bar, you can choose to declare a thumbnail from a completely different image. Keep in mind that this thumbnail is just for the Manifest; no thumbnail has been explicitly set for the sole resource, so the supporting viewers should use the resource's IIIF Image service to create one. -{% include manifest_links.html viewers="Mirador, Clover, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador, Clover, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" %} @@ -43,4 +44,3 @@ This example uses an image of the cover of the same kabuki performance program a {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0118-multivalue/index.md b/recipe/0118-multivalue/index.md index 660fa8785..42024d447 100644 --- a/recipe/0118-multivalue/index.md +++ b/recipe/0118-multivalue/index.md @@ -6,9 +6,10 @@ tags: [tbc] summary: "The language map pattern requires that all values are supplied as an array, whether a single value string or a string of multiple values." viewers: - UV - - Mirador - - Annona + - Mirador + - Annona - Glycerine Viewer + - Theseus topic: property property: label, summary, metadata, requiredStatement --- @@ -31,7 +32,7 @@ None In this example, the work has multiple titles in both English and French. The Manifest `label` provides a single title in French within a single-value array (lines 6–8). The alternative titles are provided in the `metadata` property in both English and French, each with variants contained within two separate arrays -- one array for English (lines 18–21) and one for French (lines 22–25). In the `summary` property (lines 30–32) the value is included as a single-string array. -{% include manifest_links.html viewers="UV, Mirador, Annona, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Annona, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="6-8, 18-21, 22-25, 30-32"'%} diff --git a/recipe/0135-annotating-point-in-canvas/index.md b/recipe/0135-annotating-point-in-canvas/index.md index 777a9133e..8fad22db2 100644 --- a/recipe/0135-annotating-point-in-canvas/index.md +++ b/recipe/0135-annotating-point-in-canvas/index.md @@ -6,6 +6,7 @@ tags: image summary: "This recipe explains how to annotate a specific point of an image." viewers: - Glycerine Viewer + - Theseus topic: - annotation --- @@ -25,7 +26,7 @@ Viewers might consider implementing scale-independent point markers so that they This example uses a leaflet with a map and a guide supplied by the Library of Congress Geography and Map Division, it shows how we can annotate some locations expressed in the map. -{% include manifest_links.html viewers="Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="69-76"' %} diff --git a/recipe/0139-geolocate-canvas-fragment/index.md b/recipe/0139-geolocate-canvas-fragment/index.md index 1b70772b9..e2b262594 100644 --- a/recipe/0139-geolocate-canvas-fragment/index.md +++ b/recipe/0139-geolocate-canvas-fragment/index.md @@ -6,12 +6,13 @@ tags: [maps, annotation] summary: "Use Web Annotation to provide geocoordinates for a fragment of an IIIF Presentation API 3.0 Canvas." viewers: - Annona +- Theseus topic: geo-recipes --- A multitude of real world resources benefit from geographic data, many of which are already represented in IIIF digital collections. New and old maps, travel journals, newspapers, manuscripts, poems and diaries are just a subset of cultural heritage artifacts that have geographic characteristics. These traits bring human context to the material and offer a recognizable, comfortable setting for discovering connections between disparate resources. -### Use Case +### Use Case A Canvas has a region of interest that contains a map. You would like to associate this map with geographic coordinates for use in web mapping clients like [Leaflet](https://leafletjs.com/examples/geojson/) and [OpenLayers](https://openlayers.org/en/latest/examples/geojson.html). This could mean simply showing a non-interactive shape on a web map, but often more data from the resource is displayed in connection with the shape as a result of available functionality. The example below shows a pop-up that appears upon clicking the shape. The pop-up includes the targeted map as well as other metadata from the resource.

@@ -27,12 +28,12 @@ The GeoJSON `properties` object is generic and [can be nearly anything](https:// Note that [`geometry` has more types besides `Polygon`.](https://tools.ietf.org/html/rfc7946#section-3.1) ### Restrictions -Applications that strictly follow Linked Data practices will find that nested GeoJSON coordinate arrays are incompatible with the processing model of JSON-LD 1.0. The JSON-LD 1.1 processing model does not have this restriction. Be aware if you plan to serialize JSON-LD into [other semantic data formats or markup languages](https://www.w3.org/TR/json-ld11/#relationship-to-other-linked-data-formats) such as RDF. +Applications that strictly follow Linked Data practices will find that nested GeoJSON coordinate arrays are incompatible with the processing model of JSON-LD 1.0. The JSON-LD 1.1 processing model does not have this restriction. Be aware if you plan to serialize JSON-LD into [other semantic data formats or markup languages](https://www.w3.org/TR/json-ld11/#relationship-to-other-linked-data-formats) such as RDF. ### Example -The Manifest has one Canvas with one Image, and the Canvas has the same size dimensions as the Image. The Canvas has one Annotation Page with one Annotation targeting the region of interest where a map depiction appears using the [#xywh Fragment Selector syntax](https://www.w3.org/TR/annotation-model/#fragment-selector). The Annotation `body` is GeoJSON-LD, which is supported by a number of open source mapping systems. A client can parse the Annotation from the Canvas and pass the Annotation `body` into a web map resulting in rendered geometric shapes on a world map. Often, data from the resource such as an image URL, label, or description is connected with those shapes via [`properties`](https://tools.ietf.org/html/rfc7946#section-3.2) in GeoJSON. Since the image used is a IIIF Fixture following [IIIF Image API 3.0](https://iiif.io/api/image/3.0/), you can see the targeted fragment by supplying [the values used in the #xywh selector to the image URL](https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/920,3600,1510,3000/max/0/default.jpg). +The Manifest has one Canvas with one Image, and the Canvas has the same size dimensions as the Image. The Canvas has one Annotation Page with one Annotation targeting the region of interest where a map depiction appears using the [#xywh Fragment Selector syntax](https://www.w3.org/TR/annotation-model/#fragment-selector). The Annotation `body` is GeoJSON-LD, which is supported by a number of open source mapping systems. A client can parse the Annotation from the Canvas and pass the Annotation `body` into a web map resulting in rendered geometric shapes on a world map. Often, data from the resource such as an image URL, label, or description is connected with those shapes via [`properties`](https://tools.ietf.org/html/rfc7946#section-3.2) in GeoJSON. Since the image used is a IIIF Fixture following [IIIF Image API 3.0](https://iiif.io/api/image/3.0/), you can see the targeted fragment by supplying [the values used in the #xywh selector to the image URL](https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/920,3600,1510,3000/max/0/default.jpg). -{% include manifest_links.html viewers="Annona" manifest="manifest.json" %} +{% include manifest_links.html viewers="Annona, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="2-5, 62-101"' %} diff --git a/recipe/0154-geo-extension/index.md b/recipe/0154-geo-extension/index.md index 93dd107be..6db83bdf3 100644 --- a/recipe/0154-geo-extension/index.md +++ b/recipe/0154-geo-extension/index.md @@ -7,10 +7,11 @@ summary: "Use the navPlace extension to provide geolocation information about an layout: recipe viewers: - Navplace Viewer + - Theseus --- ### Use Case -You have a photograph of the Laocoön bronze and you would like to show the current location of the bronze as a Point on a web mapping platform. `navPlace` allows you to place the spatial representation (Point, Polygon, LineString, etc.) of your Manifest on a web map. +You have a photograph of the Laocoön bronze and you would like to show the current location of the bronze as a Point on a web mapping platform. `navPlace` allows you to place the spatial representation (Point, Polygon, LineString, etc.) of your Manifest on a web map. ### Implementation Notes @@ -28,11 +29,11 @@ The `navPlace` property is not processed by the Universal Viewer or Mirador view ### Example -The map shows the location of the object represented in the image, the Laocoön bronze by Giovanni Battista Foggini, on display at the Getty Center. +The map shows the location of the object represented in the image, the Laocoön bronze by Giovanni Battista Foggini, on display at the Getty Center. The Manifest contains one Canvas with a photograph painted onto it. The `navPlace` property in the Manifest stores geographic information about the bronze in the photograph, in this case the bronze's current location. `navPlace` contains GeoJSON-LD, and a client can parse GeoJSON features from `navPlace`. These GeoJSON features are rendered as geometric shapes by web mapping platforms. Data from the resource such as an image URL, label or summary is connected with those shapes via [`properties`](https://tools.ietf.org/html/rfc7946#section-3.2) in GeoJSON, but this is not a required step for seeing the shape on the map. To see an example using a polygonal shape see [Represent Canvas Fragment as a Geographic Area in a Web Mapping Client][0139]. -{% include manifest_links.html viewers="Navplace Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Navplace Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="3, 13-39"' %} diff --git a/recipe/0202-start-canvas/index.md b/recipe/0202-start-canvas/index.md index 69fc040c3..17041873d 100644 --- a/recipe/0202-start-canvas/index.md +++ b/recipe/0202-start-canvas/index.md @@ -5,10 +5,11 @@ layout: recipe tags: [image] summary: "This manifest uses the 'start' property to specify which Canvas the client should display on initialization of the resource." viewers: - - Mirador + - Mirador - Annona - Glycerine Viewer -topic: + - Theseus +topic: - image - property property: start @@ -30,7 +31,7 @@ For an example of the `start` property using a Specific Resource with a Selector This example shows a Manifest with multiple Canvases for a book object. The `start` property specifies loading the Manifest at the second Canvas. Note that all Canvases are still displayed in the viewer and the user is able to navigate back to the first Canvas using the viewer navigation controls. -{% include manifest_links.html viewers="Mirador,Annona,Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador,Annona,Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="10-13"'%} diff --git a/recipe/0219-using-caption-file/index.md b/recipe/0219-using-caption-file/index.md index 844d93fff..f8f9ed393 100644 --- a/recipe/0219-using-caption-file/index.md +++ b/recipe/0219-using-caption-file/index.md @@ -8,17 +8,18 @@ viewers: - Clover - Ramp - Aviary + - Theseus topic: AV --- ## Use Case -Captions and subtitles may be available for your video content and you may want to enable them for your IIIF video resources. +Captions and subtitles may be available for your video content and you may want to enable them for your IIIF video resources. ## Implementation notes -Caption and subtitle file formats are used to mark up the external text track resources in connection with the HTML track element of a video file. The markup file formats use time tags that allow for time alignment of the video content with the captions or subtitles. +Caption and subtitle file formats are used to mark up the external text track resources in connection with the HTML track element of a video file. The markup file formats use time tags that allow for time alignment of the video content with the captions or subtitles. Offering the caption file as an Annotation on the Canvas that contains the media file itself enables us to express the relationship between the two. The `type` and `format` properties of the Annotation can be used by the client to identify files in a format supported by the media player for captions. The `motivation` value of `supplementing` indicates the fact that processing this Annotation is optional. @@ -28,7 +29,7 @@ While captions, subtitles, and transcripts each present some text interpretation ## Restrictions -Formats other than [WebVTT](https://w3c.github.io/webvtt/) (Web Video Text Tracks) are supported in IIIF, but may not be as widely supported in viewers. +Formats other than [WebVTT](https://w3c.github.io/webvtt/) (Web Video Text Tracks) are supported in IIIF, but may not be as widely supported in viewers. When using segmented WebVTT with HLS, see [Serving HLS Files][0257]. @@ -36,7 +37,7 @@ When using segmented WebVTT with HLS, see [Serving HLS Files][0257]. In this example we use a caption file in the WebVTT format, but other options include a subtitle file in the [SRT](https://en.wikipedia.org/wiki/SubRip) (SubRip Text) or [TTML](https://w3c.github.io/ttml3/index.html) (Timed Text Markup Language) formats, or other text-based format used for the same purpose. -{% include manifest_links.html viewers="Clover, Ramp, Aviary" manifest="manifest.json" %} +{% include manifest_links.html viewers="Clover, Ramp, Aviary, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="41-67"'%} diff --git a/recipe/0230-navdate/index.md b/recipe/0230-navdate/index.md index a3c1505fd..b5d5dc974 100644 --- a/recipe/0230-navdate/index.md +++ b/recipe/0230-navdate/index.md @@ -7,6 +7,7 @@ summary: "tbc" viewers: - UV - Mirador + - Theseus topic: property property: navDate code: @@ -38,19 +39,19 @@ This recipe presents an imaginary Collection containing 2 instances from the run ### Collection -{% include manifest_links.html viewers="UV, Mirador" manifest="navdate-collection.json" %} +{% include manifest_links.html viewers="UV, Mirador, Theseus" manifest="navdate-collection.json" %} {% include jsonviewer.html src="navdate-collection.json" config='data-line="35,45"' %} ### 1986 Map -{% include manifest_links.html viewers="UV, Mirador" manifest="navdate_map_2-manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Theseus" manifest="navdate_map_2-manifest.json" %} {% include jsonviewer.html src="navdate_map_2-manifest.json" config='data-line="10"' %} ### 1987 Map -{% include manifest_links.html viewers="UV, Mirador" manifest="navdate_map_1-manifest.json" %} +{% include manifest_links.html viewers="UV, Mirador, Theseus" manifest="navdate_map_1-manifest.json" %} {% include jsonviewer.html src="navdate_map_1-manifest.json" config='data-line="10"' %} @@ -65,4 +66,3 @@ This recipe presents an imaginary Collection containing 2 instances from the run {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0232-image-thumbnail-canvas/index.md b/recipe/0232-image-thumbnail-canvas/index.md index 0534ef888..ef16f08ef 100644 --- a/recipe/0232-image-thumbnail-canvas/index.md +++ b/recipe/0232-image-thumbnail-canvas/index.md @@ -96,11 +96,11 @@ None The two Manifests below demonstrate the use of the `thumbnail` property on Canvases: the first specifies a thumbnail for a video file following the **Minimal thumbnail requirements** option; the second a thumbnail for an image file using the **Thumbnails with a IIIF image service + JSON image response sizes** option. *Note: the image thumbnail here specifies a level0 profile, but could be changed to a level1 profile if leaving it open for custom sizes is desirable.* -{% include manifest_links.html viewers="Mirador, UV" manifest="manifest-av.json" %} +{% include manifest_links.html viewers="Mirador, UV, Theseus" manifest="manifest-av.json" %} {% include jsonviewer.html src="manifest-av.json" config='data-line="22-30, 65-73"' %} -{% include manifest_links.html viewers="Mirador, UV, Annona" manifest="manifest-image.json" %} +{% include manifest_links.html viewers="Mirador, UV, Annona, Theseus" manifest="manifest-image.json" %} {% include jsonviewer.html src="manifest-image.json" config='data-line="21-50, 90-119"' %} diff --git a/recipe/0234-provider/index.md b/recipe/0234-provider/index.md index 5120b7bfc..fef0c1b4a 100644 --- a/recipe/0234-provider/index.md +++ b/recipe/0234-provider/index.md @@ -8,6 +8,7 @@ viewers: - id: Mirador support: partial - Glycerine Viewer + - Theseus topic: property property: provider --- @@ -37,7 +38,7 @@ In this example, we reuse the front page of a kabuki playbill that was contribut Only Mirador implements `provider`, and only partially. The property must be on the Manifest level, Mirador will only display the text from a `label` and the image from a `logo` under `provider`, and the information will only be found in the list of manifests. -{% include manifest_links.html viewers="Mirador, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="15-82"' %} @@ -50,4 +51,3 @@ Only Mirador implements `provider`, and only partially. The property must be on {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0240-navPlace-on-canvases/index.md b/recipe/0240-navPlace-on-canvases/index.md index 116b45afa..13c360605 100644 --- a/recipe/0240-navPlace-on-canvases/index.md +++ b/recipe/0240-navPlace-on-canvases/index.md @@ -7,13 +7,14 @@ tags: [maps, geolocate, navPlace] summary: "Use the navPlace extension to provide geolocation information for the Canvas items of an IIIF Presentation API 3.0 Manifest." viewers: - Navplace Viewer + - Theseus --- ### Use Case You have two photographs of the subject Laocoön, one of a bronze statue and the other of a painting. You would like to show where the two works are located as Points on a web mapping platform. `navPlace` allows you to place the spatial representation (Point, Polygon, Line Segment) of your Canvas on a web map. ### Implementation Notes -This recipe describes the use of `navPlace` at a Canvas implementation level, and is largely similar to the recipe to [Locate a Manifest on a Web Map][0154]. The main difference to note is that each Canvas will need its own Feature Collection, as described below. In this case, each image is represented in its own Canvas. Other related recipes are listed in the links at the bottom of the page. +This recipe describes the use of `navPlace` at a Canvas implementation level, and is largely similar to the recipe to [Locate a Manifest on a Web Map][0154]. The main difference to note is that each Canvas will need its own Feature Collection, as described below. In this case, each image is represented in its own Canvas. Other related recipes are listed in the links at the bottom of the page. It is important to note that `navPlace` is not semantic and cannot be used to state the purpose of the location it shows. The example uses `navPlace` to represent the current location of the items, but it is not specified or limited to that, and more accurately we can say that `navPlace` is used to show a location. @@ -30,7 +31,7 @@ The `navPlace` property is not processed by the Universal Viewer or Mirador view ### Example The Manifest contains images of the bronze by Giovanni Battista Foggini and the painting _Laocoön_ by El Greco. The `navPlace` property in each Canvas stores geographic information about the works represented in the photographs, in this case their current location. `navPlace` contains GeoJSON-LD, and a client can parse GeoJSON features from `navPlace`. These GeoJSON features are rendered as geometric shapes by web mapping platforms. Data from the resource such as an image URL, label or summary is connected with those shapes via [`properties`](https://tools.ietf.org/html/rfc7946#section-3.2) in GeoJSON, but this is not a required step for seeing the shape on the map. -{% include manifest_links.html viewers="Navplace Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Navplace Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="3, 24-50, 90-113"' %} diff --git a/recipe/0258-tagging-external-resource/index.md b/recipe/0258-tagging-external-resource/index.md index 9d67a3514..aa281af4b 100644 --- a/recipe/0258-tagging-external-resource/index.md +++ b/recipe/0258-tagging-external-resource/index.md @@ -6,6 +6,7 @@ tags: annotation, tagging, linking summary: "Connect a tagging annotation to an external resource" viewers: - Glycerine Viewer + - Theseus topic: annotation --- @@ -30,7 +31,7 @@ In this example, we continue our use of a photograph of a square in Göttingen, Using multiple `body` properties, as shown here, does not have any predictable consequences for a viewer's handling of the data. With this in mind, each `body` in this Manifest could stand alone. -{% include manifest_links.html viewers="Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config="data-line='49-66'"%} @@ -40,4 +41,3 @@ Using multiple `body` properties, as shown here, does not have any predictable c * [Simple Annotation — Tagging][0021] {% include links.md %} - diff --git a/recipe/0261-non-rectangular-commenting/index.md b/recipe/0261-non-rectangular-commenting/index.md index fefcca91a..48715ac42 100644 --- a/recipe/0261-non-rectangular-commenting/index.md +++ b/recipe/0261-non-rectangular-commenting/index.md @@ -8,6 +8,7 @@ viewers: - Mirador - Annona - Glycerine Viewer + - Theseus topic: annotation --- @@ -21,7 +22,7 @@ The [IIIF Presentation 3.0 API][prezi3] does not itself discuss non-rectangular The W3C data model requires non-rectangular annotations to be described in the Scalable Vector Graphic (SVG) markup format and to use the `SvgSelector`. Note that viewer parsing of SVG varies, and valid SVG may not display as you expect. SVGs have the potential to be highly complex; this example is highly simplified for the purpose of demonstrating an entry point into IIIF affordances. -When reviewing your SVG data, remove all styling and transformation features, per [the W3C data model](https://www.w3.org/TR/annotation-model/#svg-selector). To ensure your SVG markup is valid, you can use the [W3C validator](https://validator.w3.org/). SVG can be valid markup as absolute points in a coordinate space or as relative points along a path. +When reviewing your SVG data, remove all styling and transformation features, per [the W3C data model](https://www.w3.org/TR/annotation-model/#svg-selector). To ensure your SVG markup is valid, you can use the [W3C validator](https://validator.w3.org/). SVG can be valid markup as absolute points in a coordinate space or as relative points along a path. Sizing and placement of the SVG polygon in relation to its `target` takes some special attention. If the `target` is the entire Canvas, then the SVG viewport is assumed to cover the entire Canvas. On the other hand, if the SVG's coordinates are mapped to a part of a Canvas, then its `target` must be the rectangular bounding box of the Canvas in which the SVG viewport should be placed. If the dimensions of the viewport and its target region (either the bounding box or the entire Canvas) are not the same, then the SVG must be scaled such that it covers the region. This may result in different scaling ratios for the X and Y dimensions. @@ -38,10 +39,10 @@ Browser-based IIIF viewers often hand off SVG rendering to the containing browse + `polyline` + `polygon` + `viewBox` -+ `g` ++ `g` + `path`, including multiple `path`s inside a `g` -Viewers may occasionally encounter manifests in which there is a conflict between the dimensions values for a resource or IIIF property and the dimensions given within the SVG markup of an `SvgSelector` property. To anticipate these cases, it is suggested that viewers privilege the dimensional information contained in IIIF properties other than `SvgSelector` over the SVG dimensions where these conflict. +Viewers may occasionally encounter manifests in which there is a conflict between the dimensions values for a resource or IIIF property and the dimensions given within the SVG markup of an `SvgSelector` property. To anticipate these cases, it is suggested that viewers privilege the dimensional information contained in IIIF properties other than `SvgSelector` over the SVG dimensions where these conflict. #### For Manifest Creators Manifest creators should ensure, for maximum compatibility with viewers, that any non-rectangular annotations are limited to the above list as well. Going beyond this list, or keeping to the SVG features contained therein but adding interaction or multiplicity of them, risks your non-rectangular annotations not appearing in a viewer. In the case of SVG non-rectangular annotations, it may not be feasible for viewers to display only the supported features and discard the rest, as they can do for manifests more generally. A pattern that has shown some promise is to place the essential selector `path` inside an initial `g` element of the SVG, with an additional following `g` element holding presentation-only data. @@ -54,7 +55,7 @@ This approach should not be used to describe non-rotated rectangular regions. In this Manifest, we are highlighting a fountain with a statue on top of it and imagining that we want to be fairly precise in our highlight. The client should not show the bounding box on the image. -{% include manifest_links.html viewers="Mirador,Annona,Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador,Annona,Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="44-70"' %} @@ -64,4 +65,3 @@ In this Manifest, we are highlighting a fountain with a statue on top of it and {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0266-full-canvas-annotation/index.md b/recipe/0266-full-canvas-annotation/index.md index 23ce22e1a..0ebe967dd 100644 --- a/recipe/0266-full-canvas-annotation/index.md +++ b/recipe/0266-full-canvas-annotation/index.md @@ -5,9 +5,10 @@ layout: recipe tags: [tbc] summary: "tbc" viewers: - - Mirador + - Mirador - Annona - Glycerine Viewer + - Theseus topic: annotation --- @@ -37,7 +38,7 @@ The semantic of annotating the full Canvas as a whole can be specified by either This example Manifest contains an embedded Annotation containing the text "Göttinger Marktplatz mit Gänseliesel Brunnen" with the motivation `commenting` targeting the whole Canvas. The Annotation is the single content of an Annotation Page contained in the `annotations` property of the Canvas. -{% include manifest_links.html viewers="Mirador,Annona,Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador,Annona,Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="44-63"' %} @@ -53,4 +54,3 @@ This example Manifest contains an embedded Annotation containing the text "Gött {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0269-embedded-or-referenced-annotations/index.md b/recipe/0269-embedded-or-referenced-annotations/index.md index a4fa9ee22..83796dfda 100644 --- a/recipe/0269-embedded-or-referenced-annotations/index.md +++ b/recipe/0269-embedded-or-referenced-annotations/index.md @@ -9,6 +9,7 @@ viewers: - Mirador - Annona - Glycerine Viewer + - Theseus --- ## Use Case @@ -21,7 +22,7 @@ Annotations for a Canvas are stored in the `annotations` property of the Canvas The Annotation Page and the Annotations can either be embedded in the Manifest (as in the [Simplest Annotation][0266] example) or referenced (as in the example below) by storing the Annotation Page in a separate document and putting the URI of this document in the Manifest. -An advantage of separating the Manifest and the Annotations is that the Manifest can be a smaller document that loads faster so that the viewer can start to display its contents quicker and additionally decide if and when to load the Annotations for a Canvas depending on user interactions and the current view. +An advantage of separating the Manifest and the Annotations is that the Manifest can be a smaller document that loads faster so that the viewer can start to display its contents quicker and additionally decide if and when to load the Annotations for a Canvas depending on user interactions and the current view. Embedded Annotations, on the other hand, have the advantage that the viewer does not have to make additional HTTPS requests so the Annotations can be displayed quicker. Viewers should treat embedded and referenced Annotations the same but the [IIIF Presentation API 3](https://iiif.io/api/presentation/3.0/#56-annotation) mentions that a viewer should process Annotations in the order given in the Manifest and a publisher may order embedded Annotation Pages before referenced pages to expedite their processing. @@ -35,7 +36,7 @@ The external Annotation Page document must have: Each Annotation in the Annotation Page must have an `id` property with a unique identifier, a `type` of "Annotation", a `target`, and a `body`. The `target` of all Annotations should be the URI of the Canvas that contains the reference to the Annotation Page (see [IIIF Presentation API 3](https://iiif.io/api/presentation/3.0/#55-annotation-page)). This means that there should be one Annotation Page document (or multiple) for each Canvas that you want to annotate. -The `target` of the Annotation can be just the URI of the Canvas if you want to annotate the full canvas as in [Simplest Annotation][0266], or the URI with a media fragment at the end if you want to annotate a region of the Canvas as in [Simple Annotation — Tagging][0021], or a more complex selector as in [Annotation with a Non-Rectangular Polygon][0261]. +The `target` of the Annotation can be just the URI of the Canvas if you want to annotate the full canvas as in [Simplest Annotation][0266], or the URI with a media fragment at the end if you want to annotate a region of the Canvas as in [Simple Annotation — Tagging][0021], or a more complex selector as in [Annotation with a Non-Rectangular Polygon][0261]. The `body` can be a URI or a more complex object following the [W3C Web Annotation specification](https://www.w3.org/TR/annotation-model/#bodies-and-targets'). A commonly used model is the Embedded Textual Body as in the example below. @@ -52,7 +53,7 @@ The rendering of this referenced Annotation should be virtually indistiguishable ### Manifest file -{% include manifest_links.html viewers="Mirador, Annona, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador, Annona, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="44-49"' %} @@ -71,4 +72,3 @@ The rendering of this referenced Annotation should be virtually indistiguishable {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0283-missing-image/index.md b/recipe/0283-missing-image/index.md index c3cb554b4..6f36a1a88 100644 --- a/recipe/0283-missing-image/index.md +++ b/recipe/0283-missing-image/index.md @@ -8,6 +8,7 @@ viewers: - UV - Mirador - Glycerine Viewer + - Theseus topic: - image - basic diff --git a/recipe/0299-region/index.md b/recipe/0299-region/index.md index 083938048..f56c1f0d2 100644 --- a/recipe/0299-region/index.md +++ b/recipe/0299-region/index.md @@ -7,6 +7,7 @@ summary: "Presenting a spatial region of a IIIF image resource independently" viewers: - Annona - Glycerine Viewer + - Theseus topic: - basic --- @@ -39,7 +40,7 @@ This recipe can not be applied to pulling a temporal segment from a time-based I In this example we use an ImageApiSelector on the `body` of the Manifest's sole Annotation to retrieve a single article selection from the 16 February 1925 issue of _Berliner Tageblatt_. The article discusses a meeting including Neville Chamberlain of Great Britain. -{% include manifest_links.html viewers="Annona, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Annona, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config="data-line='14-15,25-48'" %} ## Related Recipes diff --git a/recipe/0306-linking-annotations-to-manifests/index.md b/recipe/0306-linking-annotations-to-manifests/index.md index 683c322f2..3709bae0f 100644 --- a/recipe/0306-linking-annotations-to-manifests/index.md +++ b/recipe/0306-linking-annotations-to-manifests/index.md @@ -5,6 +5,7 @@ layout: recipe tags: [annotation, multiple-images] summary: "Keep a resolvable link between annotations (contained in an external Annotation Page) and the Manifest containing the Canvases they are pointing at." viewers: + - Theseus topic: annotation --- @@ -33,12 +34,12 @@ In the example, it is also shown the usage of the `selector` attribute of the Sp The `value` attribute follows the Fragment Selector syntax [Fragment Selectors][0020]. Annotation Page file -{% include manifest_links.html manifest="annotationpage.json" %} +{% include manifest_links.html viewers="" manifest="annotationpage.json" %} {% include jsonviewer.html src="annotationpage.json" config='data-line="16-33"' %} Manifest file -{% include manifest_links.html viewers="Mirador, Annona, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Mirador, Annona, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config='data-line="44-49"' %} @@ -51,4 +52,3 @@ Manifest file {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0377-image-in-annotation/index.md b/recipe/0377-image-in-annotation/index.md index 194031310..36c18014b 100644 --- a/recipe/0377-image-in-annotation/index.md +++ b/recipe/0377-image-in-annotation/index.md @@ -7,7 +7,8 @@ summary: "Provides an image in an annotation" viewers: - Annona - Glycerine Viewer -topic: + - Theseus +topic: - basic --- @@ -15,7 +16,7 @@ topic: Provide an image that adds details about or shows a different view of a particular feature/area of the Resource. -- You have a group picture of many people. The image quality doesn't allow you to recognize all of them, so you annotate each face with the name of the person and an individual photo of that person. +- You have a group picture of many people. The image quality doesn't allow you to recognize all of them, so you annotate each face with the name of the person and an individual photo of that person. - You have a picture of an architect's plan for a building which has been built. To show how the completed building looks, you decide to annotate specific features, such as the patio, with actual photographs. - You have a Manifest with a video showing an old building at the time of its creation. In some instances, where the video shows a specific part of the building, you might want to annotate the video with a photo of how this part looks now. Annotations may be just one image or contain a description like, "This wall faces north, you can see there is more moss there." @@ -27,7 +28,7 @@ Our supplementary image is not part of the Canvas content, thus it must not have The main content is a photo of a square in Göttingen, which shows, among others things, a fountain. We wanted to show the lights on the fountain during the night, so we associated the part of the Canvas containing the fountain with an Annotation consisting of a picture of the fountain at night and a text comment. -{% include manifest_links.html viewers="Annona, Glycerine Viewer" manifest="manifest.json" %} +{% include manifest_links.html viewers="Annona, Glycerine Viewer, Theseus" manifest="manifest.json" %} {% include jsonviewer.html src="manifest.json" config="data-line='49-66'" %} @@ -40,4 +41,3 @@ The main content is a photo of a square in Göttingen, which shows, among others {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0434-choice-av/index.md b/recipe/0434-choice-av/index.md index e4eb10be9..72d011b67 100644 --- a/recipe/0434-choice-av/index.md +++ b/recipe/0434-choice-av/index.md @@ -9,7 +9,8 @@ viewers: - UV - Clover - Ramp -topic: + - Theseus +topic: - basic - AV --- @@ -57,4 +58,3 @@ The direct link to the fixture is a useful convenience. {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/0466-link-for-loading-manifest/index.md b/recipe/0466-link-for-loading-manifest/index.md index 6dccb6df6..9054e268d 100644 --- a/recipe/0466-link-for-loading-manifest/index.md +++ b/recipe/0466-link-for-loading-manifest/index.md @@ -7,6 +7,7 @@ summary: "Allows users to use links that can be clicked to open a viewer with a viewers: - Mirador - Clover + - Theseus topic: - content-state --- @@ -43,4 +44,3 @@ Similarly with Clover we append the `iiif-content` parameter to the viewer locat {% include acronyms.md %} {% include links.md %} - diff --git a/recipe/matrix.md b/recipe/matrix.md index 3ffa65474..f12808cbd 100644 --- a/recipe/matrix.md +++ b/recipe/matrix.md @@ -13,6 +13,7 @@ viewers: - Ramp - Aviary - Glycerine Viewer + - Theseus topics: - basic - property @@ -63,7 +64,7 @@ The possible values for viewer support are Yes - ![Yes][YES]{:title="Yes"}, No - {% for viewer in page.viewers %} {{ viewer }} {% endfor %} - + {% for recipe in sorted %} {{recipe.title}}{% if recipe.property%} ({{recipe.property}}){%endif%}