Skip to content

Commit 85f9a49

Browse files
committed
ImageApiSelector
1 parent 7d2d0da commit 85f9a49

File tree

3 files changed

+82
-45
lines changed

3 files changed

+82
-45
lines changed

source/presentation/4.0/index.md

Lines changed: 61 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2170,9 +2170,9 @@ A resource with the `behavior` value "hidden" is not rendered by the client. A r
21702170

21712171
Sometimes a model file has inbuilt animations. While a description of these is outside the scope of IIIF, because it is 3D-implementation-specific, as long as there is a way to refer to a model's animation(s) by name, we can connect the animation to IIIF resources.
21722172

2173-
This pattern is also achieved with activating annotations, except that the body of the activating annotation references a _named animation_ in the model. The `body` MUST be a SpecificResource, where the `source` is the Painting Annotation that paints the model, and the `selector` is of type `AnimationSelector` with the `value` being a string that corresponds to the animation in the model.
2173+
This pattern is also achieved with activating annotations, except that the body of the activating annotation references a _named animation_ in the model. The `body` is a Specific Resource, where the `source` is the Painting Annotation that paints the model, and the `selector` is of type `AnimationSelector` with the `value` being a string that corresponds to the name of the animation in the model.
21742174

2175-
The format of the `value` string is implementation-specific, and will depend on how different 3D formats support addressing of animations within models. The same model can be painted multiple times into the scene, and you might want to activate only one model's animation, thus we need to refer to the annotation that paints the model, not the model directly.
2175+
The format of the `value` string is implementation-specific, and will depend on how different 3D formats support addressing of animations within models. The same model can be painted multiple times into the scene, and you might want to activate only one painted instance of the model's animation, thus we need to refer to the annotation that paints the model, not the model directly.
21762176

21772177

21782178
```jsonc
@@ -2215,7 +2215,7 @@ The format of the `value` string is implementation-specific, and will depend on
22152215
"body": [
22162216
{
22172217
"type": "TextualBody",
2218-
"value": "Click the box to open the lid"
2218+
"value": "Click me to open the lid"
22192219
}
22202220
],
22212221
"target": [
@@ -2262,7 +2262,7 @@ The format of the `value` string is implementation-specific, and will depend on
22622262

22632263
### 3D Comments with Cameras
22642264

2265-
In many complex 3D Scenes, it may not be clear what or how to look at a particular point of interest even when the commenting annotation targets a particular point. The view may be occluded by parts of the model, or other models in the Scene. In the following example, the user can explore the Scene freely, but when they select a particular comment, a specific Camera that was previously hidden (unavailable to the user) is activated, moving the user (i.e., setting the viewport) to a chosen position suitable for looking at the point of interest:
2265+
It is possible to associate a particular camera with a particular commenting annotation. In many complex 3D Scenes, it may not be clear from where to look at a particular point of interest. The view may be occluded by parts of the model, or other models in the Scene. In the following example, the user can explore the Scene freely, but when they select a particular comment, a specific Camera that was previously hidden (unavailable to the user) is activated, moving the user (i.e., setting the viewport) to a chosen position suitable for looking at the point of interest:
22662266

22672267

22682268
```jsonc
@@ -2441,27 +2441,11 @@ This only works for cameras.
24412441
Repeat full example? no, link to external.
24422442

24432443

2444+
### Interactivity, Guided Viewing and Storytelling
24442445

2445-
# Integration
2446-
2447-
seeAlso, service(s), extensions
2448-
mention search, image api, auth
2449-
2450-
profile for seeAlso
2451-
2452-
partOf -
2446+
Activating annotations add explicit mechanisms for interactive user experiences such as guided viewing and storytelling. A narrative might comprise an Annotation Page of `commenting` annotations that target different parts of the Container, for example a guided tour of a painting or a map. For a Canvas or Timeline it is usually sufficient to leave the interactivity to the client; the fact that comments target different extents implies the client must offer some affordance for those comments (typically the user can click each one), and in response the client will move the current play point of the Timeline to the commenting annotation target, or pan and zoom the viewport to show the relevant part of an image. For 3D this may not be enough; a particular comment may only make sense from a certain viewpoint (i.e., Camera), or different steps of the story require different Lights to be active.
24532447

