The document discusses various ways to extend the IIIF metadata standard to add additional semantic properties. It describes using custom JSON properties but notes issues with potential clashes. Better approaches discussed include defining IIIF extensions, with guidelines on naming properties distinctly and documenting them. JSON-LD contexts are described as a way to map property names to URIs to avoid clashes, and scoped contexts are presented as a way to define multiple properties within an extension without collisions. The document notes that fully preventing property name reuse still remains a challenge.
1. Extending IIIF 3.0
2018 IIIF Conference, Washington DC
David Newbury, J. Paul Getty Trust
@workergnome
Extending IIIF 3.0 — David Newbury (@workergnome) 1
2. Triple-eye-eff.
The IIIF Presentation API is a data model
for arranging virtual canvases, annotating them
and providing descriptive content.
Extending IIIF 3.0 — David Newbury (@workergnome) 2
3. Triple-eye-eff.
I'm not going to talk about images.
I'm not going talk about arranging them.
Instead, I'm going to talk about metadata.
Extending IIIF 3.0 — David Newbury (@workergnome) 3
4. The Paintings, Puppies, & Pustules problem
What metadata standard handles meaning across these things?
Extending IIIF 3.0 — David Newbury (@workergnome) 4
5. We punted.
IIIF is presentational,
not semantic.
How it looks,
not what it means.
Extending IIIF 3.0 — David Newbury (@workergnome) 5
7. Properties for Software
Data that needs to be
interpreted by client so!ware.
Extending IIIF 3.0 — David Newbury (@workergnome) 7
8. Properties for Robots
Explaining to robots
what this all means.
(Yes, this is semantic. Shhhhh.)
Extending IIIF 3.0 — David Newbury (@workergnome) 8
9. What comes
out of the box?
Extending IIIF 3.0 — David Newbury (@workergnome) 9
10. Presentation Properties for People
label
A human readable label for the resource.
Extending IIIF 3.0 — David Newbury (@workergnome) 10
11. Presentation Properties for People
summary
A short textual summary of the resource.
Extending IIIF 3.0 — David Newbury (@workergnome) 11
12. Presentation Properties for People
requiredStatement
Text that MUST be displayed.
Extending IIIF 3.0 — David Newbury (@workergnome) 12
13. Presentation Properties for People
metadata
An list of label and value entries.
Extending IIIF 3.0 — David Newbury (@workergnome) 13
14. Presentation Properties for Software
navDate
A date that the client can use for navigation purposes.
Extending IIIF 3.0 — David Newbury (@workergnome) 14
15. Presentation Properties for Software
rights
A URL for a rights statement for the resource's content.
Extending IIIF 3.0 — David Newbury (@workergnome) 15
16. Presentation Properties for Software
homepage
A link to a web page that describes the "Real World Object".
Extending IIIF 3.0 — David Newbury (@workergnome) 16
17. Presentation Properties for Software
thumbnail
An content resource that represents this resource.
Extending IIIF 3.0 — David Newbury (@workergnome) 17
18. Presentation Properties for Software
logo
A small image that represents an individual or organization.
Extending IIIF 3.0 — David Newbury (@workergnome) 18
19. Presentation Properties for Software
posterCanvas
A Canvas-based summary of the resource.
Extending IIIF 3.0 — David Newbury (@workergnome) 19
20. That's all you get for embedded properties.
Extending IIIF 3.0 — David Newbury (@workergnome) 20
21. That's all you get for embedded properties.
You were hoping for more, weren't you.
Extending IIIF 3.0 — David Newbury (@workergnome) 21
22. Links & Linked Data
External resources & data.
Extending IIIF 3.0 — David Newbury (@workergnome) 22
23. Links for People
rendering
A non-IIIF representation
of the resource for humans--
though it might need special so!ware to view!
PDFs, OBJ files, ePub files
Extending IIIF 3.0 — David Newbury (@workergnome) 23
24. Links for People
{
"rendering": [{
"id": "https://example.org/1.pdf",
"type": "Text",
"format": "application/pdf",
"label": { "en": [ "PDF Rendering of Book" ] }
}]
}
Extending IIIF 3.0 — David Newbury (@workergnome) 24
25. Links for People
"label": Description for people.
"format": Description for so!ware.
Extending IIIF 3.0 — David Newbury (@workergnome) 25
28. Links for Robots
"profile":
How your community's robots
recognize this data as relevant.
(your community has robots, right?)
Extending IIIF 3.0 — David Newbury (@workergnome) 28
29. Links for Software
"service"
External APIs that so!ware can interact with
for new functionality or information.
The Image API is common,
but there are others.
Extending IIIF 3.0 — David Newbury (@workergnome) 29
31. Links for Robots
You need to know what the service does to use it.
Documentation should be available at the profile URL.
Extending IIIF 3.0 — David Newbury (@workergnome) 31
32. You want more?
(Never satisfied, are you?)
Extending IIIF 3.0 — David Newbury (@workergnome) 32
33. Annotations
Linking between resources via a motivation.
IIIF defines the painting & supplementing motivations,
the Web Annotation spec defines others.
(clients need to recognize them, though...)
Extending IIIF 3.0 — David Newbury (@workergnome) 33
34. Annotations
Annotations are the way to
provide custom content for people.
They're not very good at providing
content for so!ware, though.
Extending IIIF 3.0 — David Newbury (@workergnome) 34
35. Still not satisfied?
You really want custom, semantic,
machine-readable properties.
Even though IIIF doesn't do that.
Extending IIIF 3.0 — David Newbury (@workergnome) 35
36. Do what thou wilt.
Extending IIIF 3.0 — David Newbury (@workergnome) 36
37. Custom JSON properties.
Other properties are allowed...if a client discovers properties
that it does not understand, then it must ignore them.
IIIF lets you add new properties.
Extending IIIF 3.0 — David Newbury (@workergnome) 37
39. Custom JSON properties.
If it’s only your manifests,
used by only your so!ware,
and nobody else ever uses it...
Then maybe it’s ok.
That's not very IIIF-y, though.
Extending IIIF 3.0 — David Newbury (@workergnome) 39
40. Problems with Custom JSON:
— I can't tell that you've used them.
— I can't guess what they mean.
— I might have used the same property.
— IIIF might use the same property.
Extending IIIF 3.0 — David Newbury (@workergnome) 40
41. The heart wants what it wants.
Extending IIIF 3.0 — David Newbury (@workergnome) 41
42. Fine. You win.
IIIF Extensions.
Extending IIIF 3.0 — David Newbury (@workergnome) 42
43. IIIF Extension best practices:
— Don't reuse existing property names
— Indicate you're using a custom property
— Use as few properties as possible
— Explain what they mean
— Share them with the community
Extending IIIF 3.0 — David Newbury (@workergnome) 43
44. JSON-LD Contexts
No one would accidentally reuse
{
"http://iiif.davidnewbury.com/lastModified": "2017-12-25"
}
But, man—
is it ugly.
Extending IIIF 3.0 — David Newbury (@workergnome) 44
45. JSON-LD Contexts
If I host a context.json file...
{
"@context": {
"@version": 1.1,
"lastModified": "http://iiif.davidnewbury.com/lastModified"
}
}
Extending IIIF 3.0 — David Newbury (@workergnome) 45
46. JSON-LD Contexts
...and include it into my manifest...
{
"@context": [
"http://iiif.davidnewbury.com/context.json",
"http://www.w3.org/ns/anno.jsonld",
"http://iiif.io/api/presentation/3/context.json"
],
"id": "https://example.org/iiif/book1/manifest",
"lastModified": "2017-12-25",
"type": "Manifest",
}
Extending IIIF 3.0 — David Newbury (@workergnome) 46
47. JSON-LD Contexts
...I can use the pretty name.
{
"@context": [
"http://iiif.davidnewbury.com/context.json",
"http://www.w3.org/ns/anno.jsonld",
"http://iiif.io/api/presentation/3/context.json"
],
"id": "https://example.org/iiif/book1/manifest",
"lastModified": "2017-12-25",
"type": "Manifest",
}
Extending IIIF 3.0 — David Newbury (@workergnome) 47
48. JSON-LD Contexts
JSON-LD Contexts do three things:
1. Map property names to URIs
2. Let so!ware know to look for new properties
3. Tell you who created the properties
Extending IIIF 3.0 — David Newbury (@workergnome) 48
49. Um...this didn't solve the problem of reusing properties.
Extending IIIF 3.0 — David Newbury (@workergnome) 49
50. JSON-LD Scoped Contexts
There are only so many good names.
A IIIF extension should only claim one property,
but many extensions need more than one.
Extending IIIF 3.0 — David Newbury (@workergnome) 50
51. JSON-LD Scoped Contexts
In JSON-LD 1.1, there's a way to define a context
that only applies within a particular property:
Scoped Contexts.
Extending IIIF 3.0 — David Newbury (@workergnome) 51
52. {
"@context": {
"@version": 1.1,
"lastModified": "http://iiif.davidnewbury.com/lastModified"
}}
can be used like
{
"@context": [
"http://iiif.davidnewbury.com/context.json"
"http://www.w3.org/ns/anno.jsonld",
"http://iiif.io/api/presentation/3/context.json"
],
"id": "https://example.org/iiif/book1/manifest",
"type": "Manifest",
"lastModified": "2017-12-25"
}
Extending IIIF 3.0 — David Newbury (@workergnome) 52