Skip to content

Commit 829d911

Browse files
committed
expand the index.md text for containers and annotation
1 parent 41a97e5 commit 829d911

File tree

1 file changed

+197
-23
lines changed

1 file changed

+197
-23
lines changed

source/presentation/4.0/index.md

Lines changed: 197 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -53,34 +53,38 @@ __Previous Version:__ [3.0][prezi30]
5353

5454
## Introduction
5555

56-
Presentation, the clue is in the name
56+
The purpose of the IIIF Presentation API specification is to provide a [model](model) and JSON serialization format of that model.
5757

58+
It provides a document format - the IIIF Manifest - for cultural heritage organizations (and anyone else) to publish standardized, interoperable objects. This allows compatible software such as viewers and annotation tools to load and present complex digital objects on the web.
5859

59-
(non-exhaustive) List of use cases
60+
The specification is solely concerned with presentation - providing enough information to render an object in compatible software, and leaving the meaning of the object to external descriptive metadata standards.
6061

61-
1. Artwork
62-
2. Book
63-
3. 45 Single
64-
4. Movie
65-
5. 3D 1 (Single model at 0,0,0 in Scene with ambient Light and Camera)
66-
6. 3D 2 (Complex stuff)
67-
7. Periodical
68-
8. 3D 3 (storytelling)
69-
9. Manuscript (integration)
62+
_Presentation, the clue is in the name_
7063

64+
This specification is presented in two parts. This document acts as an introduction to the specification through a set of typical (but non-exhaustive) use cases. The model [model](model) provides the formal specification of the terms used in this introduction.
7165

72-
see Terminology at the end
66+
### IIIF Use cases
7367

74-
Mention model.md
68+
1. **Artwork** - a IIIF Manifest that represents a painting, comprising a single image and accompanying display information.
69+
2. **Book** - a IIIF Manifest that represents a digitized bound volume made up many separate images in order. The IIIF model provides structural elements to indicate the chapters. The text of the book is made available in machine-readable form as Web Annotations.
70+
3. **45 Single** - a IIIF Manifest that represents the digitized audio from the two sides of a vinyl 7 inch record.
71+
4. **Movie** - a IIIF Manifest that represents the digitized video of a film. A transcript of the audio is provided as Web Annotations, and additional machine-readable files provide subtitles and captions.
72+
5. **Simple 3D Model** - a IIIF Manifest that publishes a single 3D model.
73+
6. **Complex Scene** - a IIIF Manifest that publishes a complex 3D scene comprising multiple models, lights and cameras.
74+
7. **Periodical** - a IIIF Collection that provides multiple IIIF child IIIF Collections and Manifests, representing the publication run of a newspaper over many years. The IIIF model provides structural elements to indicate individual articles and other elements.
75+
8. **Storytelling in 3D** - a IIIF Manifest that defines a sequence of states in a complex scene for the purposes of guiding a user through a particular experience.
76+
9. **Manuscript** - (integration)
7577

76-
Mention cookbook
78+
These use case were chosen as a broad sample to introduce IIIF Concepts. Many more use cases are provided as recipes in the [IIIF Cookbook](link).
7779

7880

7981
Consider diagrams
8082

8183

8284
## Foundations
8385

86+
(needs updating)
87+
8488
<p style="float: right">
8589
<img src="{{ site.api_url | absolute_url }}/assets/images/data-model.png" alt="Data Model" width="400"><br/>
8690
</p>
@@ -96,8 +100,19 @@ Manifests have descriptive, technical and linking properties. The required prope
96100

