Skip to content

Commit 59301bf

Browse files
committed
updates to day three, especially more specific instructions for annotations activities
1 parent a1fef75 commit 59301bf

File tree

5 files changed

+118
-69
lines changed

5 files changed

+118
-69
lines changed

iiif-5-day-workshop/SUMMARY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
- [Annotations, AnnotationLists](day-three/annotations-and-annotation-lists.md)
3434
- [Collections](day-three/collections.md)
3535
- [Ranges](day-three/ranges.md)
36-
- [Search](day-three/search.md)
36+
<!-- - [Search](day-three/search.md) -->
3737

3838
## Day Four
3939
- [Introduction](day-four/README.md)
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
# Day Three
22

3-
## Demos: Uses and Applications of IIIF
3+
## Demos: Uses and Applications of IIIF
44

55
## Annotations and Annotation Lists
66

77
## Collections
88

99
## Ranges
10-
11-
## Search

iiif-5-day-workshop/day-three/annotations-and-annotation-lists.md

Lines changed: 89 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,33 @@
11
# What are annotations
22

3+
Annotations relate an object ("resource") to another object ("on").
4+
The nature of that relationship can be of various types.
5+
Treating the annotation itself as a resource allows describe and category the nature of that relationship.
6+
7+
## Example Annotation
8+
9+
```json
10+
11+
{
12+
"@type": "oa:Annotation",
13+
"motivation": "sc:painting",
14+
"resource":{
15+
"@id": "http://example.org/iiif/book1/res/tei-text-p1.xml",
16+
"@type": "dctypes:Text",
17+
"format": "application/tei+xml"
18+
},
19+
"on": "http://example.org/iiif/book1/canvas/p1"
20+
}
21+
22+
```
23+
24+
## What are annotationsLists?
25+
326
See Specification Chapter: [http://iiif.io/api/presentation/2.1/#annotation-list](http://iiif.io/api/presentation/2.1/#annotation-list)
427

5-
## Example
28+
Annotations are simply lists of annotations grouped together.
29+
They can be re-used by any application that wants to retrieve them.
30+
631
```json
732
{
833
"@context": "http://iiif.io/api/presentation/2/context.json",
@@ -34,11 +59,6 @@ See Specification Chapter: [http://iiif.io/api/presentation/2.1/#annotation-lis
3459
}
3560
```
3661

37-
## What are annotationsLists?
38-
39-
Annotations are simply lists of annotations grouped together.
40-
They can be re-used by an application that wants to retrieve them.
41-
4262
That can also be linked to manifests so that a viewer can bring them together in one cohesive experience.
4363

4464
## Embedding an annotationsLists in a manifest
@@ -80,63 +100,90 @@ That can also be linked to manifests so that a viewer can bring them together in
80100

81101
What is an annotation store? An annotation store is just a database designed to ingest data structured according to the Open Annotations (or Web Annotations) specifications.
82102

83-
There are lots of them. You can make your own or use one that has been made by someone else.
103+
There are lots of them annotation stores. You can make your own or use one that has been made by someone else.
84104

85105
## Local Storage as an annotation store
86106

87-
Because an annotation store is nothing other than place to store raw data
107+
Because an annotation store is nothing other than place to store raw data,
88108
even your browser's local storage can function as an annotation store.
89109

90-
### Activity
91-
92-
Turning on annotations in Mirador
93-
94-
* Open the index.html page of a mirador instance.
95-
96-
* Add the follow key value pair to the configuration of options of your mirador instance.
110+
### Activity: Configuring and Running Mirador
111+
112+
To begin working with annotations, we're going to start going a little bit deeper the image viewer. We're going to begin look at how to download Mirador and configure your personal instance of Mirador so that it supports advanced features, like annotations.
113+
114+
1. Download the Mirador Zip File to your Desktop [https://github.com/ProjectMirador/mirador/releases](https://github.com/ProjectMirador/mirador/releases)
115+
* Or download directly from here [https://github.com/ProjectMirador/mirador/releases/download/v2.6.0/build.zip](https://github.com/ProjectMirador/mirador/releases/download/v2.6.0/build.zip)
116+
1. Unzip the Mirador Package. It will probably be a folder called "build".
117+
1. Change the name of the folder to "Mirador"
118+
* `$ cd ~/Desktop`
119+
* `$ mv build Mirador`
120+
1. Now open the Mirador Directory in Atom.
121+
1. Open the file called `example.html`
122+
* The example.html provides a basic example of a html that runs the Mirador applications.
123+
* Line 19 loads in the core application
124+
* Line 23 begins the configuration of this mirador instance
125+
* For example lines 27-71 indicate the manifests that Mirador should load with on default
126+
* With respect to annotations, lines 73-76 are the subject of our current interest.
127+
* The proper `annotationEndpoint` tells Mirador where it should save annotations.
128+
1. Double check to make sure your instance of Mirador has the following configuration at lines 73-76
97129
* `"annotationEndpoint": { "name":"Local Storage", "module": "LocalStorageEndpoint" }`
98-
* A module then has to be build (the LocalStorageEndpoint) using distinct set of functions that mirador knows how to call [See https://github.com/ProjectMirador/mirador/blob/develop/js/src/annotations/localStorageEndpoint.js](https://github.com/ProjectMirador/mirador/blob/develop/js/src/annotations/localStorageEndpoint.js).
130+
* Note: A module then has to be build (the LocalStorageEndpoint) using distinct set of functions that mirador knows how to call [See https://github.com/ProjectMirador/mirador/blob/develop/js/src/annotations/localStorageEndpoint.js](https://github.com/ProjectMirador/mirador/blob/develop/js/src/annotations/localStorageEndpoint.js).
99131
* This module includes functions like search, deleteAnnotation, updateAnnotation, createAnnotation, getAnnotationList, etc.
100132
* Each annotation server might have different ways of deleting, updating, creating an annotation thus mirador needs this extra module to know what kind of action to perform.
101-
* Now that the localstorage module is turned on, go into Mirador and makes some annotations.
102-
* After you've made some annotations, view them in local Storage
133+
1. Now that the localstorage module is configured, open Mirador in your browser
134+
* In your Mirador directory run `$ http-server` and then navigate to http://localhost:8080/example.html
135+
* Or in your browser, open the example file directly, Files->OpenFile-> locate the example.html file
136+
1. Tell Mirador you want to see Annotations by click the "comment bubble" near the top left corner.
137+
1. Make some annotations
138+
1. Now export your annotations from your browsers local storage.
103139
* Open the developer tools in the Chrome Browser
104140
* Go to "Application"
105141
* View "Local Storage" in the left hand column.
106-
* Copying the information from you browsers local storage is the most primitive way of *Exporting* your annotations.
142+
1. Copy the information from you browsers local storage and past it in Atom.
143+
* This is the most primitive way of *Exporting* your annotations.
107144

108145
### Questions and Reflections
109146

110147
* What are some of the limitations of using your local storage as a store?
111148
* What kind of store/database will allow us to overcome those limitations?
112149

113-
## Setting up a Remote Local Storage
150+
## Configuring Mirador to Use a Remote Annotation Store
114151

115-
There are several kinds of annotations stores that can be used.
152+
There are several kinds of remote annotations stores that can be used. We're going to use a Rails based annotation store called "Annotot" developed by Jack Reed.
116153

117154
### Activity
118155

156+
1. Update the mirador annotation endpoint configuration to following:
157+
```json
119158

120-
* Download the Rails Annotation Server
121-
* Download from github (git clone ...)
122-
123-
* Run your rails server
124-
* either with `rails server`
125-
* `docker compose up` or `docker run rails annotation server`
126-
* Add the annotot module to mirador
127-
* Rebuild mirador
128-
* Update the mirador annotation endpoint configuration
129-
* "annotationEndpoint": {
130-
"name": 'Annotot',
131-
"module": 'AnnototEndpoint',
132-
"options": {
133-
"endpoint": "http://localhost:3000/annotations"
134-
}
135-
},
136-
* Now make some annotations in mirador
137-
* Now view those same annotations apart from mirador at http://localhost:3000/annotations/lists?uri=<cavasid>
138-
* Now you've exported your annotations and free to use them anywhere else.
139-
* So let's use them somewhere else
159+
"annotationEndpoint": {
160+
"name": "Annotot",
161+
"module": "AnnototEndpoint",
162+
"options": {
163+
"endpoint": "http://ras.scta.info/annotations"
164+
}
165+
}
166+
```
167+
1. Since this annotation store works differently than localstorage, we can expect that Mirador out of the box knows how to talk to it. So we have to provide Mirador with API hook, just as we saw above was supplied for local storage.
168+
1. Download the Annotot API Hook
169+
* [https://github.com/mejackreed/annotot/blob/master/app/assets/javascripts/annotot/annotot_endpoint.js](https://github.com/mejackreed/annotot/blob/master/app/assets/javascripts/annotot/annotot_endpoint.js)
170+
* or directly from here [https://raw.githubusercontent.com/mejackreed/annotot/master/app/assets/javascripts/annotot/annotot_endpoint.js](https://raw.githubusercontent.com/mejackreed/annotot/master/app/assets/javascripts/annotot/annotot_endpoint.js)
171+
1. Save the file in your Mirador Directory
172+
1. Import the file into your example.html file
173+
* add `<script src="annotot_endpoint.js"></script>` below `<script src="mirador/mirador.min.js"></script>` (this should be found around line 19)
174+
1. Refresh Mirador
175+
1. Now make some annotations in mirador.
176+
* Because we are all using the same remote server, we should be able to see each others annotations. Let's try it.
177+
1. Open the the following manifest with a picture of our class.
178+
1. Annotate yourself in the image.
179+
1. Navigate away and then back to the image to refresh the annotations. As other make annotations, you should see their annotations as well.
180+
181+
182+
<!-- ## Reusing your annotations from an annotation store
183+
184+
1. Now view those same annotations apart from mirador at http://ras.scta.info/annotations/lists?uri=<cavasid>
185+
1. Now you've exported your annotations and free to use them anywhere else.
186+
1. So let's use them somewhere else
140187
* Go to back to your custom project and use jquery to make a request for those annotations
141188
and display them on your page like so:
142189

@@ -146,4 +193,4 @@ There are several kinds of annotations stores that can be used.
146193
console.log(data);
147194
//do something with that data
148195
});
149-
```
196+
``` -->

iiif-5-day-workshop/day-three/collections.md

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,37 @@
22

33
## Description
44

5-
#### Collection Tree Navigator for Mirador
5+
Collections are away to organize manifests into groups, allow us the ability to share groups of manifest with a single URL.
66

7-
This feature came about to address the need of showing objects in nested collections to ease navigation and avoid server slow-down. Collection-level manifests are often very large and can contain many sub-collections within them. As such, it became important for users to navigate through collections easily and without losing context.
87

9-
See the code for Collection Tree [here](https://github.com/utlib/mirador/tree/develop_collection_tree_lazy)
8+
## Collection Tree Navigator for Mirador
109

11-
Allows users to:
10+
The collection tree navigator for Mirador came about to address the need of showing objects in nested collections to ease navigation and avoid server slow-down. Collection-level manifests are often very large and can contain many sub-collections within them. As such, it became important for users to navigate through collections easily and without losing context.
11+
12+
The aeature allows users to:
1213

1314
- View entire collections with sub-collections in a tree structure on manifest selection panel
1415
- Easily navigate across collections
1516

16-
Demo
17-
18-
You can view Mirador advanced features [here](http://projectmirador.org/demo/advanced_features.html)
19-
2017

2118
## Activity
2219

23-
Let's create your own collection
20+
Let's create your and serve your own collection
2421

25-
* Find at least five manifests and organize them into a collection, following the IIIF guidelines
22+
1. Find at least five manifests and organize them into a collection, following the IIIF guidelines
2623
* [http://iiif.io/api/presentation/2.1/#collection](http://iiif.io/api/presentation/2.1/#collection)
27-
* Then configure mirador to load a collections
28-
* `"data": [
29-
{ "collectionUri": "https://scta.info/iiif/scta/collection"}
30-
]`
31-
* Configure mirador to allow to browse your collection by changing the manifestsPanel module to the CollectionTreeManifestsPanel"
32-
* `"manifestsPanel": {
33-
"module": ""CollectionTreeManifestsPanel",
34-
}`
24+
1. Save your collection as `mycollection.json` in the `myManifests` folder on your Desktop.
25+
1. Server your manifests and collections with `$ http-server --cors`
26+
1. In the `example.html` file in the Mirador directory file configure mirador to load a collection.
27+
```json
28+
"data": [
29+
{ "collectionUri": "https://localhost:8080/mycollection.json"}
30+
]
31+
```
32+
1 Configure mirador to allow to browse your collection by changing the manifestsPanel module to the CollectionTreeManifestsPanel"
33+
34+
```json
35+
"manifestsPanel": {
36+
"module": "CollectionTreeManifestsPanel",
37+
}
38+
```

iiif-5-day-workshop/day-three/ranges.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ Ranges allow us to provide nuanced navigation for object represented as a manife
44

55
## Activity
66

7-
* Find and download a manifest
8-
* Add a "structures" field to the manifest and then add ranges at least two levels deep following the IIIF specification
7+
1. Find and download a manifest
8+
1. Add a "structures" field to the manifest and then add ranges at least two levels deep following the IIIF specification
99
* [http://iiif.io/api/presentation/2.1/#range](http://iiif.io/api/presentation/2.1/#range)
10-
* Change the id of your manifest to match the url from which it will be served (e.g. localhost:8080/mymanifest.json)
11-
* Serve your manifest
12-
* View your manifest in mirador and navigate the resource via your ranges.
10+
1. Save your modified manifest as `manifest-with-ranges.json` in the `myManifests` folder on your Desktop.
11+
1. Server your manifests and collections with `$ http-server --cors`
12+
1. View your manifest in Mirador and navigate the resource via your ranges.

0 commit comments

Comments
 (0)