Presentation APIの役割と概要 IIIF Image APIが「画像そのものの配信」を担うのに対し、IIIF Presentation APIは「画像をどのように提示するか」を記述するためのAPIです。書籍であれば、どのページがどの順番で並ぶのか、各ページにどのようなメタデータが紐づくのか、目次構造はどうなっているのか、といった「構造的な情報」をJSON-LD形式で表現します。
Presentation APIが提供する情報は、ビューア(MiradorやUniversal Viewerなど)が画像を正しく表示するために不可欠です。例えば、巻物のように右から左へ読む資料であればviewingDirectionをright-to-leftに設定し、複数ページからなる書籍であれば各ページをCanvas(キャンバス)として定義します。このように、Presentation APIは画像の「見せ方」を機関やプロジェクトを超えて標準化する役割を持っています。
Presentation APIの仕様はJSON-LDで記述されるため、Linked Dataとしての特性も備えています。各リソースにはURIが割り当てられ、他の機関が公開するリソースとも相互参照が可能です。
Manifestの構造 Presentation APIの中心となるリソースがManifest(マニフェスト)です。マニフェストは1つのデジタルオブジェクト(書籍1冊、絵巻1巻など)を記述するJSON-LDファイルであり、以下のような階層構造を持ちます。
Manifest > Canvas > Annotation
Manifest: デジタルオブジェクト全体を表すトップレベルのリソース。ラベル、メタデータ、権利情報、表示方向などを含む Canvas: 個々のページや画面に相当する仮想的な空間。幅と高さを持ち、ここに画像やテキストなどのコンテンツが配置される Annotation: Canvas上に配置されるコンテンツ。画像の場合はmotivationがpaintingのAnnotationとして記述される v3における基本的なManifestの構造は以下のようになります。
{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://example.org/iiif/manifest.json", "type": "Manifest", "label": { "ja": ["資料タイトル"] }, "items": [ { "id": "https://example.org/iiif/canvas/p1", "type": "Canvas", "width": 6642, "height": 4990, "items": [ { "id": "https://example.org/iiif/canvas/p1/page", "type": "AnnotationPage", "items": [ { "id": "https://example.org/iiif/canvas/p1/page/imageanno", "type": "Annotation", "motivation": "painting", "body": { "id": "https://example.org/iiif/image/full/max/0/default.jpg", "type": "Image", "format": "image/jpeg", "service": [ { "id": "https://example.org/iiif/image", "type": "ImageService2", "profile": "level2" } ], "width": 6642, "height": 4990 }, "target": "https://example.org/iiif/canvas/p1" } ] } ] } ] } 注目すべき点として、Canvas自体は「仮想的な空間」であり、画像はpaintingモチベーションのAnnotationとしてCanvas上に配置されます。この設計により、1つのCanvas上に複数の画像を重ねたり、テキストや音声などのメディアを組み合わせたりすることが可能になっています。
...