97101
(👀) [Model Documentation](model/#manifest)
98102

99-
```
100-
Manifest JSON
103+
104+
```json
105+
{
106+
"@context": "http://iiif.io/api/presentation/4/context.json",
107+
"id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json",
108+
"type": "Manifest",
109+
"label": {
110+
"en": [ "Single Image Example" ]
111+
},
112+
"items": [
113+
// A list of Containers
114+
]
115+
}
101116
```
102117

103118

@@ -122,6 +137,7 @@ A Container that represents a bounded, two-dimensional space, optionally with a
122137

123138
Canvases have two additional required properties: `height` and `width`, which give the spatial extent as unitless integers. Canvases may also have the `duration` property in the same manner as Timelines.
124139

140+
125141
#### Scene
126142

127143
A Container that represents a boundless three-dimensional space, optionally with a bounded temporal range. Scenes are typically used for rendering 3D models, and can additionally have Cameras and Lights.
@@ -131,15 +147,112 @@ Scenes may also have the `duration` property in the same manner as Timelines.
131147
(👀) [Model Documentation](model/#containers)
132148

133149
```json
134-
Manifest JSON with a Timeline, a Canvas and a Scene
150+
{
151+
"@context": "http://iiif.io/api/presentation/4/context.json",
152+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers",
153+
"type": "Manifest",
154+
"label": {
155+
"en": [ "A Manifest with all three types of Container" ]
156+
},
157+
"items": [
158+
{
159+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/timeline",
160+
"type": "Timeline",
161+
"duration": 32.76,
162+
"items": [
163+
{
164+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/page/p1",
165+
"type": "AnnotationPage",
166+
"items": [
167+
{
168+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/annotation/t1",
169+
"type": "Annotation",
170+
"motivation": "painting",
171+
"body": {
172+
"id": "https://iiif.io/api/presentation/example-content-resources/audio/clip.mp3",
173+
"type": "Audio",
174+
"format": "audio/mp3",
175+
"duration": 32.76,
176+
},
177+
"target": "https://iiif.io/api/presentation/examples/manifest-with-containers/timeline"
178+
}
179+
]
180+
}
181+
]
182+
},
183+
{
184+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/canvas",
185+
"type": "Canvas",
186+
"width": 12000,
187+
"height": 9000,
188+
"items": [
189+
{
190+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/page/p2",
191+
"type": "AnnotationPage",
192+
"items": [
193+
{
194+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/annotation/c1",
195+
"type": "Annotation",
196+
"motivation": "painting",
197+
"body": {
198+
"id": "https://iiif.io/api/presentation/example-content-resources/image/painting.jpg",
199+
"type": "Image",
200+
"format": "image/jpeg",
201+
"width": 4000,
202+
"height": 3000
203+
},
204+
"target": "https://iiif.io/api/presentation/examples/manifest-with-containers/canvas"
205+
}
206+
]
207+
}
208+
]
209+
},
210+
{
211+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/scene",
212+
"type": "Scene",
213+
"items": [
214+
{
215+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/page/p3",
216+
"type": "AnnotationPage",
217+
"items": [
218+
{
219+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/annotation/s1",
220+
"type": "Annotation",
221+
"motivation": "painting",
222+
"body": {
223+
"id": "https://iiif.io/api/presentation/example-content-resources/models/astronaut.glb",
224+
"type": "Model",
225+
"format": "model/gltf-binary"
226+
},
227+
"target": "https://iiif.io/api/presentation/examples/manifest-with-containers/scene"
228+
}
229+
]
230+
}
231+
]
232+
}
233+
]
234+
}
135235
```
136236

237+
The above Manifest has three Containers, one of each type. While contrived, it is still valid and the expected user experience would be for a viewer to begin on the Timeline Container, presenting UI for the user to play the audio. The viewer would also present navigation elements to move to the next Container (the Canvas) or otherwise navigate the available Content Containers. Usually, even when a Manifest has a large number of Containers in its `items` property, they are of the same type (e.g., a 100 page book is modelled as a Manifest with 100 Canvases, each bearing an image of one page). But it is not a requirement that all Containers in a Manifest must be of the same type.
238+
239+
In each of the three Containers, an **Annotation** links the Container to a Content Resource. The Content Resource is _painted_ into the Container by an Annotation whose `target` property is the `id` of the Container. In all three simple cases here the `target` property is the the `id` of the Container with no further qualification.
240+
241+
242+
137243
### Annotations
138244

139245
IIIF uses the concept of _Annotation_ to link resources together from around the web. This specification uses a World Wide Web Consortium (W3C) standard for this called the [Web Annotation Data Model][org-web-anno]. This is a structured linking mechanism useful for making comments about Content Resources, but IIIF's primary use of it is to associate the images, audio and other Content Resources with their Containers for presentation.
140246

141247
Different uses of Annotation are distinguished through their `motivation` property. This specification defines a value for `motivation` called `painting` for associating Content Resources with Containers, which this specification calls a Painting Annotation. The verb "paint" is also used to refer to the associating of a Content Resource with a Container by a Painting Annotation. This is from the notion of painting onto a canvas, a metaphor borrowed from art and used for image-based digital applications, and expanded by IIIF into "painting" any Content Resource into a Container of any number of dimensions.
142248

249+
In the example Manifest above the first Container is a Timeline. One content resource, an MP3 file, is associated with the Timeline via a Painting Annotation for its entire duration. Typically the duration of the Timeline matches the duration of its content. This is the simplest time-based use case. The `target` property of the Painting Annotation is the whole Timeline, because it is simply the `id` of the Timeline without further qualification. In this simple case, playing the Timeline is the same as playing the MP3.
250+
251+
The second Container is a Canvas, representing a 2D surface. In this case the Canvas represents an artwork, and there is no duration property. The content resource, a JPEG image of the artwork, is associated with the Canvas via a Painting Annotation. The unit integer coordinates of the Canvas (12000 x 9000) are not the same as the pixel dimensions of the JPEG image (4000 x 3000), but they are proportional - the Canvas has a 4:3 landscape aspect ratio, and so does the JPEG image. The `target` property of the Annotation is the Canvas `id`, unqualified by any particular region; this is taken to mean the content (the image) should fill the Canvas completely. As the Canvas and the image are the same aspect ratio, no distortion will occur. This approach allows the current image to be replaced by a higher resolution image in future, on the same Canvas. The Canvas dimensions establish a coordinate system for _painting annotations_ and other kinds of annotation that link content with the Canvas; they are not pixels of images.
252+
253+
The third Container is a Scene. Unlike a Canvas, it is not a bounded spatial extent, but may be a bounded temporal extent if it has the optional duration property. It still establishes a coordinate space (x, y, z) but doesn't need any spatial properties to do so as it is always the same, infinite unbounded space. The Annotation paints the astronaut model into the Scene. As no further qualification is given, the astronaut model is placed at the (0,0,0) origin of the Scene. Later examples will show how to control the lighting and camera position(s) and properties, but this is not required; a IIIF viewer is expected to supply ambient light and a default camera position in the absence of specific values.
254+
255+
143256
The same linking mechanism is also used in IIIF with other motivations for transcriptions, commentary, tags and other content. This provides a single, unified method for aligning content, and provides a standards-based framework for referencing parts of resources. As Annotations can be added later, it promotes a distributed system in which further content such as commentary can be aligned with the objects published on the web.
144257

145258
The required properties of Annotations are `id`, `type`, `motivation`, and `target`. Most Annotations also have the `body` property.
@@ -148,8 +261,34 @@ The relationship between a Container and a painting annotation is not direct. An
148261

149262
(👀) [Model Documentation](model/#annotations)
150263

151-
```
152-
JSON of painting anno - image to canvas
264+
```json
265+
{
266+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/canvas",
267+
"type": "Canvas",
268+
"width": 12000,
269+
"height": 9000,
270+
"items": [
271+
{
272+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/page/p2",
273+
"type": "AnnotationPage",
274+
"items": [
275+
{
276+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/annotation/c1",
277+
"type": "Annotation",
278+
"motivation": "painting",
279+
"body": {
280+
"id": "https://iiif.io/api/presentation/example-content-resources/image/painting.jpg",
281+
"type": "Image",
282+
"format": "image/jpeg",
283+
"width": 4000,
284+
"height": 3000
285+
},
286+
"target": "https://iiif.io/api/presentation/examples/manifest-with-containers/canvas"
287+
}
288+
]
289+
}
290+
]
291+
}
153292
```
154293

155294
### Content Resources
@@ -158,6 +297,7 @@ Content Resources are external web resources, including images, video, audio, 3D
158297

159298
The required properties of Content Resources are `id` and `type`. Other commonly used properties include `format`, and `width`, `height` and `duration` as appropriate to the Content Resource format.
160299

300+
The Containers example also demonstrates that if you have existing content resources with web URIs - images, audio, video and models - you can quite easily publish IIIF Manifests for them by constructing the appropriate JSON around them and publishing the JSON documents. This requires careful consideration of the URI schemes for `id` properties of Containers and their Manifests to ensure they remain referenceable in the future. The choice of Timeline or Canvas dimensions (duration, width, height) can usually be derived simply from the content; the same duration as the audio or video, and the same unit Canvas dimensions as the image or video pixel dimensions, with the caveat that you should avoid low values for `width` and `height` (ref model).
161301

162302
#### Containers as Content Resources
163303

@@ -173,10 +313,23 @@ Parts of resources on the Web are identified using URIs with a fragment componen
173313

174314
There are different types of fragment based on the format of the resource. The most commonly used type in IIIF is the W3C's Media Fragments specification, as it can define a temporal and 2D spatial region.
175315

176-
```
177-
comment annotation about part of the previous example's Canvas using #Fragment
316+
```json
317+
{
318+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/comments/c1",
319+
"type": "Annotation",
320+
"motivation": "commenting",
321+
"body": {
322+
"type": "TextualBody",
323+
"value": "Koto with a cover being carried",
324+
"language": "en",
325+
"format": "text/plain"
326+
},
327+
"target": "https://iiif.io/api/presentation/examples/manifest-with-containers/canvas#xywh=6050,3220,925,1250"
328+
}
178329
```
179330

331+
Here the Canvas `id` from the earlier example is still the `target` of an Annotation, but it has been qualified to a specific region of that Canvas by a Fragment Selector `#xywh=6050,3220,925,1250`. Note that the x, y, w, and h are in the Canvas coordinate space, not the pixel dimensions space. This annotation has no knowledge of or dependency on the particular image we painted onto the Canvas; we could replace that image with one of a different, higher resolution without affecting this annotation or the region of the Canvas it targets.
332+
180333

181334
##### Specific Resource
182335

@@ -186,8 +339,29 @@ Several different classes of Selector are used in IIIF, including an alternative
186339

187340
The required properties of Specific Resources are `id`, `type`, and `source`. Other commonly used properties include `selector`, `transform`, and `scope`.
188341

189-
```
190-
comment annotation about part of the previous example's Canvas using FragmentSelector
342+
```json
343+
{
344+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/comments/c1",
345+
"type": "Annotation",
346+
"motivation": "commenting",
347+
"body": {
348+
"type": "TextualBody",
349+
"value": "Koto with a cover being carried",
350+
"language": "en",
351+
"format": "text/plain"
352+
},
353+
"target": {
354+
"type": "SpecificResource",
355+
"source": {
356+
"id": "https://iiif.io/api/presentation/examples/manifest-with-containers/canvas",
357+
"type": "Canvas"
358+
},
359+
"selector": {
360+
"type": "FragmentSelector",
361+
"value": "xywh=6050,3220,925,1250"
362+
}
363+
}
364+
}
191365
```
192366

193367

0 commit comments

Comments
 (0)