2454-
Talk about Content State and use the phrase "Content State Annotations"
2455-
(we think we now _don't_ need to write a content state 2 spec ???)
2456-
2457-
2458-
2459-
# Interactivity, Guided Viewing and Storytelling
2460-
2461-
2462-
A narrative might comprise an AnnotationPage of `commenting` annotations that target different parts of the Container, for example a guided tour of a painting or a map. For a Canvas or Timeline it is usually sufficient to leave the interactivity to the client; the fact that comments target different extents implies the client must offer some affordance for those comments (typically the user can click each one), and in response the client will move the current play point of the Timeline to the commenting annotation target, or pan and zoom the viewport to show the relevant part of an image. For 3D this may not be enough; a particular comment may only make sense from a certain viewpoint (i.e., Camera), or different steps of the story require different Lights to be active.
2463-
2464-
In a storytelling or exhibition scenario, the non-painting `annotations` might be carrying informative text, or even rich HTML bodies. They can be considered to be _steps_ in the story. The use of activating annotations (back ref) allows a precise storytelling experience to be specified, including:
2448+
In a storytelling or exhibition scenario, the non-painting `annotations` might be carrying informative text, or even rich HTML bodies. They can be considered to be _steps_ in the story. The use of activating annotations allows a precise storytelling experience to be specified, including:
24652449

24662450
- providing a specific viewpoint for each step of the narrative (or even a choice of viewpoints)
24672451
- modifying the lighting of the Scene for each step, for example shining a spotlight on a point of interest
@@ -2470,25 +2454,13 @@ In a storytelling or exhibition scenario, the non-painting `annotations` might b
24702454

24712455
All the annotations referred to by the activating annotations' `target` and `body` properties are already present in the Scene from the beginning. Initially, many of them may have the behavior `hidden`, invisible until activated.
24722456

2457+
Interactive examples are provided as recipes in the [IIIF Cookbook](link).
24732458

2474-
## The `sequence` behavior
2475-
2476-
While all AnnotationPage `items` are inherently ordered, an Annotation Page with the `behavior` "sequence" is explicitly a narrative, and clients should prevent (dissuade) users from jumping about - the annotations, and the effects of them _activating_ other contents of the Container, are intended to be experienced in order and individually. Normally, a client might display all the comments in an AnnotationPage in a sidebar so they are all visible in the UI, but for an AnnotationPage with `behavior` "sequence" only show the currently active annotation text, and next and previous UI.
24772459

2460+
#### The `sequence` behavior
24782461

2479-
## Chains of activation
2462+
While all Annotation Page `items` are inherently ordered, an Annotation Page with the `behavior` "sequence" is explicitly a narrative, and clients should prevent (dissuade) users from jumping about - the annotations, and the effects of them _activating_ other contents of the Container, are intended to be experienced in order and individually. Normally, a client might display all the comments in an Annotation Page in a sidebar so they are all visible in the UI, but for an Annotation Page with `behavior` "sequence" only show the currently active annotation text, and next and previous UI.
24802463

2481-
Chaining together activating annotations can then allow the implementation of, at least:
2482-
2483-
* Specific camera position to look at an Annotation
2484-
* Multi-step linear stories
2485-
* Animations, including as part of stories without disrupting the flow, and looping animations (they activate themselves)
2486-
* Interactive components such as light switches (enable/disable a light), jukeboxes (enable/disable Audio Emitter)
2487-
2488-
2489-
## Storytelling example
2490-
2491-
* Something really cool that brings a lot of things together!
24922464

24932465

24942466
# Conveying Physical Dimensions
@@ -2505,17 +2477,65 @@ An extreme example of both physical dimension properties together is a Canvas sh
25052477

25062478

25072479

2508-
# Other stuff
2480+
# Integration
2481+
2482+
seeAlso, service(s), extensions
2483+
mention search, image api, auth
25092484

2510-
## Embedded Content
2485+
profile for seeAlso
25112486

2512-
e.g., painting TextualBody on Canvas
2487+
partOf -
25132488

2489+
Talk about Content State and use the phrase "Content State Annotations" - how you transmit IIIF from software to software.
2490+
2491+
## Authentication
2492+
2493+
It is possible to include Image API service descriptions within the Manifest, and within those it is also possible to include links to the Authentication API's services that are needed to interact with the image content. The first time an Authentication API service is included within a Manifest, it _MUST_ be the complete description. Subsequent references _SHOULD_ be just the URI of the service, and clients are expected to look up the details from the full description by matching the URI. Clients _MUST_ anticipate situations where the Authentication service description in the Manifest is out of date: the source of truth is the Image Information document, or other system that references the Authentication API services.
2494+
2495+
2496+
2497+
2498+
# Other stuff
25142499

25152500
## Style
25162501

25172502
### Rotation
25182503

2504+
An image might not be correctly aligned with the Canvas, and require rotation as it is painted. In the following example, the image is painted with a 90-degree rotation. This example uses the ImageApiSelector to convey the number of degrees of the rotation. As this particular image has an image service, the client can use the Image API to request an image that has already been rotated on the server, or it can use the information in the ImageApiSelector to rotate the image itself.
2505+
2506+
```json
2507+
{
2508+
"id": "http://example.org/iiif/book1/annotation/anno1",
2509+
"type": "Annotation",
2510+
"motivation": ["painting"],
2511+
"body": [
2512+
{
2513+
"type": "SpecificResource",
2514+
"source": {
2515+
"id": "http://example.org/iiif/book1-page1/my-image.jpg",
2516+
"type": "Image",
2517+
"service": {
2518+
"id": "http://example.org/iiif/book1-page1",
2519+
"type": "ImageService3",
2520+
"profile": "level2"
2521+
}
2522+
},
2523+
"selector": {
2524+
"type": "ImageApiSelector",
2525+
"rotation": "90"
2526+
}
2527+
}
2528+
],
2529+
"target": [
2530+
{
2531+
"id": "http://example.org/iiif/book1/canvas/p1#xywh=50,50,320,240",
2532+
"type": "Canvas"
2533+
}
2534+
]
2535+
}
2536+
2537+
```
2538+
25192539

25202540

25212541

@@ -2568,11 +2588,7 @@ The HTTP server _MUST_ follow the [CORS requirements][org-w3c-cors] to enable br
25682588

25692589
Responses _SHOULD_ be compressed by the server as there are significant performance gains to be made for very repetitive data structures.
25702590

2571-
## Authentication
2572-
2573-
It may be necessary to restrict access to the descriptions made available via the Presentation API. As the primary means of interaction with the descriptions is by web browsers using XmlHttpRequests across domains, there are some considerations regarding the most appropriate methods for authenticating users and authorizing their access. The approach taken is described in the [Authentication][iiif-auth] specification, and requires requesting a token to add to the requests to identify the user. This token might also be used for other requests defined by other APIs.
25742591

2575-
It is possible to include Image API service descriptions within the Manifest, and within those it is also possible to include links to the Authentication API's services that are needed to interact with the image content. The first time an Authentication API service is included within a Manifest, it _MUST_ be the complete description. Subsequent references _SHOULD_ be just the URI of the service, and clients are expected to look up the details from the full description by matching the URI. Clients _MUST_ anticipate situations where the Authentication service description in the Manifest is out of date: the source of truth is the Image Information document, or other system that references the Authentication API services.
25762592

25772593
# Accessibility
25782594

source/presentation/4.0/model.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,7 @@ A IIIF Image API Selector _MAY_ have the following properties: [id](#id), [regio
653653
}
654654
```
655655

656+
TODO The ImageApiSelector can be used on a static image, you don't need an Image Service.
656657

657658
### Range
658659
{: #Range}

source/presentation/4.0/scratch.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,26 @@ What to do about activating annos in the introduced content?
196196

197197

198198

199+
## Chains of activation
200+
201+
Chaining together activating annotations can then allow the implementation of, at least:
202+
203+
* Specific camera position to look at an Annotation
204+
* Multi-step linear stories
205+
* Animations, including as part of stories without disrupting the flow, and looping animations (they activate themselves)
206+
* Interactive components such as light switches (enable/disable a light), jukeboxes (enable/disable Audio Emitter)
207+
208+
209+
## Storytelling example
210+
211+
* Something really cool that brings a lot of things together!
212+
213+
214+
# Auth of Presentation API resources
215+
216+
It may be necessary to restrict access to the descriptions made available via the Presentation API. As the primary means of interaction with the descriptions is by web browsers using XmlHttpRequests across domains, there are some considerations regarding the most appropriate methods for authenticating users and authorizing their access. The approach taken is described in the [Authentication][iiif-auth] specification, and requires requesting a token to add to the requests to identify the user. This token might also be used for other requests defined by other APIs.
217+
218+
199219

200220
_removed content state use case:_
201221

0 commit comments

Comments
 (0)