-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
1262 lines (1255 loc) · 88 KB
/
Copy pathindex.html
File metadata and controls
1262 lines (1255 loc) · 88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html>
<head>
<title>IIIF</title>
<link rel="icon" href="/img/iiif_logo_32.ico" type="image/vnd.microsoft.icon">
<!-- Bootstrap-->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Mirador-->
<script src="https://cdn.jsdelivr.net/npm/mirador@4.0.0-alpha.2/dist/mirador.min.js"></script>
<!-- OSD-->
<script src="https://cdn.jsdelivr.net/npm/openseadragon@5.0/build/openseadragon/openseadragon.min.js"></script>
<!-- UV-->
<script src=" https://cdn.jsdelivr.net/npm/universalviewer@4.0.25/dist/umd/UV.min.js "></script>
<link href=" https://cdn.jsdelivr.net/npm/universalviewer@4.0.25/dist/uv.min.css" rel="stylesheet">
<!-- Tify-->
<script src="https://cdn.jsdelivr.net/npm/tify@0.31.0/dist/tify.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/tify@0.31.0/dist/tify.css">
<!-- Project CSS -->
<link rel="stylesheet" href="css/styles.css">
</head>
<body>
<!-- SVG variables-->
<svg style="display: none;">
<symbol id="checkSVG" fill="currentColor" viewBox="0 0 16 16">
<path
d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z" />
</symbol>
<symbol id="infoSVG" fill="currentColor" viewBox="0 0 16 16">
<path
d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z" />
</symbol>
<symbol id="warningSVG" fill="darkorange" viewBox="0 0 16 16">
<path
d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z" />
</symbol>
</svg>
<div class="row">
<aside class="col-2">
<nav class="nav flex-column sticky-top p-3">
<a class="navbar-brand fw-bold" href="#about">Über das Projekt</a>
<a class="navbar-brand fw-bold" href="#iiif">IIIF</a>
<a class="nav-link fw-bold" href="#intro">Einführung</a>
<!-- ## --><a class="nav-link ms-2" href="#intro_about">Was ist IIIF?</a>
<!-- ## --><a class="nav-link ms-2" href="#intro_terms">Begriffliches</a>
<!-- ## --><a class="nav-link ms-2" href="#intro_apis">IIIF APIs</a>
<!-- ## --><a class="nav-link ms-2" href="#intro_versions">IIIF Versionen</a>
<a class="nav-link fw-bold" href="#imageAPI">IIIF Image API</a>
<!-- ## --><a class="nav-link ms-2" href="#imageAPI_compliance">Compliance Levels</a>
<!-- ## --><a class="nav-link ms-2" href="#imageAPI_imageInformationRequests">Image Information
Requests</a>
<!-- ## --><a class="nav-link ms-2" href="#imageAPI_imageRequests">Image Requests</a>
<a class="nav-link fw-bold" href="#presentationAPI">IIIF Presentation API</a>
<!-- ## --><a class="nav-link ms-2" href="#presentationAPI_manifests">Manifeste</a>
<!-- ## --><a class="nav-link ms-2" href="#presentationAPI_collections">Collections</a>
<a class="nav-link fw-bold" href="#viewer">Viewer</a>
<a class="navbar-brand fw-bold" href="#literature">Weiterführende Literatur</a>
</nav>
</aside>
<main class="col-10">
<section id="about">
<h1>Über das Projekt</h1>
<p>Das International Image Interoperability Framework (IIIF) ist ein internationaler Standard zum
Austausch von digitalen Bildern und Bilddaten.
Digitale Editionen teilen die übergeordnete Zielsetzung in Hinblick auf meist in Textform
überlieferte Information; unter dem Stichwort „Distributed Editions“
werden die Vorteile in der Anwendung von IIIF schon länger diskutiert (van Zundert 2018, Witt 2018,
Drucker 2021). Obwohl IIIF in vielen Applikationen
digitaler Editionen genutzt wird, um Bilddaten etwa von Faksimiles darzustellen, sind die
Möglichkeiten nicht ausgeschöpft.
</p>
<p>
Das betrifft ein knowledge gap zwischen technischer Umsetzung und Anforderungen aus den
Editionsprojekten - in beide Richtungen: Einerseits gibt es Features,
die sowohl in den IIIF-Spezifikationen als auch in Viewern implementiert sind, die aber nicht
genutzt werden, da sie nicht bekannt sind oder für den Anwendungsfall
als nicht sinnvoll erachtet werden; andererseits wünschen Editionsprojekte - als BenutzerInnen ihrer
eigenen Editionen wie als bemühte BereitstellerInnen von dem
jeweiligen Material angemessenen Funktionalitäten - Features im Umgang mit Bilddaten, deren
vorhandene technische Implementierbarkeit den EntwicklerInnen der Präsentationsschichten
nicht bekannt ist.</p>
<p>
Die Editionswissenschaft hat ihrerseits die Bedeutung von faksimilierenden Reproduktionen für die
Rechtfertigung editorischer Entscheidungen zur Kenntnis genommen und sie in
unterschiedlichen Gradierungen auf einer Skala zwischen reiner Reproduktion (und Sicherung etwa
fragilen Materials) und interpretatorischem Eingriff verortet (Bosse 2023, 16f).
Geht es um digitale Editionen, so zeigt sich in einer vorläufigen Literaturrecherche in den Bänden
und Beiheften von Editio sowie in den Rezensionen aus RIDE: Es liegt der Fokus entweder
auf UI-Elementen (wobei Viewer als Standardkomponenten kaum besondere Aufmerksamkeit erfahren), oder
auf der technischen Implementierung der Bildauslieferung (wobei IIIF als Schlagwort für
die Qualität der Umsetzung einer Applikation ausreichend scheint). Die Möglichkeiten von IIIF und
ihre spezifische Anwendbarkeit für digitale Editionen sind jedenfalls von dieser Seite nicht
systematisch erfasst.</p>
</section>
<section id="iiif">
<div id="intro">
<h1>Einführung</h1>
<div id="intro_about">
<h2>Was ist IIIF?</h2>
<figure>
<blockquote class="blockquote">
<p>Das <strong>International Interoperability Framework</strong> (<strong>IIIF</strong>;
gesprochen <q>Triple-Ei-F</q>) bietet einen Standard, wie digitale Bilder im
Internet geteilt werden können. IIIF entstand 2011 mit Unterstützung der Mellon
Foundation aus einer Initiative renommierter Gedächtnisorganisationen, zu denen
unter anderem die Harvard University, die Stanford University Libraries, die Cornell
University, die British Library, die Bodleian Library (Oxford) sowie die
Nationalbibliotheken von Frankreich und Norwegen gehören. [...] IIIF schafft eine
noch nie dagewesene Interoperabilität und ermöglicht einen
institutionsübergreifenden Austausch digitaler Objekte sowie ihre
standortunabhängige Darstellung in unterschiedlichsten Viewern und sonstigen
Präsentationslösungen im World Wide Web. </p>
</blockquote>
<figcaption class="blockquote-footer">
<a href="https://de.wikipedia.org/wiki/International_Image_Interoperability_Framework"
target="_blank">Wikipedia</a>
</figcaption>
</figure>
<p>IIIF ist also ein Standard für das <q>Ausliefern</q> von Bilddaten im World Wide Web. In den
allermeisten Fällen ist dabei der <q>Lieferant</q> ein sogenannter <strong>(IIIF-)
Image-Server</strong>, also der Ort im Netz, an dem die Bilddaten liegen bzw. für die
<q>Abholung</q> aufbereitet werden. Der <q>Empfänger</q> ist zumeist der Browser, in dem die
gelieferten Bilddaten dargestellt werden sollen. Da IIIF unter Rücksichtnahme auf allgemeine
Web-Standards entwickelt wurde (und weiter wird), funktioniert dies mit allen modernen
Webbrowsern. Unterstützt der Empfänger jedoch zudem selbst den IIIF Standard (wie es
beispielsweise bei <strong>IIIF- fähigen Viewern</strong> Fall ist), lässt sich das
Potential der Technologie voll ausschöpfen.
</p>
<p>Ziel dieses Tutorials ist es, hier unser Wissen über IIIF und dessen Verwendung -
insbesondere in Hinblick auf Digitale Editionen - zu bündeln. Es richtet sich demnach primär
an Webentwickler, die wissen wollen: </p>
<ul class="list-group list-group-flush">
<li class="list-group-item">Wie adressiere ich meine IIIF Ressourcen über den Browser bzw.
in einem IIIF Viewer?</li>
<li class="list-group-item">Wie organisiere ich meine IIIF Ressourcen mit Hilfe von
Manifesten und Collections?</li>
<li class="list-group-item">Welche IIIF Viewer gibt es und wie binde ich sie in meine
Digitale Edition ein?</li>
</ul>
<p>Was hier hingegen <strong>nicht</strong> geboten wird ist eine Anleitung für das Aufsetzen
und Betreiben eines IIIF Image Servers. Zu <a
href="https://iiif.io/get-started/image-servers/" target="_blank">diesem</a> und vielen
weiteren Aspekten rund um IIIF, sowie zur Vertiefung der im Rahmen dieses Tutorials
größtenteils nur überblicksartig behandelbaren Themen sei auf die exzellente <a
href="https://iiif.io" target="_blank">offizielle IIIF Website</a> verwiesen, auf welche
hier noch des Öfteren referenziert werden wird. </p>
</div>
<div id="intro_terms">
<h2>Begriffliches</h2>
<div>
<h3>IIIF Ressourcen</h3>
<p>Wir gehen also von (Bild-)Daten aus, die bereits auf IIIF Image Servern zur Verfügung
stehen, womit sie als <strong>IIIF Ressourcen</strong> oder IIIF Services (die
Nomenklatur ist zum Teil recht verwirrend) über die IIIF APIs zugänglich sind. Jede
dieser Ressourcen (in der Regel entspricht eine (Bild-)Quelle einer Ressource) wird
durch einen <abbr title="Uniform Resource Identifier">URI</abbr> eindeutig referenziert,
der auch <strong>base-URI</strong> der jeweiligen IIIF Ressource genannt wird und sich
folgendermaßen zusammensetzt:
</p>
<code><var data-bs-toggle="tooltip"
data-bs-title="Übertragungsprotokoll (HTTP bzw. HTTPS)">{scheme}</var>://<var
data-bs-toggle="tooltip" data-bs-title="IIIF Image Server">{server}</var>/<var
data-bs-toggle="tooltip"
data-bs-title="Optional; beispielsweise zur Differenzierung unterschiedlicher Sammlungen">{prefix}</var>/<var
data-bs-toggle="tooltip"
data-bs-title="Identifikator der konkreten Einzelressource">{identifier}</var></code>
<p>Beispiele für base-URIs sind: </p>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<span data-bs-toggle="tooltip"
data-bs-title="ÖNB | Austrian Books Online (APO) | Selectarum stirpium Americanarum historia, in qua ad Linnaeanum systema determinatae (etc.) | Bild 2">
https://iiif.onb.ac.at/images/ABO/Z165851607/00000002</span>
</li>
<li class="list-group-item"><span data-bs-toggle="tooltip"
data-bs-title="GAMS | Early Medieval Glosses And The Question Of Their Genesis: A Case Study On The Vienna Bede - Electronic transcription of Vienna, Österreichische Nationalbibliothek, Codex 15298 (olim Suppl. 2698) | Bild 1">https://gams.uni-graz.at/iiif/o:glossvibe.bvi/IMAGE.1</span>
</li>
<li class="list-group-item"><span data-bs-toggle="tooltip"
data-bs-title="DigiVatLib | Vergilius, Opera (fragmenta) | Bild 5">https://digi.vatlib.it/iiif/MSS_Vat.lat.3225/res/img0005</span>
</li>
</ul>
<p>Im (vom Framework empfohlenen) Normalfall werden diese base-URIs von einem Web-Browser
auf das <strong>image information document (info.json)</strong> der betreffenden
Ressource dereferenziert (dazu weiter unten mehr).
</p>
</div>
<div>
<h3>Vollbild</h3>
<p>Wie bereits erwähnt repräsentiert jede IIIF Ressource im Regelfall eine einzelne
Bildquelle, beispielsweise den Scan einer einzelnen (oder doppelten) Buchseite. Die
<q>Qualität</q> der Ressource ist damit größtenteils von der <q>Qualität</q> der
zugrundeliegenden Bilddatei - insbesondere deren Auflösung - abhängig bzw. durch diese
limitiert. Das legt die Verwendung möglichst hoch auflösender Bilder (und damit
<q>großer</q> Bilddateien) nahe, wobei IIIF Server auch Maximaldimensionen für die
Bereitstellung von Ressourcen festlegen können. Mit dem Begriff
<strong>Vollbild</strong> (<i>full image</i>) ist hier die - egal ob nun durch die
zugrundeliegende Bilddatei oder die Implementation selbst definierte -
höchstauflösendste vom Server bereitgestellte Version des gesamten Bildbereichs gemeint.
</p>
</div>
</div>
<div id="intro_apis">
<h2>IIIF APIs</h2>
<p>Vielerorts wird IIIF auch als Spezifikation eines Sets von Services oder <abbr
title="application programming interface">API</abbr>s, die diesen Standard unterstützen,
definiert. Als zentrale (oder Kern-) APIs des Frameworks gelten dabei die <strong>IIIF Image
API</strong> und die <strong>IIIF Presentation API</strong>, mit denen sich auch dieses
Tutorial eingehender beschäftigen wird. Grob gesagt kümmert sich erstere um die
<q>Auslieferung</q> einzelner Bildquellen, während letztere die Anzeige von Kompositionen
aus mehreren Einzelquellen (beispielsweise eines Buches als chronologische Sequenz seiner
Seiten) mitsamt zugehörigen Metadaten ermöglicht und steuert. Weiters umfasst der IIIF
Standard die <strong>Authorization Flow API</strong> (regelt mögliche
Zugriffsbeschränkungen), die <strong>Change Discovery API</strong> (Versionierung), die
<strong>Content Search API</strong> (Durchsuchbarkeit) sowie die <strong>Content State
API</strong> (Navigation der Presentation API).
</p>
</div>
<div id="intro_versions">
<h2>IIIF Versionen</h2>
<p>Sowohl die Image- als auch die Presentation API liegen seit 2020 in der <strong>Version
3.0</strong> vor. Da einige der Änderungen <strong>zu Version 2 nicht
abwärtskompatibel</strong> sind macht es einen Unterschied, welche Version am jeweiligen
Image Server implementiert ist. In der Praxis findet man - Stand 2024 - fast ausschließlich
Implementationen der Version 2 vor (inklusive aller obigen Beispiele). Trotzdem wollen wir
uns hier auf die APIs der Version 3.0 konzentrieren und gegebenenfalls auf Änderungen zur
vorherigen
Version hinweisen.
</p>
</div>
</div>
<div id="imageAPI">
<h1>IIIF Image API</h1>
<figure>
<blockquote class="blockquote">
<p>The <abbr title="International Image Interoperability Framework">IIIF</abbr> Image <abbr
title="Application Programming Interface">API</abbr> specifies a web service that
returns an image in response to a standard <abbr
title="Hypertext Transfer Protocol">HTTP</abbr> or <abbr
title="Hypertext Transfer Protocol (Secure)">HTTPS</abbr> request. The URI can
specify the region, size, rotation, quality characteristics and format of the requested
image. A URI can also be constructed to request basic technical information about the
image to support client applications. This <abbr
title="Application Programming Interface">API</abbr> was conceived of to facilitate
systematic reuse of image resources in digital image repositories maintained by cultural
heritage organizations. It could be adopted by any image repository or service, and can
be used to retrieve static images in response to a properly constructed URI.
</p>
</blockquote>
<figcaption class="blockquote-footer">
<a href="https://iiif.io/api/image/3.0/#1-introduction" target="_blank">iiif.io</a>
</figcaption>
</figure>
<p>An die <strong><a href="https://iiif.io/api/image/3.0/" target="_blank">Image API</a></strong>
können
also grundsätzlich zwei unterschiedliche Arten von Abfragen (Requests) gestellt werden: </p>
<ul class="list-group list-group-flush">
<li class="list-group-item">Ein <strong>Image Information Request</strong> gibt
Metainformationen über die adressierte Ressource zurück.</li>
<li class="list-group-item">Ein <strong>Image Request</strong> liefert eine Repräsentation der
Ressource, also ein <q>tatsächliches</q> Bild (bzw. einen Bildausschnitt) zurück. </li>
</ul>
<p>Nachdem (Image) Information Requests meist automatisiert im Hintergrund - beispielsweise von
einem Viewer - gestellt werden, wird diese Funktionalität der Image API mancherorts etwas
stiefmütterlich behandelt (wenn beispielsweise von <q>Image Delivery API</q> die Rede ist).
</p>
<div id="imageAPI_compliance">
<h2>Compliance Levels</h2>
<p>Wichtig vorauszuschicken ist, dass IIIF Ressourcen unterschiedlich <q>stark</q> implementiert
werden können, also <strong>nicht jede Ressource</strong> zwangsläufig <strong>alle
Funktionalitäten</strong> (<i>features</i>) der Image API unterstützen muss. Für einen
Client - der beispielsweise auch ein IIIF Viewer sein kann (und in den meisten Fällen
wahrscheinlich auch ist) - ist es demnach nützlich vorab zu <q>wissen</q>, welche
Funktionalitäten er für eine bestimmten Ressource vom Server erwarten kann - sprich: welche
Requests an die Image API möglich und sinnvoll sind. Zu diesem Zweck unterscheidet das
Framework drei <q>Konformitätsstufen</q> (<strong><a
href="https://iiif.io/api/image/3.0/compliance/" target="_blank">Compliance
Levels</a></strong>), die den <strong><q>Mindestfunktionsumfang</q></strong> jeder
Ressource auf den ersten Blick ersichtlich machen sollen:
</p>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<strong><i>level0</i></strong>: Mindestanforderungen für alle IIIF Ressourcen. Der
Server muss im Prinzip nur das Vollbild als <i>.jpg</i> in einer beliebigen,
voreingestellten (<i>default</i>) Qualität ausliefern können
</li>
<li class="list-group-item">
<strong><i>level1</i></strong>: Empfohlener Implementationsstandard. Es können
zusätzlich auch Bildausschnitte adressiert und in verschiedenen Auflösungen angefordert
werden
</li>
<li class="list-group-item">
<strong><i>level2</i></strong>: Zusätzlich sind Adressierungen sowohl über
Prozentangaben
(<i>pct:</i>) als auch über Maximaldimensionen (<i>!</i>) implementiert. Die Rückgabe
muß zudem als Portable Network Graphics (<i>.png</i>) und - sofern möglich, also wenn
das <q>Original</q> nicht selbst monochrom bzw. schwarzweiß ist - in den Qualitäten
<i>color</i> und <i>gray</i> verfügbar sein sowie orthogonale Rotation (<i>90</i>,
<i>180</i>, <i>270</i>) unterstützen.
</li>
</ul>
</div>
<div id="imageAPI_imageInformationRequests">
<h2>Image Information Requests</h2>
<p>Für jede IIIF Ressource wird ein sogenanntes <strong>image information document</strong>
erzeugt, das strukturierte Metadaten über die Ressource beinhaltet. Dieses ist in den
allermeisten Fällen (wiederum eine Empfehlung, manche IIIF Server erlauben jedoch eine
benutzerdefinierte Namensgebung) <strong>info.json</strong> benannt, ist also eine Datei im
<abbr title="JavaScript Object Notation">JSON</abbr> - genauer gesagt <abbr
title="JavaScript Object Notation for Linked Data"><a href="https://json-ld.org/"
target="_blank">JSON-LD</a></abbr> - Format, die <strong>zumindest</strong>
folgende Informationen bereitstellen <strong>muss</strong>:
</p>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<span class="badge bg-dark me-1">@context</span>
Interpretationskontext des Dokuments. Für die Image API 3.0 stellt das Framework
<i>http://iiif.io/api/image/3/context.json</i> bereit
</li>
<li class="list-group-item">
<span class="badge bg-dark me-1">id</span>
(base-) URI der Ressource
</li>
<li class="list-group-item">
<span class="badge bg-dark me-1">type</span>
Art (Version) der Image API, <i>ImageService3</i> für Version 3
</li>
<li class="list-group-item">
<span class="badge bg-dark me-1">protocol</span>
Art des Services, <i>http://iiif.io/api/image</i> für die IIIF Image API
</li>
<li class="list-group-item">
<span class="badge bg-dark me-1">profile</span>
Compliance level der Ressource
</li>
<li class="list-group-item">
<span class="badge bg-dark me-1">width</span>
<span class="badge bg-dark me-1">height</span>
Initiale (<q>volle</q>) Bilddimensionen
</li>
</ul>
<p>Des Weiterem <strong>kann</strong> angegeben sein:</p>
<ul class="list-group list-group-flush">
<li class="list-group-item">
<span class="badge bg-dark me-1">sizes</span>
Bereitgestellte (<q>vorberechnete</q>) Bilddimensionen
</li>
<li class="list-group-item">
<span class="badge bg-dark me-1">maxWidth</span>
<span class="badge bg-dark me-1">maxHeight</span>
<span class="badge bg-dark me-1">maxArea</span>
Maximale Dimensionen, in dem Bilder (beispielsweise über einen Image Request oder an
einen
Viewer) ausgeliefert werden
</li>
<li class="list-group-item">
<span class="badge bg-dark me-1">tiles</span>
Informationen zur Kachelung der Ressource
</li>
<li class="list-group-item">
<span class="badge bg-dark me-1">preferredFormats</span>
<span class="badge bg-dark me-1">extraFormats</span>
Gibt (Datei-)Formate an, die per Image Request abrufbar sind (<i>jpg</i>, <i>png</i>,
<i>tif</i> etc.)
</li>
<li class="list-group-item">
<span class="badge bg-dark me-1">rights</span>
Lizenzinformation zum Bildinhalt. <strong>Muss</strong> entweder einer <a
href="http://creativecommons.org/licenses/" target="_blank">Creative Commons
license URI</a> (beispielsweise <i>http://creativecommons.org/licenses/by/4.0/</i>)
oder einer <a href="http://rightsstatements.org/page/1.0/" target="_blank">Rights
Statements URI</a> (beispielsweise
<i>http://rightsstatements.org/vocab/InC-NC/1.0/</i>) entsprechen
</li>
<li class="list-group-item">
<span class="badge bg-dark me-1">extraQualities</span>
Steht eine Ressource in mehreren <q>Qualitäten</q> (<i>color</i>, <i>gray</i>,
<i>bitonal</i>) zur Verfügung, werden diese hier aufgelistet
</li>
<li class="list-group-item">
<span class="badge bg-dark me-1">extraFeatures</span>
Funktionalitäten, die der Service für die Ressource zur Verfügung stellt (und über jene
durch ihr jeweiliges Compliance Level definierten hinausgehen)
</li>
<li class="list-group-item">
<span class="badge bg-dark me-1">partOf</span>
<span class="badge bg-dark me-1">seeAlso</span>
<span class="badge bg-dark me-1">service</span>
Verweis auf externe Ressourcen (beispielsweise Manifeste) oder Services
</li>
</ul>
<!-- info.json V3 vs V2-->
<p>Hier der Versuch einer <strong>Gegenüberstellung</strong> eines image information
documents
(info.json) auf Basis der Beispiele der offiziellen API-Dokumentation (in den <strong>
Versionen <a href="https://iiif.io/api/image/3.0/#59-complete-response"
target="_blank">3.0</a> bzw. <a
href="https://iiif.io/api/image/2.1/#complete-response"
target="_blank">2.1</a></strong>). Die Beispiele wurden geringfügig angepasst um
eine bessere Vergleichbarkeit zu gewährleisten. Eine ausführlichere Aufstellung aller
Änderungen findet sich im offiziellen <a href="https://iiif.io/api/image/3.0/change-log/"
target="_blank">Image API 3.0 Change Log</a>.
</p>
<div class="row">
<div class="col-6 p-1">
<h3>Image API 3</h3>
<code>{
"@context": "http://iiif.io/api/image<span data-bs-toggle="tooltip" data-bs-title="Verweis auf Version 3">/3/</span>context.json",
<span data-bs-toggle="tooltip" data-bs-title="In Version 3 ohne vorangestelltem'@'">"id"</span>: "https://example.org/image-service-3/abc/123",
<span data-bs-toggle="tooltip" data-bs-title="Verpflichtend in Version 3, nun ohne vorangestelltem'@'">"type": "ImageService3"</span>,
"protocol": "http://iiif.io/api/image",
"profile": <span data-bs-toggle="tooltip" data-bs-title="In Version 3 genügt der String 'level0'|'level1'|'level2'">"level1"</span>,
"width": 6000,
"height": 4000,
<span data-bs-toggle="tooltip" data-bs-title="Neu (optional) ab Version 2.1">"maxWidth"</span>: 3000,
<span data-bs-toggle="tooltip" data-bs-title="Neu (optional) ab Version 2.1">"maxHeight"</span>: 2000,
<span data-bs-toggle="tooltip" data-bs-title="Neu (optional) ab Version 2.1">"maxArea"</span>: 4000000,
"sizes": [
{"width": 600, "height": 400},
{"width": 3000, "height": 2000}
],
"tiles": [
{"width": 512, "scaleFactors": [ 1, 2, 4 ]},
{"width": 1024, "scaleFactors": [ 8, 16 ]},
],
<span data-bs-toggle="tooltip" data-bs-title="Optional, ersetzt 'license'">"rights"</span>: <span data-bs-toggle="tooltip" data-bs-title="Darf nur(!) noch ein einzelner Wert/URI sein">"http://rightsstatements.org/vocab/InC-EDU/1.0/"</span>,
<span data-bs-toggle="tooltip" data-bs-title="In Version 2 noch unter profile/formats zusammengelegt">"preferredFormats"</span>: [ "png", "gif"],
<span data-bs-toggle="tooltip" data-bs-title="In Version 2 noch unter profile/formats zusammengelegt">"extraFormats"</span>: [ "pdf" ],
<span data-bs-toggle="tooltip" data-bs-title="In Version 2 noch unter profile/qualities">"extraQualities"</span>: [ "color", "gray" ],
<span data-bs-toggle="tooltip" data-bs-title="In Version 2 noch unter profile/supports">"extraFeatures"</span>: [ "mirroring", "rotationArbitrary" ],
"service": <span data-bs-toggle="tooltip" data-bs-title="In Version 3 verpflichtend(!) ein Array">[</span>
{
<span data-bs-toggle="tooltip" data-bs-title="Auch hier in Version 3 ohne vorangestelltem'@'">"id"</span>: "https://example.org/service/example",
<span data-bs-toggle="tooltip" data-bs-title="Auch hier in Version 3 ohne vorangestelltem'@'">"type"</span>: "Service",
"profile": "https://example.org/docs/example-service.html"
}
<span data-bs-toggle="tooltip" data-bs-title="In Version 3 verpflichtend(!) ein Array">]</span>
}</code>
</div>
<div class="col-6 p-1">
<h3>Image API 2</h3>
<code>{
"@context" : "http://iiif.io/api/image/2/context.json",
"@id" : "http://www.example.org/image-service-2/abc/123",
"protocol" : "http://iiif.io/api/image",
"width" : 6000,
"height" : 4000,
"sizes" : [
{"width" : 600, "height" : 400},
{"width" : 3000, "height": 2000}
],
"tiles": [
{"width": 512, "scaleFactors": [ 1, 2, 4, 8, 16 ]},
],
"license" : [
"http://example.org/rights/license1.html",
"http://rightsstatements.org/vocab/InC-EDU/1.0/"
],
"profile" : [
"http://iiif.io/api/image/2/level2.json",
{
"formats" : [ "png", "gif", "pdf" ],
"qualities" : [ "color", "gray" ],
"supports" : [ "mirroring", "rotationArbitrary" ]
}
],
"service" : {
"@context": "http://iiif.io/api/annex/service/physdim/1/context.json",
"profile": "http://iiif.io/api/annex/service/physdim",
"physicalScale": 0.0025,
"physicalUnits": "in"
}
}</code>
</div>
</div>
</div>
<div id="imageAPI_imageRequests">
<h2>Image Requests</h2>
<p>IIIF <strong>Image Requests</strong> (<q>Bildanforderungen</q> oder <q>-aufrufe</q>) sind
unbestritten das zentrale Feature (und verkörpern gewissermaßen die Grundidee) des
Frameworks. Einfach ausgedrückt könnte man sagen, dass mit IIIF Bilder (Ressourcen) über
<q>normale</q> HTTP(S) Requests (<q>Links</q>) dynamisch in verschiedensten <q>Varianten</q>
(Ausschnitten, Größen, Rotationen, <q>Qualitäten</q> und Formaten) so ausgeliefert werden
können, als ob diese unter der jeweiligen <q>Adresse</q> (<abbr
title="Uniform Resource Locator">URL</abbr>) <q>tatsächlich</q> (also als Bilddateien am
Server) hinterlegt wären. Über die <strong>Parametrisierung</strong> dieses URL
(<strong>Request-URI</strong>) lässt sich dabei konfigurieren, welche <q>Variante</q> des
Bildes konkret zurückgegeben werden soll.
</p>
<code><var data-bs-toggle="tooltip" data-bs-title="URI der IIIF Ressource">{base-uri}</var>/<var
data-bs-toggle="tooltip" data-bs-title="Auszuwählender Bildbereich">{region}</var>/<var
data-bs-toggle="tooltip" data-bs-title="Dimensionen der Rückgabe">{size}</var>/<var
data-bs-toggle="tooltip" data-bs-title="Ausrichtung der Rückgabe">{rotation}</var>/<var
data-bs-toggle="tooltip" data-bs-title="Qualität der Rückgabe">{quality}</var>.<var
data-bs-toggle="tooltip" data-bs-title="(Datei-)Format der Rückgabe">{format}</var></code>
<ul class="list-group list-group-flush">
<!-- region -->
<li class="list-group-item"><span class="badge bg-dark me-1">region</span>
Auszuwählender,
rechteckiger <strong>Bildbereich</strong> des Vollbildes. Möglich sind:
<table class="table table-bordered table-striped my-2">
<tr>
<th class="string">full<span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 0">0</span></th>
<td>Der gesamte Bildbereich</td>
</tr>
<tr>
<th class="string">square<span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 1">1</span></th>
<td>Der größtmögliche quadratische Bildbereich, der sich aus dem Vollbild
generieren lässt (die Seitenlänge entspricht damit dessen kürzester Seite)
</td>
</tr>
<tr>
<th class="variable">x,y,w,h<span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 1">1</span></th>
<td>Absoluter Bildbereich, definiert durch dessen linken oberen Punkt
(<strong class="variable">x</strong>,<strong class="variable">y</strong>),
Breite (<strong class="variable">w</strong>) und Höhe
(<strong class="variable">h</strong>) in Pixel</td>
</tr>
<tr>
<th class="variable">pct:x,y,w,h<span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 2">2</span></th>
<td>Relativer Bildbereich. Die Angabe <i>pct:50,50,50,50</i> selektiert
demnach das untere rechte Viertel des Vollbildes</td>
</tr>
</table>
<div class="row g-2">
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg"
target="_blank">.../<strong>full</strong>/max/0/default.jpg</a>
</div>
</div>
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/square/max/0/default.jpg" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/square/max/0/default.jpg"
target="_blank">.../<strong>square</strong>/max/0/default.jpg</a>
</div>
</div>
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/1500,1250,300,300/max/0/default.jpg" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/1500,1250,300,300/max/0/default.jpg"
target="_blank">.../<strong>1500,1250,300,300</strong>/max/0/default.jpg</a>
</div>
</div>
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/pct:50,50,10,10/max/0/default.jpg" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/pct:50,50,10,10/max/0/default.jpg"
target="_blank">.../<strong>pct:50,50,10,10</strong>/max/0/default.jpg</a>
</div>
</div>
</div>
</li>
<!-- size -->
<li class="list-group-item"><span class="badge bg-dark me-1">size</span>
<strong>Dimensionen</strong> (<q>Größe</q>), in denen der ausgewählte Bildbereich
(region)
ausgeliefert werden soll. Möglich sind:
<table class="table table-bordered table-striped my-2">
<tr>
<th class="string">max<span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 0">0</span><svg class="iconSVG"
data-bs-toggle="tooltip" data-bs-html="true"
data-bs-title="In Version 2.0 noch <i>full</i>, in Version 2.1 <i>full</i> ODER <i>max</i>, in Version 3 ist NUR noch <i>max</i> zulässig. Hintergrund dürften die in Version 2.1 eingeführten Maximaldimensionen (<i>maxWidth</i>, <i>maxHeight</i>, <i>maxArea</i>) sein">
<use xlink:href="#warningSVG" />
</svg></th>
<td>Der ausgewählte Bildbereich in der größtmöglichen (bzw. -zugelassenen)
Auflösung
</td>
</tr>
<tr>
<th class="variable">w,h<span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 1">1</span></th>
<td>Exakte Breite <strong class="variable">w</strong> und Höhe <strong
class="variable">h</strong> in Pixel. Kann zu Verzerrungen führen</td>
</tr>
<tr>
<th class="variable">w,<span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 1">1</span></th>
<td>Die Auswahl wird auf eine Breite von <strong class="variable">w</strong>
Pixel proportional verkleinert</td>
</tr>
<tr>
<th class="variable">,h<span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 1">1</span></th>
<td>Die Auswahl wird auf eine Höhe von <strong class="variable">h</strong> Pixel
proportional verkleinert</td>
</tr>
<tr>
<th class="variable">!w,h<span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 2">2</span></th>
<td>Die Auswahl wird genau so weit proportional (<strong>!</strong>)
verkleinert, dass sie gerade noch in ein <q>imaginäres Fenster</q> der
Breite <strong class="variable">w</strong> Pixel und Höhe <strong
class="variable">h</strong> Pixel passt</td>
</tr>
<tr>
<th class="variable">pct:n<span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 2">2</span></th>
<td>Länge und Breite der Rückgabe entsprechen <strong
class="variable">n</strong> Prozent (pct) der Auswahl</td>
</tr>
</table>
<div class="row g-2">
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/300,300/0/default.jpg" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/300,300/0/default.jpg"
target="_blank">.../full/<strong>300,300</strong>/0/default.jpg</a>
</div>
</div>
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/300,/0/default.jpg" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/300,/0/default.jpg"
target="_blank">.../full/<strong>300,</strong>/0/default.jpg</a>
</div>
</div>
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/!300,300/0/default.jpg" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/!300,300/0/default.jpg"
target="_blank">.../full/<strong>!300,300</strong>/0/default.jpg</a>
</div>
</div>
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/pct:10/0/default.jpg" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/pct:10,/0/default.jpg"
target="_blank">.../full/<strong>pct:10</strong>/0/default.jpg</a>
</div>
</div>
</div>
<p><svg class="iconSVG" data-bs-toggle="tooltip" data-bs-title="Neu in Version 3">
<use xlink:href="#warningSVG" />
</svg><strong>Upscaling:</strong> Wird einem der obigen Dimensionsangaben ein
Zirkumflex (<i>^</i>) vorangestellt (also <i>^max</i>, <strong
class="variable">^!w,h</strong>, <strong class="variable">^,h</strong> etc.),
versucht der IIIF Server den gewählten Bildausschnitt auf die gewünschten
Dimensionen (nötigenfalls) hochzuskalieren. Das funktioniert jedoch nur dann, wenn
der Server das Hochskalieren auch aktiv unterstützt.
</p>
<div class="row g-2">
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/1500,1250,300,300/^!400,400/0/default.jpg" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/1500,1250,300,300/^!400,400/0/default.jpg"
target="_blank">.../1500,1250,300,300/<strong>^!400,400</strong>/0/default.jpg</a>
</div>
</div>
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/1500,1250,300,300/^pct:200/0/default.jpg" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/1500,1250,300,300/^pct:200/0/default.jpg"
target="_blank">.../1500,1250,300,300/<strong>^pct:200</strong>/0/default.jpg</a>
</div>
</div>
</div>
</li>
<li class="list-group-item"><span
class="badge bg-dark me-1">rotation</span><strong>Ausrichtung</strong> der Rückgabe
Möglich sind:
<table class="table table-bordered table-striped my-2">
<tr>
<th class="variable">n<span class="cl badge" data-bs-toggle="tooltip"
data-bs-html="true"
data-bs-title="<i>0</i> (keine Rotation) funktioniert bei allen Ressourcen (Compliance Level 0).<br/>Level 2 verlangt lediglich orthogonale (<i>90</i>, <i>180</i>, <i>270</i>) Rotation .<br/>Rotationen um beliebige Winkel (<i>rotationArbitrary</i>) sind auf keinem Level verpflichtend, können aber als <i>extraFeatures</i> implementiert sein">0/2/-</span>
</th>
<td>Das zurückgegeben Bild ist um <strong class="variable">n</strong>° im
Uhrzeigersinn gedreht</td>
</tr>
<tr>
<th class="variable">!n</th>
<td>Das Bild wird zuerst horizontal gespiegelt und dann um <strong
class="variable">n</strong>° gedreht (<i>!0</i> bewirkt daher eine
horizontale Spiegelung ohne Rotation)</td>
</tr>
</table>
<!-- ToDo: Die Ressourcen in https://image-api.iiif.io/api/image/3.0/example/reference unterstützen mirroring NICHT, das Beispiel ist daher V2. Finde ich eine andere in V3? -->
<div class="row g-2">
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://ids.lib.harvard.edu/ids/iiif/43182083/full/!300,300/0/default.jpg" />
<a href="https://ids.lib.harvard.edu/ids/iiif/43182083/full/!300,300/0/default.jpg"
target="_blank">.../full/!300,300/<strong>0</strong>/default.jpg</a>
</div>
</div>
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://ids.lib.harvard.edu/ids/iiif/43182083/full/!300,300/!0/default.jpg" />
<a href="https://ids.lib.harvard.edu/ids/iiif/43182083/full/!300,300/!0/default.jpg"
target="_blank">.../full/!300,300/<strong>!0</strong>/default.jpg</a>
</div>
</div>
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://ids.lib.harvard.edu/ids/iiif/43182083/full/!300,300/!332.5/default.jpg" />
<a href="https://ids.lib.harvard.edu/ids/iiif/43182083/full/!300,300/!332.5/default.jpg"
target="_blank">.../full/!300,300/<strong>!332.5</strong>/default.jpg</a>
</div>
</div>
</div>
</li>
<li class="list-group-item"><span class="badge bg-dark me-1">quality</span>
<q><strong>Qualität</strong></q> der Rückgabe. Möglich sind:
<table class="table table-bordered table-striped my-2">
<tr>
<th class="string"><i>default</i><span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 0">0</span></th>
<td>Die vom Server voreingestellte Bildqualität (entspricht zumeist
<i>color</i>)
</tr>
<tr>
<th class="string"><i>color</i><span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 2 (wenn anwendbar)">2</span></th>
<td>Alle (vorhandenen) Farbinformationen</td>
</tr>
<tr>
<th class="string"><i>gray</i><span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 2 (wenn anwendbar)">2</span></th>
<td>Schwarzweiß MIT Graustufen (s/w monochrom)</td>
</tr>
<tr>
<th class="string"><i>bitonal</i></th>
<td>Schwarzweiß OHNE Graustufen (s/w bitonal)</td>
</tr>
</table>
</li>
<li class="list-group-item"><span class="badge bg-dark me-1">format</span>
(Datei-)<strong>Format</strong> der Rückgabe. Unterstützt werden:
<table class="table table-bordered table-striped my-2">
<tr>
<th class="string">jpg<span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 0">0</span></th>
<td>image/jpeg</td>
</tr>
<tr>
<th class="string">png<span class="cl badge" data-bs-toggle="tooltip"
data-bs-title="Compliance Level 2">2</span></th>
<td>image/png</td>
</tr>
<tr>
<th class="string">tif</th>
<td>image/tiff</td>
</tr>
<tr>
<th class="string">gif</th>
<td>image/gif</td>
</tr>
<tr>
<th class="string">jp2</th>
<td>image/jp2</td>
</tr>
<tr>
<th class="string">pdf</th>
<td>application/pdf</td>
</tr>
<tr>
<th class="string">webp</th>
<td>image/webp</td>
</tr>
</table>
</li>
</ul>
</div>
<div class="row g-2">
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/pct:10/0/gray.jpg" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/pct:10/0/gray.jpg"
target="_blank">.../full/pct:10/0/<strong>gray</strong>.jpg</a>
</div>
</div>
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/pct:10/0/bitonal.jpg" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/pct:10/0/bitonal.jpg"
target="_blank">.../full/pct:10/0/<strong>bitonal</strong>.jpg</a>
</div>
</div>
<div class="col-xl-3 col-lg-6 p-md-2">
<div class="ire">
<img
src="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/pct:10/0/color.png" />
<a href="https://image-api.iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/pct:10/0/color.png"
target="_blank">.../full/pct:10/0/<strong>color</strong>.<strong>png</strong></a>
</div>
</div>
</div>
</div>
<div id="presentationAPI">
<h1>IIIF Presentation API</h1>
<figure>
<blockquote class="blockquote">
<p>The objective of the <abbr
title="International Image Interoperability Framework">IIIF</abbr> (pronounced
<q>Triple-Eye-Eff</q>) Presentation <abbr
title="Application Programming Interface">API</abbr> is to provide the information
necessary to allow a rich, online viewing environment for compound digital objects to be
presented to a human user, often in conjunction with the <a
href="https://iiif.io/api/image/3.0/" target="_blank">IIIF Image API</a>.
</p>
</blockquote>
<figcaption class="blockquote-footer">
<a href="https://iiif.io/api/presentation/3.0/#11-objectives-and-scope"
target="_blank">iiif.io</a>
</figcaption>
</figure>
<p>Die <a href="https://iiif.io/api/presentation/3.0/" target="_blank">IIIF Presentation API</a>
dient also - hauptsächlich - der Repräsentation von <q>zusammengesetzten</q> (<i>compound</i>)
(Bild-)Objekten. Darunter versteht man - grob verallgemeinert - Bild<q>sammlungen</q> bzw. - im
Bezug auf IIIF - <strong><q>Arrangements</q> mehrerer bestehender Einzelressourcen</strong>,
wobei die Kuratierung dieser Ressourcen keinen inhaltlichen Regeln unterliegt (so kann es
beispielsweise sinnvoll sein, die Vorder- und Rückseite einer Postkarte oder Fotografien zu
einem bestimmten Thema als zusammengehörig anzusehen, aber auch völlig willkürlichen
Zusammenstellungen von Ressourcen setzt das Framework keine Grenzen). Ein eigentlich sehr
spezieller, besonders in Hinblick auf Digitale Editionen jedoch wesentlicher Anwendungsfall
hierfür ist die Darstellung gebundener Texte als Arrangements bzw. <strong>Abfolgen</strong>
(<i>sequences</i>) von Digitalisaten einzelner Seiten. </p>
<p>Die <q>Steuerung</q> dieser Arrangements übernehmen bei IIIF abermals Dateien im <abbr
title="JavaScript Object Notation for Linked Data">JSON-LD</abbr> Format, sogenannte
<strong><q>Strukturressourcen</q></strong> (<i>structural resources</i>):
</p>
<ul class="list-group list-group-flush">
<li class="list-group-item"><strong>Manifeste</strong> beschreiben <strong>Struktur und
Metadaten eines digitalen (<i>compound-</i>) Objekts</strong></li>
<li class="list-group-item">Mit <strong>Collections</strong> lassen sich wiederum
<strong>Strukturen aus mehreren Manifesten </strong> (und/oder weiteren, untergeordneten
Collections) beschreiben
</li>
</ul>
<div id="presentationAPI_manifests">
<h2>Manifeste</h2>
<figure>
<blockquote class="blockquote">
<p>The Manifest resource typically represents a single object and any intellectual work
or works embodied within that object. In particular it includes descriptive, rights
and linking information for the object. The Manifest embeds the Canvases that should
be rendered as views of the object and contains sufficient information for the
client to initialize itself and begin to display something quickly to the user. </p>
</blockquote>
<figcaption class="blockquote-footer">
<a href="https://iiif.io/api/presentation/3.0/#52-manifest" target="_blank">iiif.io</a>
</figcaption>
</figure>
<p>Ein <strong>Manifest</strong> ist also - wie das bereits beschriebenen <i>image information
document</i> - eine JSON-Datei. Als Einstieg, hier ein - stark gekürztes - Beispiel aus
einem laufenden Projekt:
</p>
<code>{
"@context": "http://iiif.io/api/presentation/3/context.json",
"id": "https://www.ditah.at/iiif/example_manifest.json",
"type": "Manifest",
"label": {
"none": ["Compendium Historiae in Cambridge, Corpus Christi College, MS 29, p1-3"]
},
"metadata": [
{
"label": {
"de": ["Autor"],
"none": ["Author"]
},
"value": {
"de": ["Peter von Poitiers"],
"none": ["Peter of Poitiers"]
}
},
{
"label": {
"de": ["Datierung"],
"none": ["Date"]
},
"value": {
"none": ["1200 - 1225"]
}
}
],
"summary": {
"de": ["Ein Manifest-Beispiel aus dem Compendium Historiae-Projekt"],
"none": ["A manifest example from the Compendium Historiae project"]
},
"requiredStatement": {
"label": {
"de": ["Bildrechte"],
"none": ["Image rights"]
},
"value": {
"none": ["Corpus Christi College, Cambridge"]
}
},
"rights": "http://creativecommons.org/licenses/by/4.0/",
"provider": [
{
"id": "https://www.ditah.at/",
"type": "Agent",
"label": {
"de": ["Digitale Transformation der Österreichischen Geisteswissenschaften"],
"none": ["Digital Transformation of Austrian Humanities"]
},
"logo": [
{
"id": "https://www.ditah.at/images/DiTAH_Logo_blau-01.svg",
"type": "Image",
"format": "image/svg+xml"
}
]
}
],
"items": [
{
"id": "https://www.ditah.at/iiif/example_manifest/canvas1",
"type": "Canvas",
"label": "f. vir",
"height": 8586,
"width": 5962,
"items": [
{
"id": "https://www.ditah.at/iiif/example_manifest/canvas1/annoPage1",
"type": "AnnotationPage",
"items": [
{
"id": "https://www.ditah.at/iiif/example_manifest/canvas1/annoPage1/anno1",
"type": "Annotation",
"motivation": "painting",
"target": "https://www.ditah.at/iiif/example_manifest/canvas1",
"body": {
"id": "https://www.ditah.at/iiif/example_manifest/canvas1/annoPage1/anno1/image1",
"type": "Image",
"service": {
"id": "https://stacks.stanford.edu/image/iiif/xj710dc7305%252F029_vi_R_TC_46",
"profile": "level2",
"type": "ImageService2"
}
}
}
]
}
]
},
{
"id": "https://www.ditah.at/iiif/example_manifest/canvas2",
"type": "Canvas",
"label": "f. viv",
"height": 8634,
"width": 6010,
"items": [
{
"id": "https://www.ditah.at/iiif/example_manifest/canvas2/annoPage1",
"type": "AnnotationPage",
"items": [
{
"id": "https://www.ditah.at/iiif/example_manifest/canvas2/annoPage1/anno1",
"type": "Annotation",
"motivation": "painting",
"target": "https://www.ditah.at/iiif/example_manifest/canvas2",
"body": {
"id": "https://www.ditah.at/iiif/example_manifest/canvas2/annoPage1/anno1/image1",
"type": "Image",
"format": "image/jpeg",
"height": 8634,
"width": 6010,
"service": {
"id": "https://stacks.stanford.edu/image/iiif/xj710dc7305%252F029_vi_V_TC_46",
"profile": "level2",
"type": "ImageService2"
}
}
}
]
}
]
},
{
"id": "https://www.ditah.at/iiif/example_manifest/canvas3",
"type": "Canvas",
"label": "f. viir",
"height": 8575,
"width": 5938,