diff --git a/source/presentation/4.0/index.md b/source/presentation/4.0/index.md index 5db58a797..efec38215 100644 --- a/source/presentation/4.0/index.md +++ b/source/presentation/4.0/index.md @@ -125,7 +125,7 @@ Manifests have descriptive, technical and linking properties. The required prope "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json", "type": "Manifest", "label": { - "en": [ "Single Image Example" ] + "en": ["Single Image Example"] }, "items": [ // A list of Containers @@ -162,14 +162,16 @@ Timelines have an additional required property of `duration`, which gives the ex { "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/annotation/t1", "type": "Annotation", - "motivation": [ "painting" ], - "body": { - "id": "https://iiif.io/api/presentation/example-content-resources/audio/clip.mp3", - "type": "Audio", - "format": "audio/mp3", - "duration": 32.76 - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-containers/timeline" + "motivation": ["painting"], + "body": [ + { + "id": "https://iiif.io/api/presentation/example-content-resources/audio/clip.mp3", + "type": "Audio", + "format": "audio/mp3", + "duration": 32.76 + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-containers/timeline"] } ] } @@ -197,15 +199,17 @@ Canvases have two additional required properties: `height` and `width`, which gi { "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/annotation/c1", "type": "Annotation", - "motivation": [ "painting" ], - "body": { - "id": "https://iiif.io/api/presentation/example-content-resources/image/painting.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 4000, - "height": 3000 - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-containers/canvas" + "motivation": ["painting"], + "body": [ + { + "id": "https://iiif.io/api/presentation/example-content-resources/image/painting.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 4000, + "height": 3000 + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-containers/canvas"] } ] } @@ -231,13 +235,15 @@ Scenes may also have the `duration` property in the same manner as Timelines. { "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/annotation/s1", "type": "Annotation", - "motivation": [ "painting" ], - "body": { - "id": "https://iiif.io/api/presentation/example-content-resources/models/astronaut.glb", - "type": "Model", - "format": "model/gltf-binary" - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-containers/scene" + "motivation": ["painting"], + "body": [ + { + "id": "https://iiif.io/api/presentation/example-content-resources/models/astronaut.glb", + "type": "Model", + "format": "model/gltf-binary" + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-containers/scene"] } ] } @@ -290,15 +296,17 @@ There are different types of fragment based on the format of the resource. The m { "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/comments/c1", "type": "Annotation", - "motivation": [ "commenting" ], - "body": { - "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/bodies/koto-body", - "type": "TextualBody", - "value": "Koto with a cover being carried", - "language": "en", - "format": "text/plain" - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-containers/canvas#xywh=6050,3220,925,1250" + "motivation": ["commenting"], + "body": [ + { + "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/bodies/koto-body", + "type": "TextualBody", + "value": "Koto with a cover being carried", + "language": "en", + "format": "text/plain" + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-containers/canvas#xywh=6050,3220,925,1250"] } ``` @@ -319,27 +327,31 @@ The fragment example above can be expressed using a Specific Resource: { "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/comments/c1", "type": "Annotation", - "motivation": [ "commenting" ], - "body": { - "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/bodies/koto-body", - "type": "TextualBody", - "value": "Koto with a cover being carried", - "language": "en", - "format": "text/plain" - }, - "target": { - "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/resources/koto-sr", - "type": "SpecificResource", - "source": { - "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/canvas", - "type": "Canvas" - }, - "selector": { - "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/selectors/koto-selector", - "type": "FragmentSelector", - "value": "xywh=6050,3220,925,1250" + "motivation": ["commenting"], + "body": [ + { + "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/bodies/koto-body", + "type": "TextualBody", + "value": "Koto with a cover being carried", + "language": "en", + "format": "text/plain" } - } + ], + "target": [ + { + "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/resources/koto-sr", + "type": "SpecificResource", + "source": { + "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/canvas", + "type": "Canvas" + }, + "selector": { + "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/selectors/koto-selector", + "type": "FragmentSelector", + "value": "xywh=6050,3220,925,1250" + } + } + ] } ``` @@ -437,27 +449,25 @@ The example demonstrates the use of the common descriptive properties `label` fo "@context": "http://iiif.io/api/presentation/4/context.json", "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json", "type": "Manifest", - "label": { - "en": [ "Use case 1: Artwork" ] - }, + "label": { "en": ["Use case 1: Artwork"] }, "metadata": [ { - "label": { "en": [ "Artist" ] }, - "value": { "en": [ "Anne Artist" ] } + "label": { "en": ["Artist"] }, + "value": { "en": ["Anne Artist"] } }, { - "label": { "en": [ "Date" ] }, - "value": { "en": [ "c. 1800" ] } + "label": { "en": ["Date"] }, + "value": { "en": ["c. 1800"] } } ], - "summary": { "en": [ "A longer piece of text to be shown when the metadata is not." ] }, + "summary": { "en": ["A longer piece of text to be shown when the metadata is not."] }, "rights": "http://rightsstatements.org/vocab/NoC-NC/1.0/", "homepage": [ { "id": "https://example.org/works/artwork37", "type": "Text", "format": "text/html", - "label": { "en": [ "Homepage for artwork37" ] } + "label": { "en": ["Homepage for artwork37"] } } ], "thumbnail": [ @@ -469,31 +479,30 @@ The example demonstrates the use of the common descriptive properties `label` fo "height": 150 } ], - "provider": - [ - { - "id": "https://example.org/about", - "type": "Agent", - "label": { "en": [ "Example Organization" ] }, - "homepage": [ - { - "id": "https://example.org/", - "type": "Text", - "label": { "en": [ "Example Organization Homepage" ] }, - "format": "text/html" - } - ], - "logo": [ - { - "id": "https://example.org/images/logo.png", - "type": "Image", - "format": "image/png", - "height": 100, - "width": 120 - } - ] - } - ], + "provider": [ + { + "id": "https://example.org/about", + "type": "Agent", + "label": { "en": ["Example Organization"] }, + "homepage": [ + { + "id": "https://example.org/", + "type": "Text", + "label": { "en": ["Example Organization Homepage"] }, + "format": "text/html" + } + ], + "logo": [ + { + "id": "https://example.org/images/logo.png", + "type": "Image", + "format": "image/png", + "height": 100, + "width": 120 + } + ] + } + ], "items": [ { "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/canvas", @@ -508,23 +517,25 @@ The example demonstrates the use of the common descriptive properties `label` fo { "id": "https://example.org/iiif/presentation/examples/manifest-with-containers/annotation/c1", "type": "Annotation", - "motivation": [ "painting" ], - "body": { - "id": "https://iiif.io/api/presentation/example/image/painting/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 4000, - "height": 3000, - "service": [ - { - "id": "https://iiif.io/api/presentation/example/image/painting", - "profile": "level1", - "type": "ImageService3", - // etc - } - ] - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-containers/canvas" + "motivation": ["painting"], + "body": [ + { + "id": "https://iiif.io/api/presentation/example/image/painting/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 4000, + "height": 3000, + "service": [ + { + "id": "https://iiif.io/api/presentation/example/image/painting", + "profile": "level1", + "type": "ImageService3" + // etc + } + ] + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-containers/canvas"] } ] } @@ -564,14 +575,14 @@ This example is a Manifest with multiple Canvases, each of which represents a pa "@context": "http://iiif.io/api/presentation/4/context.json", "id": "https://example.org/iiif/presentation/examples/manifest-with-book.json", "type": "Manifest", - "label": { "en": [ "Use case 2: Book" ] }, - "behavior": [ "paged" ], + "label": { "en": ["Use case 2: Book"] }, + "behavior": ["paged"], "viewingDirection": "left-to-right", "rendering": [ { "id": "https://example.org/pdfs/book.pdf", "type": "Text", - "label": { "en": [ "PDF version" ] }, + "label": { "en": ["PDF version"] }, "format": "application/pdf" } ], @@ -580,14 +591,14 @@ This example is a Manifest with multiple Canvases, each of which represents a pa "type": "Canvas" }, "requiredStatement": { - "label": { "en": [ "Attribution" ] }, - "value": { "en": [ "Provided courtesy of Example Institution" ] } + "label": { "en": ["Attribution"] }, + "value": { "en": ["Provided courtesy of Example Institution"] } }, "items": [ { "id": "https://example.org/iiif/presentation/examples/manifest-with-book/canvas/c1", "type": "Canvas", - "label": { "en": [ "Blank page" ] }, + "label": { "en": ["Blank page"] }, "height": 4613, "width": 3204, "items": [ @@ -598,15 +609,17 @@ This example is a Manifest with multiple Canvases, each of which represents a pa { "id": "https://example.org/iiif/presentation/examples/manifest-with-book/annotation/a1", "type": "Annotation", - "motivation": [ "painting" ], - "body": { - "id": "https://iiif.io/api/presentation/example-content-resources/image/page1.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 4613, - "width": 3204, - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-book/canvas/c1" + "motivation": ["painting"], + "body": [ + { + "id": "https://iiif.io/api/presentation/example-content-resources/image/page1.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4613, + "width": 3204 + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-book/canvas/c1"] } ] } @@ -615,7 +628,7 @@ This example is a Manifest with multiple Canvases, each of which represents a pa { "id": "https://example.org/iiif/presentation/examples/manifest-with-book/canvas/c2", "type": "Canvas", - "label": { "en": [ "Frontispiece" ] }, + "label": { "en": ["Frontispiece"] }, "height": 4613, "width": 3204, "items": [ @@ -626,15 +639,17 @@ This example is a Manifest with multiple Canvases, each of which represents a pa { "id": "https://example.org/iiif/presentation/examples/manifest-with-book/annotation/a2", "type": "Annotation", - "motivation": [ "painting" ], - "body": { - "id": "https://iiif.io/api/presentation/example-content-resources/image/page2.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 4613, - "width": 3204, - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-book/canvas/c2" + "motivation": ["painting"], + "body": [ + { + "id": "https://iiif.io/api/presentation/example-content-resources/image/page2.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4613, + "width": 3204 + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-book/canvas/c2"] } ] } @@ -643,7 +658,7 @@ This example is a Manifest with multiple Canvases, each of which represents a pa { "id": "https://example.org/iiif/presentation/examples/manifest-with-book/canvas/c3", "type": "Canvas", - "label": { "en": [ "Title Page" ] }, + "label": { "en": ["Title Page"] }, "height": 4613, "width": 3204, "items": [ @@ -654,20 +669,22 @@ This example is a Manifest with multiple Canvases, each of which represents a pa { "id": "https://example.org/iiif/presentation/examples/manifest-with-book/annotation/a3", "type": "Annotation", - "motivation": [ "painting" ], - "body": { - "id": "https://iiif.io/api/presentation/example-content-resources/image/page3.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 4613, - "width": 3204, - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-book/canvas/c3" + "motivation": ["painting"], + "body": [ + { + "id": "https://iiif.io/api/presentation/example-content-resources/image/page3.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4613, + "width": 3204 + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-book/canvas/c3"] } ] } ] - }, + } // Additional Canvases ] } @@ -700,8 +717,8 @@ IIIF Collection with `behavior` "multi-part" that contains the individual "multi "@context": "http://iiif.io/api/presentation/4/context.json", "id": "https://example.org/iiif/periodical/collection.json", "type": "Collection", - "label": { "en": [ "The Tombstone Epitaph (1880-1920)" ] }, - "behavior": [ "multi-part" ], + "label": { "en": ["The Tombstone Epitaph (1880-1920)"] }, + "behavior": ["multi-part"], "navPlace": { "id": "https://example.org/iiif/periodical/collection/place/1", "type": "FeatureCollection", @@ -709,9 +726,7 @@ IIIF Collection with `behavior` "multi-part" that contains the individual "multi { "id": "https://example.org/iiif/periodical/collection/feature/1", "type": "Feature", - "properties": { - "label": { "en": ["Tombstone, Cochise County, Arizona"] } - }, + "properties": { "label": { "en": ["Tombstone, Cochise County, Arizona"] } }, "geometry": { "type": "Point", "coordinates": [31.715940, −110.064827] @@ -723,13 +738,13 @@ IIIF Collection with `behavior` "multi-part" that contains the individual "multi { "id": "https://example.org/iiif/periodical/multi-part-collection/v1.json", "type": "Collection", - "label": { "en": [ "The Tombstone Epitaph, 1880" ] } + "label": { "en": ["The Tombstone Epitaph, 1880"] } }, { "id": "https://example.org/iiif/periodical/multi-part-collection/v2.json", "type": "Collection", - "label": { "en": [ "The Tombstone Epitaph, 1881" ] } - }, + "label": { "en": ["The Tombstone Epitaph, 1881"] } + } // Additional multi-part collections for each year/volume ] } @@ -741,15 +756,15 @@ IIIF Collection with `behavior` "multi-part" for the second volume (1881), with "@context": "http://iiif.io/api/presentation/4/context.json", "id": "https://example.org/iiif/periodical/multi-part-collection/v1.json", "type": "Collection", - "label": { "en": [ "The Tombstone Epitaph, 1881" ] }, - "behavior": [ "multi-part" ], + "label": { "en": ["The Tombstone Epitaph, 1881"] }, + "behavior": ["multi-part"], "items": [ // Previous issues { "id": "https://example.org/iiif/periodical/multi-part-collection/issue1.json", "type": "Manifest", - "label": { "en": [ "October 27, 1881" ] } - }, + "label": { "en": ["October 27, 1881"] } + } // Subsequent issues ] } @@ -762,14 +777,14 @@ Manifest for the October 27, 1881 issue, with Ranges for table of contents: "@context": "http://iiif.io/api/presentation/4/context.json", "id": "https://example.org/iiif/periodical/multi-part-collection/issue1.json", "type": "Manifest", - "label": { "en": [ "The Tombstone Epitaph, October 27, 1881" ] }, - "behavior": [ "paged" ], + "label": { "en": ["The Tombstone Epitaph, October 27, 1881"] }, + "behavior": ["paged"], "navDate": "1881-10-27T00:00:00+00:00", "items": [ { "id": "https://example.org/iiif/periodical/multi-part-collection/canvas/c1", "type": "Canvas", - "label": { "en": [ "Page 1" ] }, + "label": { "en": ["Page 1"] }, "height": 4613, "width": 3204, "items": [ @@ -780,15 +795,17 @@ Manifest for the October 27, 1881 issue, with Ranges for table of contents: { "id": "https://example.org/iiif/periodical/multi-part-collection/annotation/a1", "type": "Annotation", - "motivation": [ "painting" ], - "body": { - "id": "https://example.org/image/page1.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 4613, - "width": 3204, - }, - "target": "https://example.org/iiif/periodical/multi-part-collection/canvas/c1" + "motivation": ["painting"], + "body": [ + { + "id": "https://example.org/image/page1.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4613, + "width": 3204 + } + ], + "target": ["https://example.org/iiif/periodical/multi-part-collection/canvas/c1"] } ] } @@ -797,7 +814,7 @@ Manifest for the October 27, 1881 issue, with Ranges for table of contents: { "id": "https://example.org/iiif/periodical/multi-part-collection/canvas/c2", "type": "Canvas", - "label": { "en": [ "Page 2" ] }, + "label": { "en": ["Page 2"] }, "height": 4613, "width": 3204, "items": [ @@ -808,38 +825,43 @@ Manifest for the October 27, 1881 issue, with Ranges for table of contents: { "id": "https://example.org/iiif/periodical/multi-part-collection/annotation/a2", "type": "Annotation", - "motivation": [ "painting" ], - "body": { - "id": "https://example.org/image/page2.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 4613, - "width": 3204, - }, - "target": "https://example.org/iiif/periodical/multi-part-collection/canvas/c2" + "motivation": ["painting"], + "body": [ + { + "id": "https://example.org/image/page2.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4613, + "width": 3204 + } + ], + "target": ["https://example.org/iiif/periodical/multi-part-collection/canvas/c2"] } ] } ] - }, + } // Additional Canvases ], "structures": [ { "id": "https://example.org/iiif/periodical/multi-part-collection/range/r0", "type": "Range", - "label": { "en": [ "October 27, 1881" ] }, + "label": { "en": ["October 27, 1881"] }, "items": [ { "id": "https://example.org/iiif/periodical/multi-part-collection/range/r1", "type": "Range", - "label": { "en": [ "Yesterday's Tragedy: Three Men Hurled Into Eternity In the Duration of a Moment" ] }, - "supplementary": { "id": "https://example.org/iiif/full-text-anno-collection", "type": "AnnotationCollection" }, + "label": { "en": ["Yesterday's Tragedy: Three Men Hurled Into Eternity In the Duration of a Moment"] }, + "supplementary": { + "id": "https://example.org/iiif/full-text-anno-collection", + "type": "AnnotationCollection" + }, "items": [ { "id": "https://example.org/iiif/periodical/multi-part-collection/canvas/c1", "type": "Canvas" - }, + } // Additional contents ] } @@ -876,33 +898,35 @@ This example is a Manifest with two Timelines, each of which represent a tempora "@context": "http://iiif.io/api/presentation/4/context.json", "id": "https://example.org/iiif/presentation/examples/manifest-with-audio.json", "type": "Manifest", - "label": { "en": [ "Use case 3: 45 single with 2 tracks" ] }, - "behavior": [ "auto-advance" ], + "label": { "en": ["Use case 3: 45 single with 2 tracks"] }, + "behavior": ["auto-advance"], "accompanyingContainer": { "id": "https://example.org/iiif/presentation/examples/manifest-with-audio/accompany/c1", "type": "Canvas", - "label": { "en": [ "Photo of cover sleeve" ] }, + "label": { "en": ["Photo of cover sleeve"] }, "height": 900, "width": 900, "items": [ { "id": "https://example.org/iiif/presentation/examples/manifest-with-audio/accompany/c1/page", - "type": "AnnotationPage", - "items": [ - { - "id": "https://example.org/iiif/presentation/examples/manifest-with-audio/accompany/c1/image", - "type": "Annotation", - "motivation": [ "painting" ], - "body": { + "type": "AnnotationPage", + "items": [ + { + "id": "https://example.org/iiif/presentation/examples/manifest-with-audio/accompany/c1/image", + "type": "Annotation", + "motivation": ["painting"], + "body": [ + { "id": "https://example.org/presentation/example-content-resources/image/cover.jpg", "type": "Image", "format": "image/jpeg", "height": 900, "width": 900 - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-audio/accompany/ac1" - } - ] + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-audio/accompany/ac1"] + } + ] } ] }, @@ -910,7 +934,7 @@ This example is a Manifest with two Timelines, each of which represent a tempora { "id": "https://example.org/iiif/presentation/examples/manifest-with-audio/timeline/t1", "type": "Timeline", - "label": { "en": [ "Side A: 99 Luftballons" ] }, + "label": { "en": ["Side A: 99 Luftballons"] }, "duration": 231, "items": [ { @@ -920,15 +944,17 @@ This example is a Manifest with two Timelines, each of which represent a tempora { "id": "https://example.org/iiif/presentation/examples/manifest-with-audio/annotation/a1", "type": "Annotation", - "motivation": [ "painting" ], - "body": { - "id": "https://example.org/presentation/example-content-resources/audio/track1.mp4", - "type": "Sound", - "format": "audio/mp4", - "duration": 231, - "language": [ "de" ], - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-audio/timeline/t1" + "motivation": ["painting"], + "body": [ + { + "id": "https://example.org/presentation/example-content-resources/audio/track1.mp4", + "type": "Sound", + "format": "audio/mp4", + "duration": 231, + "language": ["de"] + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-audio/timeline/t1"] } ] } @@ -937,7 +963,7 @@ This example is a Manifest with two Timelines, each of which represent a tempora { "id": "https://example.org/iiif/presentation/examples/manifest-with-audio/timeline/t2", "type": "Timeline", - "label": { "en": [ "Side B: 99 Red Balloons" ] }, + "label": { "en": ["Side B: 99 Red Balloons"] }, "duration": 230.5, "items": [ { @@ -947,15 +973,17 @@ This example is a Manifest with two Timelines, each of which represent a tempora { "id": "https://example.org/iiif/presentation/examples/manifest-with-audio/annotation/a2", "type": "Annotation", - "motivation": [ "painting" ], - "body": { - "id": "https://example.org/presentation/example-content-resources/audio/track2.mp4", - "type": "Sound", - "format": "audio/mp4", - "duration": 230.5, - "language": [ "en" ], - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-audio/timeline/t2" + "motivation": ["painting"], + "body": [ + { + "id": "https://example.org/presentation/example-content-resources/audio/track2.mp4", + "type": "Sound", + "format": "audio/mp4", + "duration": 230.5, + "language": ["en"] + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-audio/timeline/t2"] } ] } @@ -965,7 +993,7 @@ This example is a Manifest with two Timelines, each of which represent a tempora "annotations": [ { "id": "https://example.org/iiif/presentation/examples/external-anno.json", - "type": "AnnotationPage", + "type": "AnnotationPage" } ] } @@ -981,17 +1009,19 @@ This example is a Manifest with two Timelines, each of which represent a tempora { "id": "https://example.org/iiif/presentation/examples/external-anno/a1", "type": "Annotation", - "motivation": [ "supplementing" ], - "body": { - "id": "https://example.org/presentation/example-content-resources/lyrics1.txt", - "type": "TextualBody", - "language": "de", - "format": "text/plain", - "value": "Hast du etwas Zeit für mich?" - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-audio/timeline/t1#t=3.5,6.8" + "motivation": ["supplementing"], + "body": [ + { + "id": "https://example.org/presentation/example-content-resources/lyrics1.txt", + "type": "TextualBody", + "language": "de", + "format": "text/plain", + "value": "Hast du etwas Zeit für mich?" + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-audio/timeline/t1#t=3.5,6.8"] } - ], + ] // (annotations for the rest of the song lines) } ``` @@ -1018,7 +1048,7 @@ This example is a Manifest with one Canvas that represents the temporal extent o "@context": "http://iiif.io/api/presentation/4/context.json", "id": "https://example.org/iiif/presentation/examples/manifest-with-movie.json", "type": "Manifest", - "label": { "en": [ "Use Case 4: Movie with Subtitles" ] }, + "label": { "en": ["Use Case 4: Movie with Subtitles"] }, "items": [ { "id": "https://example.org/iiif/presentation/examples/manifest-with-movie/canvas", @@ -1041,14 +1071,16 @@ This example is a Manifest with one Canvas that represents the temporal extent o "id": "https://example.org/iiif/presentation/examples/manifest-with-movie/placeholder/image", "type": "Annotation", "motivation": "painting", - "body": { - "id": "https://example.org/image/placeholder.png", - "type": "Image", - "format": "image/png", - "height": 320, - "width": 400, - }, - "target": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder" + "body": [ + { + "id": "https://example.org/image/placeholder.png", + "type": "Image", + "format": "image/png", + "height": 320, + "width": 400 + } + ], + "target": ["https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder"] } ] } @@ -1063,32 +1095,34 @@ This example is a Manifest with one Canvas that represents the temporal extent o "id": "https://example.org/iiif/presentation/examples/manifest-with-movie/anno1", "type": "Annotation", "motivation": "painting", - "body": { - "type": "Choice", - "items": [ - { - "id": "https://example.org/video/movie-low.mp4", - "type": "Video", - "label": { "en": ["Low resolution (360 MB)" ]}, - "height": 360, - "width": 480, - "duration": 3600, - "format": "video/mp4", - "fileSize": 360553219 - }, - { - "id": "https://example.org/video/movie-hi.mp4", - "type": "Video", - "label": { "en": ["High resolution (1.3 GB)" ]}, - "height": 1080, - "width": 1440, - "duration": 3600, - "format": "video/mp4", - "fileSize": 1345876231 - } - ] - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-movie/canvas" + "body": [ + { + "type": "Choice", + "items": [ + { + "id": "https://example.org/video/movie-low.mp4", + "type": "Video", + "label": { "en": ["Low resolution (360 MB)"] }, + "height": 360, + "width": 480, + "duration": 3600, + "format": "video/mp4", + "fileSize": 360553219 + }, + { + "id": "https://example.org/video/movie-hi.mp4", + "type": "Video", + "label": { "en": ["High resolution (1.3 GB)"] }, + "height": 1080, + "width": 1440, + "duration": 3600, + "format": "video/mp4", + "fileSize": 1345876231 + } + ] + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-movie/canvas"] } ] } @@ -1102,19 +1136,17 @@ This example is a Manifest with one Canvas that represents the temporal extent o "id": "https://example.org/iiif/presentation/examples/manifest-with-movie/subtitles/anno", "type": "Annotation", "motivation": "supplementing", - "body": { - "id": "https://example.org/text/subtitles.vtt", - "type": "Text", - "format": "text/vtt", - "provides": [ "subtitles" ], - "label": { - "en": [ - "Subtitles in WebVTT format" - ] - }, - "language": "en" - }, - "target": "https://example.org/iiif/presentation/examples/manifest-with-movie/canvas" + "body": [ + { + "id": "https://example.org/text/subtitles.vtt", + "type": "Text", + "format": "text/vtt", + "provides": ["subtitles"], + "label": { "en": ["Subtitles in WebVTT format"] }, + "language": "en" + } + ], + "target": ["https://example.org/iiif/presentation/examples/manifest-with-movie/canvas"] } ] } @@ -1206,12 +1238,14 @@ This example is a Manifest with a single Scene, with a single model of a space s "id": "https://example.org/iiif/3d/anno1", "type": "Annotation", "motivation": ["painting"], - "body": { - "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/astronaut/astronaut.glb", - "type": "Model", - "format": "model/gltf-binary" - }, - "target": "https://example.org/iiif/scene1/page/p1/1" + "body": [ + { + "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/astronaut/astronaut.glb", + "type": "Model", + "format": "model/gltf-binary" + } + ], + "target": ["https://example.org/iiif/scene1/page/p1/1"] } ] } @@ -1261,27 +1295,30 @@ The Light is green and has a position, but has its default orientation of lookin "id": "https://example.org/iiif/3d/anno1", "type": "Annotation", "motivation": ["painting"], - "body": { - "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/astronaut/astronaut.glb", - "type": "Model", - "format": "model/gltf-binary" - }, - "target": { - "type": "SpecificResource", - "source": + "body": [ { - "id": "https://example.org/iiif/scene1/page/p1/1", - "type": "Scene" - }, - "selector": [ - { - "type": "PointSelector", - "x": -1.0, - "y": 1.0, - "z": 1.0 - } - ] - } + "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/astronaut/astronaut.glb", + "type": "Model", + "format": "model/gltf-binary" + } + ], + "target": [ + { + "type": "SpecificResource", + "source": { + "id": "https://example.org/iiif/scene1/page/p1/1", + "type": "Scene" + }, + "selector": [ + { + "type": "PointSelector", + "x": -1.0, + "y": 1.0, + "z": 1.0 + } + ] + } + ] }, { "id": "https://example.org/iiif/3d/anno2", @@ -1324,28 +1361,32 @@ The Light is green and has a position, but has its default orientation of lookin "id": "https://example.org/iiif/3d/anno2", "type": "Annotation", "motivation": ["painting"], - "body": [{ + "body": [ + { "id": "https://example.org/iiif/3d/lights/1", "type": "SpotLight", - "label": {"en": ["Spot Light 1"]}, + "label": { "en": ["Spot Light 1"] }, "angle": 90.0, "color": "#A0FFA0" - }], - "target": [{ - "type": "SpecificResource", - "source": { - "id": "https://example.org/iiif/scene1/page/p1/1", - "type": "Scene" - }, - "selector": [ - { - "type": "PointSelector", - "x": 0.0, - "y": 3.0, - "z": 1.0 - } - ] - }] + } + ], + "target": [ + { + "type": "SpecificResource", + "source": { + "id": "https://example.org/iiif/scene1/page/p1/1", + "type": "Scene" + }, + "selector": [ + { + "type": "PointSelector", + "x": 0.0, + "y": 3.0, + "z": 1.0 + } + ] + } + ] } ] } @@ -1392,110 +1433,119 @@ This example is a Manifest with a single Scene with multiple models painted into "id": "https://example.org/iiif/3d/anno1", "type": "Annotation", "motivation": ["painting"], - "body": [{ - "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/chess/pawn.glb", - "label": {"en": ["Pawn 1"]}, - "type": "Model", - "format": "model/gltf-binary" - }], - "target": [{ - "type": "SpecificResource", - "source": { - "id": "https://example.org/iiif/scene1/page/p1/1", - "type": "Scene" - }, - "selector": [ - { - "type": "PointSelector", - "x": 1.0, - "y": 0.0, - "z": 0.0 - } - ] - }] + "body": [ + { + "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/chess/pawn.glb", + "label": { "en": ["Pawn 1"] }, + "type": "Model", + "format": "model/gltf-binary" + } + ], + "target": [ + { + "type": "SpecificResource", + "source": { + "id": "https://example.org/iiif/scene1/page/p1/1", + "type": "Scene" + }, + "selector": [ + { + "type": "PointSelector", + "x": 1.0, + "y": 0.0, + "z": 0.0 + } + ] + } + ] }, { "id": "https://example.org/iiif/3d/anno1", "type": "Annotation", "motivation": ["painting"], - "body": [{ - "type": "SpecificResource", - "source": - { + "body": [ + { + "type": "SpecificResource", + "source": { "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/chess/pawn.glb", - "label": {"en": ["Pawn 2 tipped over"]}, + "label": { "en": ["Pawn 2 tipped over"] }, "type": "Model", "format": "model/gltf-binary" }, - "transform": [ - { - "type": "RotateTransform", - "x": 0.0, - "y": 0.0, - "z": -90.0 + "transform": [ + { + "type": "RotateTransform", + "x": 0.0, + "y": 0.0, + "z": -90.0 + }, + { + "type": "TranslateTransform", + "x": 0.0, + "y": 1.0, + "z": 0.0 + } + ] + } + ], + "target": [ + { + "type": "SpecificResource", + "source": { + "id": "https://example.org/iiif/scene1/page/p1/1", + "type": "Scene" }, - { - "type": "TranslateTransform", - "x": 0.0, - "y": 1.0, - "z": 0.0 - } - ] - }], - "target": [{ - "type": "SpecificResource", - "source": { - "id": "https://example.org/iiif/scene1/page/p1/1", - "type": "Scene" - }, - "selector": [ - { - "type": "PointSelector", - "x": 2.0, - "y": 0.0, - "z": 3.0 - } - ] - }] + "selector": [ + { + "type": "PointSelector", + "x": 2.0, + "y": 0.0, + "z": 3.0 + } + ] + } + ] }, { "id": "https://example.org/iiif/3d/anno1", "type": "Annotation", "motivation": ["painting"], "exclude": ["Audio", "Lights"], - "body": [{ - "type": "SpecificResource", - "source": - { + "body": [ + { + "type": "SpecificResource", + "source": { "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/chess/queen.glb", - "label": {"en": ["Queen"]}, + "label": { "en": ["Queen"] }, "type": "Model", "format": "model/gltf-binary" }, - "transform": [ - { - "type": "ScaleTransform", - "x": 1.5, - "y": 1.5, - "z": 1.5 + "transform": [ + { + "type": "ScaleTransform", + "x": 1.5, + "y": 1.5, + "z": 1.5 + } + ] + } + ], + "target": [ + { + "type": "SpecificResource", + "source": { + "id": "https://example.org/iiif/scene1/page/p1/1", + "type": "Scene" }, - ] - }], - "target": [{ - "type": "SpecificResource", - "source": { - "id": "https://example.org/iiif/scene1/page/p1/1", - "type": "Scene" - }, - "selector": [ - { - "type": "PointSelector", - "x": 1.0, - "y": 0.0, - "z": 2.0 - } - ] - } + "selector": [ + { + "type": "PointSelector", + "x": 1.0, + "y": 0.0, + "z": 2.0 + } + ] + } ] } ] @@ -1557,21 +1607,23 @@ In this example, the audio content resources have durations that do not match th "id": "https://example.org/iiif/3d/anno1", "type": "Annotation", "motivation": ["painting"], - "body": [{ - "id": "https://example.org/iiif/audio/1", - "type": "AmbientAudio", - "source": { - "id": "https://example.org/iiif/assets/symphony_hall_ambience.mp3", - "type": "Audio", - "format": "audio/mp3" - }, - "volume": { - "id": "https://example.org/iiif/quantity/1", - "type": "Quantity", - "unit": "relative", - "quantityValue": 0.1 + "body": [ + { + "id": "https://example.org/iiif/audio/1", + "type": "AmbientAudio", + "source": { + "id": "https://example.org/iiif/assets/symphony_hall_ambience.mp3", + "type": "Audio", + "format": "audio/mp3" + }, + "volume": { + "id": "https://example.org/iiif/quantity/1", + "type": "Quantity", + "unit": "relative", + "quantityValue": 0.1 + } } - }], + ], "target": [ { "id": "https://example.org/iiif/scene1", @@ -1584,69 +1636,74 @@ In this example, the audio content resources have durations that do not match th "type": "Annotation", "motivation": ["painting"], "timeMode": "trim", - "body": [{ - "id": "https://example.org/iiif/audio/2", - "type": "PointAudio", - "source": { - "id": "https://example.org/iiif/assets/orchestra_percussion_120s.mp3", - "type": "Audio", - "format": "audio/mp3", - "duration": 120.0 - }, - "volume": { - "id": "https://example.org/iiif/quantity/2", - "type": "Quantity", - "unit": "relative", - "quantityValue": 0.2 + "body": [ + { + "id": "https://example.org/iiif/audio/2", + "type": "PointAudio", + "source": { + "id": "https://example.org/iiif/assets/orchestra_percussion_120s.mp3", + "type": "Audio", + "format": "audio/mp3", + "duration": 120.0 + }, + "volume": { + "id": "https://example.org/iiif/quantity/2", + "type": "Quantity", + "unit": "relative", + "quantityValue": 0.2 + } } - }], - "target": [{ - "id": "https://example.org/iiif/selectors/anno2", - "type": "SpecificResource", - "source": - { + ], + "target": [ + { + "id": "https://example.org/iiif/selectors/anno2", + "type": "SpecificResource", + "source": { "id": "https://example.org/iiif/scene1", "type": "Scene" }, - "selector": [ - { - "id": "https://example.org/uuid/9fbd580b-895b-41b9-974a-1553329037f2", - "type": "PointSelector", - "x": -3.0, - "y": 0.0, - "z": -2.0, - "refinedBy": { + "selector": [ + { + "id": "https://example.org/uuid/9fbd580b-895b-41b9-974a-1553329037f2", + "type": "PointSelector", + "x": -3.0, + "y": 0.0, + "z": -2.0, + "refinedBy": { "id": "https://example.org/uuid/3d0d097b-2b37-4a15-b6a5-506e417d5115", "type": "FragmentSelector", "value": "t=0,30" + } } - } - ] - }] + ] + } + ] }, { "id": "https://example.org/iiif/3d/anno3", "type": "Annotation", "motivation": ["painting"], "timeMode": "loop", - "body": [{ - "id": "https://example.org/iiif/audio/3", - "type": "SpotAudio", - "source": { - "id": "https://example.org/iiif/assets/orchestra_tuba_10s.mp3", - "type": "Audio", - "format": "audio/mp3", - "duration": 10.0 - }, - "angle": 45.0, - "volume": { - "id": "https://example.org/iiif/quantity/3", - "type": "Quantity", - "unit": "relative", - "quantityValue": 0.3 - }, - "lookAt": "https://example.org/iiif/scene1" - }], + "body": [ + { + "id": "https://example.org/iiif/audio/3", + "type": "SpotAudio", + "source": { + "id": "https://example.org/iiif/assets/orchestra_tuba_10s.mp3", + "type": "Audio", + "format": "audio/mp3", + "duration": 10.0 + }, + "angle": 45.0, + "volume": { + "id": "https://example.org/iiif/quantity/3", + "type": "Quantity", + "unit": "relative", + "quantityValue": 0.3 + }, + "lookAt": "https://example.org/iiif/scene1" + } + ], "target": [ { "id": "https://example.org/iiif/scene1#xyz=3,0,-2&t=30,60", @@ -1666,21 +1723,21 @@ In this example, the audio content resources have durations that do not match th "value": "This is the point when the percussion stops playing and the tuba begins playing." } ], - "target": [{ - "type": "SpecificResource", - "source": - { + "target": [ + { + "type": "SpecificResource", + "source": { "id": "https://example.org/iiif/scene1", "type": "Scene" - } - , - "selector": [ + }, + "selector": [ { - "type": "PointSelector", - "instant": 30.0 + "type": "PointSelector", + "instant": 30.0 } - ] - }] + ] + } + ] } ] } @@ -1724,11 +1781,11 @@ A Timeline, Canvas, or Scene with `duration` can only be painted into a Containe { "id": "https://example.org/iiif/presentation/examples/nesting/timeline/t1", "type": "Timeline", - "label": { "en": [ "Side A: 99 Luftballons" ] }, + "label": { "en": ["Side A: 99 Luftballons"] }, "duration": 231 } ], - "target": "https://example.org/iiif/presentation/examples/nesting/canvas-10minute-duration" + "target": ["https://example.org/iiif/presentation/examples/nesting/canvas-10minute-duration"] } ``` @@ -1756,40 +1813,43 @@ A `PointSelector` can be used to modify the point at which the Canvas will be pa "id": "https://example.org/iiif/presentation/examples/nesting/anno2", "type": "Annotation", "motivation": ["painting"], - "body": [{ - "type": "SpecificResource", - "source": - { + "body": [ + { + "type": "SpecificResource", + "source": { "id": "https://example.org/iiif/presentation/examples/nesting/canvas/c1", "type": "Canvas", "width": 2, "height": 2, - "items": [ { ... } ] + "items": [{ ... }] }, - "transform": [ - { - "type": "ScaleTransform", - "x": 2.0, - "y": 2.0, - "z": -1.0 - } - ] - }], - "target": [{ - "type": "SpecificResource", - "source": { - "id": "https://example.org/iiif/presentation/examples/nesting/scene/s1", - "type": "Scene" - }, - "selector": [ - { - "type": "PointSelector", - "x": 4.0, - "y": 4.0, - "z": 0.0 - } - ] - }] + "transform": [ + { + "type": "ScaleTransform", + "x": 2.0, + "y": 2.0, + "z": -1.0 + } + ] + } + ], + "target": [ + { + "type": "SpecificResource", + "source": { + "id": "https://example.org/iiif/presentation/examples/nesting/scene/s1", + "type": "Scene" + }, + "selector": [ + { + "type": "PointSelector", + "x": 4.0, + "y": 4.0, + "z": 0.0 + } + ] + } + ] } ``` @@ -1813,11 +1873,13 @@ When a Scene is nested into another Scene, the `backgroundColor` of the Scene to "id": "https://example.org/iiif/presentation/examples/nesting/anno3", "type": "Annotation", "motivation": ["painting"], - "body": { + "body": [ + { "id": "https://example.org/iiif/presentation/examples/nesting/scene/s1", "type": "Scene" - }, - "target": "https://example.org/iiif/presentation/examples/nesting/scene/s2" + } + ], + "target": ["https://example.org/iiif/presentation/examples/nesting/scene/s2"] } ``` @@ -1907,15 +1969,17 @@ This is an example of a commenting annotation that targets two-minute segment of { "id": "https://example.org/iiif/presentation/examples/commenting/anno/1", "type": "Annotation", - "motivation": [ "commenting" ], - "body": { - "id": "https://example.org/iiif/presentation/examples/commenting/anno/1/theme2", - "type": "TextualBody", - "language": "en", - "format": "text/plain", - "value": "The second theme of the concerto is introduced." - }, - "target": "https://example.org/iiif/presentation/examples/commenting/timeline/t1#t=38.0,158.0" + "motivation": ["commenting"], + "body": [ + { + "id": "https://example.org/iiif/presentation/examples/commenting/anno/1/theme2", + "type": "TextualBody", + "language": "en", + "format": "text/plain", + "value": "The second theme of the concerto is introduced." + } + ], + "target": ["https://example.org/iiif/presentation/examples/commenting/timeline/t1#t=38.0,158.0"] } ``` @@ -1927,28 +1991,32 @@ A comment on a Canvas can target a non-rectangular area. This example uses a `S { "id": "https://example.org/iiif/presentation/examples/commenting/anno/2", "type": "Annotation", - "motivation": [ "commenting" ], - "body": [{ - "id": "https://example.org/iiif/presentation/examples/commenting/anno/2/person2", - "type": "TextualBody", - "language": "en", - "format": "text/plain", - "value": "Note the expressive eyes of the subject of this painting." - }], - "target": [{ - "type": "SpecificResource", - "source": { - "id": "https://example.org/iiif/presentation/examples/commenting/canvas/2", - "type": "Canvas" - }, - "selector": [ - { - "id": "https://example.org/iiif/presentation/examples/commenting/anno2/selector2", - "type": "SvgSelector", - "value": " ... " - } - ] - }] + "motivation": ["commenting"], + "body": [ + { + "id": "https://example.org/iiif/presentation/examples/commenting/anno/2/person2", + "type": "TextualBody", + "language": "en", + "format": "text/plain", + "value": "Note the expressive eyes of the subject of this painting." + } + ], + "target": [ + { + "type": "SpecificResource", + "source": { + "id": "https://example.org/iiif/presentation/examples/commenting/canvas/2", + "type": "Canvas" + }, + "selector": [ + { + "id": "https://example.org/iiif/presentation/examples/commenting/anno2/selector2", + "type": "SvgSelector", + "value": " ... " + } + ] + } + ] } ``` @@ -1965,7 +2033,7 @@ In some cases it is desirable to influence the client's positioning of the comme "@context": "http://iiif.io/api/presentation/4/context.json", "id": "https://example.org/iiif/manifest/commenting/manifest/3", "type": "Manifest", - "label": { "en": [ "1st Centry Roman portrait bust with comment" ] }, + "label": { "en": ["1st Centry Roman portrait bust with comment"] }, "items": [ { "id": "https://example.org/iiif/scene/commenting/scene3", @@ -1978,15 +2046,17 @@ In some cases it is desirable to influence the client's positioning of the comme { "id": "https://example.org/iiif/scene/commenting/scene3/sculpture", "type": "Annotation", - "motivation": [ "painting"] , + "motivation": ["painting"] , "label": { - "en": [ "A 1st century Roman portait bust." ] + "en": ["A 1st century Roman portait bust."] }, - "body": { + "body": [ + { "id": "https://example.org/iiif/scene/commenting/models/portait.gltf", "type": "Model" - }, - "target": "https://example.org/iiif/scene/commenting/scene3" + } + ], + "target": ["https://example.org/iiif/scene/commenting/scene3"] } ] } @@ -2001,32 +2071,34 @@ In some cases it is desirable to influence the client's positioning of the comme { "id": "https://example.org/iiif/presentation/examples/commenting/anno/3", "type": "Annotation", - "motivation": [ "commenting" ], - "body": { - "id": "https://example.org/iiif/presentation/examples/commenting/anno/3/comment1", - "type": "TextualBody", - "language": "en", - "format": "text/plain", - "value": "This marble portrait exemplifies the veristic tradition that dominated Roman Republican portraiture and persisted into the early Imperial period.", - "position": { - "type": "SpecificResource", - "source": [ - { - "id": "https://example.org/iiif/scene/commenting/scene3", - "type": "Scene" - } - ], - "selector": [ - { - "type": "PointSelector", - "x": 0.75, - "y": 1.5, - "z": 0.1 - } - ] + "motivation": ["commenting"], + "body": [ + { + "id": "https://example.org/iiif/presentation/examples/commenting/anno/3/comment1", + "type": "TextualBody", + "language": "en", + "format": "text/plain", + "value": "This marble portrait exemplifies the veristic tradition that dominated Roman Republican portraiture and persisted into the early Imperial period.", + "position": { + "type": "SpecificResource", + "source": [ + { + "id": "https://example.org/iiif/scene/commenting/scene3", + "type": "Scene" + } + ], + "selector": [ + { + "type": "PointSelector", + "x": 0.75, + "y": 1.5, + "z": 0.1 + } + ] + } } - }, - "target": "https://example.org/iiif/scene/commenting/scene3/sculpture" + ], + "target": ["https://example.org/iiif/scene/commenting/scene3/sculpture"] } ] } @@ -2058,7 +2130,7 @@ The resource the user should be taken to is the `body` of the annotation, and th "type": "Text" } ], - "target": "https://example.com/canvas/p1#xywh=265,661,1260,1239" + "target": ["https://example.com/canvas/p1#xywh=265,661,1260,1239"] } ``` @@ -2085,7 +2157,7 @@ A resource with the `behavior` value "hidden" is not rendered by the client. A r "@context": "http://iiif.io/api/presentation/4/context.json", "id": "https://example.org/iiif/manifest/switch", "type": "Manifest", - "label": { "en": [ "Light switch" ] }, + "label": { "en": ["Light switch"] }, "items": [ { "id": "https://example.org/iiif/scene/switch/scene-1", @@ -2102,30 +2174,36 @@ A resource with the `behavior` value "hidden" is not rendered by the client. A r "label": { "en": ["A light switch"] }, - "body": { + "body": [ + { "id": "https://example.org/iiif/model/models/lightswitch.gltf", "type": "Model" - }, - "target": "https://example.org/iiif/scene/switch/scene-1" + } + ], + "target": ["https://example.org/iiif/scene/switch/scene-1"] }, { "id": "https://example.org/iiif/scene/switch/scene-1/lights/point-light-4", "type": "Annotation", "motivation": ["painting"], - "body": { + "body": [ + { "id": "https://example.org/iiif/scene/switch/scene-1/lights/4/body", "type": "PointLight" - }, - "target": { + } + ], + "target": [ + { "type": "SpecificResource", "source": "https://example.org/iiif/scene/switch/scene-1", "selector": [ - { - "type": "PointSelector", - "x": 5, "y": 5, "z": 5 - } + { + "type": "PointSelector", + "x": 5, "y": 5, "z": 5 + } ] - }, + } + ], "behavior": ["hidden"] } ] @@ -2142,11 +2220,13 @@ A resource with the `behavior` value "hidden" is not rendered by the client. A r "motivation": [ "commenting" ], - "body": { + "body": [ + { "type": "TextualBody", "value": "Click the switch to turn the light on or off" - }, - "target": "https://example.org/iiif/painting-annotation/lightswitch-1" + } + ], + "target": ["https://example.org/iiif/painting-annotation/lightswitch-1"] }, { "id": "https://example.org/iiif/scene/switch/scene-1/annos/1/activating-on-2", @@ -2154,7 +2234,7 @@ A resource with the `behavior` value "hidden" is not rendered by the client. A r "motivation": [ "activating" ], - "target": "https://example.org/iiif/painting-annotation/lightswitch-1", + "target": ["https://example.org/iiif/painting-annotation/lightswitch-1"], "body": [ { "type": "SpecificResource", @@ -2179,7 +2259,7 @@ A resource with the `behavior` value "hidden" is not rendered by the client. A r "motivation": [ "activating" ], - "target": "https://example.org/iiif/painting-annotation/lightswitch-1", + "target": ["https://example.org/iiif/painting-annotation/lightswitch-1"], "body": [ { "type": "SpecificResource", @@ -2242,13 +2322,17 @@ The format of the `value` string is implementation-specific, and will depend on "id": "https://example.org/iiif/3d/painting-anno-for-music-box", "type": "Annotation", "motivation": ["painting"], - "body": { - "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/music-box.glb", - "type": "Model" - }, - "target": { - // SpecificResource with PointSelector - } + "body": [ + { + "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/music-box.glb", + "type": "Model" + } + ], + "target": [ + { + // SpecificResource with PointSelector + } + ] } ], "annotations": [ @@ -2332,13 +2416,17 @@ It is possible to associate a particular camera with a particular commenting ann "id": "https://example.org/iiif/3d/anno1", "type": "Annotation", "motivation": ["painting"], - "body": { - "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/whale/whale_mandible.glb", - "type": "Model" - }, - "target": { - // SpecificResource with PointSelector - } + "body": [ + { + "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/whale/whale_mandible.glb", + "type": "Model" + } + ], + "target": [ + { + // SpecificResource with PointSelector + } + ] }, { "id": "https://example.org/iiif/3d/anno-that-paints-desired-camera-to-view-tooth", @@ -2377,13 +2465,17 @@ It is possible to associate a particular camera with a particular commenting ann "id": "https://example.org/iiif/3d/anno2", "type": "Annotation", "motivation": ["painting"], - "body": { - "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/whale/whale_cranium.glb", - "type": "Model" - }, - "target": { - // SpecificResource with PointSelector - } + "body": [ + { + "id": "https://raw.githubusercontent.com/IIIF/3d/main/assets/whale/whale_cranium.glb", + "type": "Model" + } + ], + "target": [ + { + // SpecificResource with PointSelector + } + ] } ] } @@ -2405,9 +2497,11 @@ It is possible to associate a particular camera with a particular commenting ann "value": "Mandibular tooth" } ], - "target": { - // SpecificResource with PointSelector - } + "target": [ + { + // SpecificResource with PointSelector + } + ] }, { "id": "https://example.org/iiif/3d/commenting-anno-for-right-pterygoid-hamulus", @@ -2415,13 +2509,15 @@ It is possible to associate a particular camera with a particular commenting ann "motivation": ["commenting"], "body": [ { - "type": "TextualBody", - "value": "Right pterygoid hamulus" + "type": "TextualBody", + "value": "Right pterygoid hamulus" } ], - "target": { - // SpecificResource with PointSelector - } + "target": [ + { + // SpecificResource with PointSelector + } + ] }, { "id": "https://example.org/iiif/3d/anno9", @@ -2476,9 +2572,11 @@ The commenting annotation now looks like this: "type": "Annotation" } ], - "target": { - // SpecificResource with PointSelector - } + "target": [ + { + // SpecificResource with PointSelector + } + ] }, ``` diff --git a/source/presentation/4.0/model.md b/source/presentation/4.0/model.md index d958fac1b..503475c3f 100644 --- a/source/presentation/4.0/model.md +++ b/source/presentation/4.0/model.md @@ -2323,6 +2323,11 @@ The value _MUST_ be an array of JSON objects. Each item _MUST_ have the `id` and } ``` +### selector +{: #selector} + +TODO + ### service {: #service} @@ -2436,7 +2441,7 @@ The value of `size` _MUST_ be a string, and conform to the size parameter defini The `source` property refers to the URI of the resource that the Specific Resource is a more constrained version or representation of. -For more information about source and Specific Resources, see the [W3C Annotation Model](For more information about Annotation bodies, see the [W3C Annotation Model](https://www.w3.org/TR/annotation-model/#bodies-and-targets). +For more information about source and Specific Resources, see the [W3C Annotation Model](https://www.w3.org/TR/annotation-model/#specific-resources). The value _MUST_ be a string, and the value _MUST_ be a URI. The value _MUST NOT_ include a media fragment.