IIIF画像API 2.1
このドキュメントのステータス
本バージョン: 2.1.0
最新安定版: 2.1.0
旧バージョン: 2.0
編集者:
- Michael Appleby , Yale University
- Tom Crane , Digirati
- Robert Sanderson , Stanford University
- Jon Stroop , Princeton University Library
- Simeon Warner , Cornell University
Copyright © 2012-2016 Editors and contributors. Published by the IIIF Consortium under the CC-BY license, see disclaimer.
目次
- 1. はじめに
- 2. URI構文
- 3. 識別子
- 4. 画像リクエスト・パラメータ
- 5. 画像情報
- 6. 準拠レベル
- 7. サーバー応答
- 8. 認証
- 9. URIのエンコーディングとデコーディング
- 10. セキュリティに関する留意点
- 11. 付録
1. はじめに
このドキュメントは、IIIF(International Image Interoperability Framework、「トリプル・アイ・エフ」と発音)コンソーシアムが定める画像配信APIについて記述しています。IIIF画像APIは、標準的なHTTPやHTTPSのリクエストに応答して画像を返すウェブ・サービスの仕様を定めています。URIによって、リクエストする画像の領域、サイズ、回転、品質特性およびフォーマットを指定できます。また、クライアント・アプリケーションをサポートするために、画像に関する基本的な技術情報をリクエストするようにURIを構成することもできます。このAPIは、文化遺産機関が管理しているデジタル画像リポジトリの画像資源を体系的に再利用可能とするために考案したものですが、いかなる画像リポジトリやサービスにも採用でき、これを利用することで、適切に構成されたURIへの応答として静止画像を読み出すことができます。
フィードバックはiiif-discuss@googlegroups.comにお送りください。
1.1. 対象者と範囲
このドキュメントは、とりわけ文化遺産機関、博物館、図書館、公文書館のデジタル画像を共有、利用するためのアプリケーションを構築する設計者と開発者を対象としています。ターゲットとしているアプリケーションには次のものが含まれます。
- デジタル画像リポジトリおよび分散型コンテンツ・ネットワーク
- パン/ズーム・ビューア、ブック・リーダーなどの、画像に重点を置いたウェブ・アプリケーション
- 分析や比較のために画像コンテンツを利用するクライアント・アプリケーション
この仕様で取り上げるのは、クライアントによる画像リクエストであり、サーバーによる画像管理ではありません。この仕様は、特定のURI構文で提供されるリクエストに対する応答方法についてはカバーしていますが、回転アルゴリズム、トランスコーディング、カラー・マネジメント、圧縮などの実装方法や、既定の構文に準拠していないURIに対する応答方法についてはカバーしていません。これにより、一般的なケースにおける相互運用性をサポートしつつ、特定の制約やコミュニティー固有の慣習が存在する領域においても柔軟な実装が可能となります。
1.2. 用語
このドキュメントの「しなければならない(must)」、「してはならない(must not)」、「必須である/要求される(required)」、「することになる(shall)」、「することはない(shall not)」、「すべきである/する必要がある(should)」、「すべきでない/する必要がない(should not)」、「推奨される(recommended)」、「選択できる/任意である(optional)」というキーワードは、RFC 2119で記述されているように解釈されるべきです。
2. URI構文
IIIF画像APIは、次の2つの方法で呼び出すことができます。
- 画像(画像の一部も可)をリクエストする。
- 特性、入手可能な機能、および関連するサービスを含む、画像に関する情報をリクエストする。
どちらも、リクエスト情報を、クエリのパラメータとしてではなく、URIのパス・セグメントで伝えます。これにより、サーバーや標準的なウェブ・キャッシュ基盤が応答をより容易にキャッシュできるようになります。マッチング用のディレクトリ構造内の事前処理済みファイルを用いた最小限の実装も可能です。
リクエストには共通するパラメータが4つあり、他のIIIF仕様もあります。
名前 | 説明 |
---|---|
scheme | サービスの呼び出しにおけるHTTPまたはHTTPSのプロトコルの使用を示します。 |
server | サービスが存在するホスト・サーバー。パラメータにはポート番号を含むこともできます。 |
prefix | サービスに対するホスト・サーバー上のパス。この接頭辞はオプションですが、ホスト・サーバーが複数のサービスをサポートしている場合に有用でありえます。接頭辞には、スラッシュで区切った複数のパス・セグメントを含むことができますが(may)、他のすべての特殊文字はエンコードしなければなりません(must)。詳細は、URIのエンコーディングとデコーディングを参照してください。 |
identifier | リクエストされる画像の識別子。これは、ARK、URN、ファイル名、その他の識別子でありえます。特殊文字にはURIエンコードを行わなければなりません(must)。 |
これらのパラメータの組み合わせにより、画像の基底URIが形成され、基礎となる画像コンテンツが識別されます。これは次のURIテンプレート(RFC6570)に従って構成されます。
{scheme}://{server}{/prefix}/{identifier}
基底URIを逆参照した時には、その相互作用により画像情報ドキュメントが得られるべきです(should)。応答は、303ステータスによる画像情報ドキュメントのURIへのリダイレクションであることが推奨されます(recommended)。実装では、HTTPリクエストのヘッダーとメソッドに応答して、基底URIに対して、この仕様の範囲を超える他の挙動を示すことも可能です(may)。
拡張の余地を残すために、この仕様では、基底URIまたは下記のURI構文のいずれにも適合しないリクエストを受け取った時のサーバーの挙動は定義していません。
2.1. 画像リクエストURI構文
画像リクエスト用のIIIF画像APIのURIは、次のURIテンプレートに準拠していなければなりません(must)。
{scheme}://{server}{/prefix}/{identifier}/{region}/{size}/{rotation}/{quality}.{format}
例えば、次のとおりです。
http://www.example.org/image-service/abcd1234/full/full/0/default.jpg
画像リクエストURIのパラメータには、region(領域)、size(サイズ)、rotation(回転)、quality(品質)、format(フォーマット)があり、これらによって、返される画像の特性が定まります。これらに関する詳細は、画像リクエスト・パラメータで説明しています。
2.2. 画像情報リクエストURI構文
画像情報リクエスト用のURIは、次のURIテンプレートに準拠していなければなりません(must)。
{scheme}://{server}{/prefix}/{identifier}/info.json
例えば、次のとおりです。
http://www.example.org/image-service/abcd1234/info.json
情報リクエストのコンポーネントであるscheme(スキーム)、server(サーバー)、prefix(接頭辞)、identifier(識別子)は、画像情報ドキュメントに記述する画像コンテンツに関する上記の画像リクエストと同じでなければなりません(must)。画像情報ドキュメントの詳細は、画像情報の項で説明しています。
3. 識別子
APIは、サーバーが使用またはサポートする識別子の形式に制限を設けません。クライアントの予測不可能な挙動を避けるため、すべての特殊文字(例えば、?や#)にURIエンコードを行わなければなりません(must)。URI構文は、スラッシュ(/)という区切り文字に依存しているため、識別子内のあらゆるスラッシュはURIエンコード(「パーセント・エンコード」とも呼ばれる)されていなければなりません(must)。URIのエンコーディングとデコーディングにおけるさらなる議論を参照してください。
4. 画像リクエスト・パラメータ
IIIF画像APIに準拠したURIを構築するためには、下記のすべてのパラメータが必要です。URI内のパラメータの順序は、下記の順序でなければなりません(must)。パラメータの順序は、サービスが画像コンテンツを処理すべき操作順序のニーモニックでもあります。したがって、リクエストされた画像コンテンツは、最初にフル画像領域として抽出され、その後、リクエストされたサイズへの拡大・縮小、反転および/または回転が行われ、最後に色品質とフォーマットに変換されます。その結果の画像コンテンツが、URIに対する表現として返されます。画像と領域の大きさのピクセル数は、常に整数数で表されます。計算途中には浮動小数点数を使用でき、端数の処理方法は実装固有です。一部のパラメータ(特にパーセンテージ)は浮動小数点数で指定できます。これらは最大10桁の10進数で、10進数と、1.0未満の場合には0で始まる「.」が付いた数字のみであるべきです。
4.1. 領域
region(領域)パラメータは、フル画像のうち、返される矩形の部分を定義します。領域は、ピクセル座標、パーセンテージ、または画像全体を返すべきと指定する「full」という値で指定できます。
形式 | 説明 |
---|---|
full |
切り取りが行われていないフル画像が返されます。 |
square |
領域は、幅と高さの両方がフル画像の短い方の辺の長さと同じである領域と定義されます。領域は、サーバーの裁量により、画像コンテンツの長い方の辺のどこにでも置くことができますが、多くの場合、中央に配置するのがデフォルトとして妥当です。 |
x,y,w,h | 返すべきフル画像の領域を絶対ピクセル値で指定します。xの値は、水平軸の0の位置からのピクセル数を表します。yの値は、垂直軸の0の位置からのピクセル数を表します。したがって、0,0というx,yの位置は、画像の一番左上のピクセルです。wは領域の幅を、hは領域の高さをピクセルで表します。 |
pct:x,y,w,h | 返すべき領域を、画像情報ドキュメントで報告されているフル画像の大きさに対するパーセンテージで指定します。したがって、x は、報告されている幅のパーセンテージとして計算された、水平軸上の0の位置からのピクセル数を表します。w は、同じく報告されている幅のパーセンテージとして計算された領域の幅を表します。それぞれyとhにも同様にあてはまります。これらは浮動小数点数でありえます。 |
画像情報ドキュメントで報告されている大きさを超える領域がリクエストされた場合には、サービスは、空白を追加するのではなく、画像の端で切り取った画像を返すべきです(should)。
リクエストされた領域の高さや幅が0であったり、領域が報告されている大きさの境界から完全に外れていれば、サーバーは400のステータス・コードを返すべきです(should)。
例:
1 region=full
|
2 region=square
|
3 region=125,15,120,140
|
4 region=pct:41.6,7.5,40,70
|
5 region=125,15,200,200
返される画像が175,185ピクセルであることに注意 |
6 region=pct:41.6,7.5,66.6,100
返される画像が175,185ピクセルであることに注意 |
4.2. サイズ
size(サイズ)パラメータは、抽出される領域が拡大・縮小されるべき大きさを決定します。
形式 | 説明 |
---|---|
full |
画像または領域は、拡大・縮小されず、フル・サイズで返されます。非推奨に関する注意に留意。 |
max |
画像または領域は、プロファイル記述のmaxWidth 、maxHeight 、maxArea で示されているとおり、利用可能な最大サイズで返されます。これらのプロパティーがまったく提供されていない場合は、full と同じです。 |
w, | 画像または領域は、幅がwと完全に等しくなるように拡大・縮小されるべきで、高さは、抽出される領域の縦横比を維持して計算された値となります。 |
,h | 画像または領域は、高さがhと完全に等しくなるように拡大・縮小されるべきで、幅は、抽出される領域の縦横比を維持して計算された値となります。 |
pct:n | 返される画像の幅と高さは、抽出される領域の幅と高さのn%に拡大・縮小されます。返される画像の縦横比は、抽出される領域と同じです。 |
w,h | 返される画像の幅と高さは、wとhのとおりになります。返される画像の縦横比が抽出される領域と異なることがありえ(may)、その結果、歪んだ画像となります。 |
!w,h | 画像コンテンツは、結果の幅と高さが、リクエストされた幅と高さよりも小さくまたは同じになるよう、最適な大きさに拡大・縮小されます。正確な拡大・縮小は、画質やシステム・パフォーマンスなどの特性に基づき、サービス・プロバイダーが決定できます(may)。返される画像コンテンツの大きさは、抽出される領域の縦横比を維持するように算出されます。 |
結果として得られる高さや幅が0であれば、サーバーは400(不正リクエスト)のステータス・コードを返すべきです(should)。
画像サーバーは、抽出される領域のフル・サイズを超える拡大・縮小をサポートできます(may)。
非推奨に関する注意
max
の方が望ましいと考え、sizeのfull
というキーワードは、バージョン3.0で置き換えられる予定です。iiif-discussやGithub issueでのフィードバックを歓迎します。
例:
1 size=full
|
1 size=full
画像が200ピクセルの |
2 size=150,
|
3 size=,150
|
4 size=pct:50
|
5 size=225,100
|
6 size=!225,100
返される画像が150,100ピクセルであることに注意 |
4.3. 回転
rotation(回転)パラメータは、反転と回転を規定します。先頭の感嘆符(「!」)は、回転が適用される前に垂直軸に基づいて画像が反転されるべきであることを示します。数値は、時計回りの回転角度を表し、0から360までの浮動小数点数でありえます。
形式 | 説明 |
---|---|
n | 0から360までの時計回りの回転角度。 |
!n | 上記のとおり、画像は反転後に回転されるべきです。 |
範囲外であったり、サポートされていない回転の値は、400のステータス・コードになるべきです(should)。
ほとんどの場合、回転によって、返される画像の幅と高さが変わります。サービスは、返される画像ファイルの大きさがサイズ・パラメータによる指定と異なっていても、領域とサイズのパラメータでリクエストされたすべての画像のコンテンツが含まれている画像を返すべきです(should)。画像コンテンツは、回転の結果として拡大・縮小されるべきではなく(should not)、回転した画像コンテンツの角と返される画像コンテンツのバウンディング・ボックス(bounding box)の間に余分な空間があるべき(should)ではありません。
回転角度が90度の倍数でない場合は、クライアントはPNGなどの透過をサポートするフォーマットの画像をリクエストし、サーバーは背景が透明の画像を返すことを推奨します(recommended)。APIには、クライアントが特定の背景色やその他の塗りつぶしパターンをリクエストする機能はありません。
例:
1 rotation=0
|
2 rotation=180
|
3 rotation=90
|
4 rotation=22.5
|
5 rotation=!0
|
6 rotation=!180
|
4.4. 品質
quality(品質)パラメータは、カラー、グレースケール、黒白のいずれで画像が配信されるかを決定します。
品質 | 返されるパラメータ |
---|---|
color |
画像はフルカラーで返されます。 |
gray |
画像はグレースケールで返され、個々のピクセルは黒、白、またはその間のグレーです。 |
bitonal |
返される画像は2値で、個々のピクセルは黒か白です。 |
default |
画像は、その画像に対するサーバーのデフォルト品質(例えば、カラー、グレーまたは2値)で返されます。 |
default
の品質は、コレクションの個々の画像の品質が不明である準拠レベル0の実装をサポートするために存在しています。これは、どの品質が利用できるのかを知るためにしか役立たない予備的な画像情報リクエストを避けられるという点で、クライアントが品質以外のリクエストのパラメータ値をすべて知っている場合に利便性を提供することにもなります(例えば、サムネイルをリクエストするために、.../full/120,/90/{quality}.png
)。
フォーマットの値がサポートされていなければ、400のステータス・コードになるべきです(should)。
例:
1 quality=default
|
2 quality=color
|
3 quality=gray
|
4 quality=bitonal
|
4.5. フォーマット
返される画像フォーマットは、URI末尾の拡張子として表されます。
拡張子 | MIMEタイプ |
---|---|
jpg |
image/jpeg |
tif |
image/tiff |
png |
image/png |
gif |
image/gif |
jp2 |
image/jp2 |
pdf |
application/pdf |
webp |
image/webp |
サポートされていないフォーマットの値は、400のステータス・コードになるべきです(should)。
例:
.../full/full/0/default.jpg
.../full/full/0/default.png
.../full/full/0/default.tif
4.6. 実装の順序
URIのパラメータの順序は、フル画像コンテンツに画像操作が行われる順序のニーモニックです。同じパラメータを異なる順序で適用すると異なる画像が配信されることが多いため、サービスを実施する際に、これを考慮することは重要です。サービスを呼び出すアプリケーションが、予期するアウトプットを確実に受け取るためには、順序は極めて重要です。
パラメータは、画像操作の順序が次のとおりであるものとして解釈すべきです。
Region THEN Size THEN Rotation THEN Quality THEN Format
(Region その次が Size その次が Rotation その次が Quality その次が Format)
回転パラメータに反転(「!」)が含まれていれば、回転の前に反転が適用されます。
1 region=125,15,120,140 size=90, rotation=!345 quality=gray
|
4.7. 正規URI構文
異なるパラメータの組み合わせを用いて同じ画像をリクエストできます。クライアントが使いやすい形式でリクエストを表現できれば便利ですが、正規のURI構文の方が望ましい理由がいくつかあります。
- 固定的な、ファイル―システム・ベースの実装が可能となり、これにはコンテンツを入手できるURIが1つだけ存在する。
- 用いるURIがシステムとセッションとの間で同じであれば、クライアントとサーバー側の両方でキャッシュが著しく効率的になる。
- リクエストされた非正規のURI構文から正規の形式を直接用いた正規の構文へのリダイレクトを避けることにより、応答時間を改善できる。
上記の要件をサポートするために、可能であれば、クライアントは次の正規のパラメータ値を用いて画像リクエストURIを構成すべきです(should)。画像サーバーは、クライアントを非正規のURIから正規のURIにリダイレクトさせることができます(may)。
パラメータ | 正規の値 |
---|---|
region | 画像全体をリクエストする場合は「full」(正方形の画像の「正方形」の領域を含む)、 そうではない場合は x,y,w,h という構文。 |
size | デフォルト・サイズをリクエストする場合は「full」、 画像の縦横比を維持して拡大・縮小すべき場合は、 w, という構文、そして、サイズが明確で、縦横比を変更する場合は、 w,h という構文。注: サイズの「full」というキーワードはバージョン3.0で「max」に置き換える予定です。詳細はサイズの非推奨に関する注意を参照してください。 |
rotation | 画像を反転させる場合は「!」で、可能であれば、その後に整数を置き、10進数の値は末尾の0を削除し、値が1未満の場合は先頭の0を削除します。 |
quality | サーバーのデフォルト品質をリクエストする場合は「default」、 そうではない場合は品質を文字列で。 |
format | 明確なフォーマットの文字列は常に必要。 |
クライアントが画像をリクエストした時には、サーバーは、そのリクエストに対する正規URIを示すリンク・ヘッダーを応答に追加できます(may)。
Link: <http://iiif.example.com/server/full/400,/0/default.jpg>;rel="canonical"
サーバーはこのリンク・ヘッダーを画像情報の応答に含めることができますが(may)、読み出されるJSON表現にこれが含まれているため、その必要はありません。
5. 画像情報
サーバーは画像情報に対するリクエストをサポートしなければなりません(must)。応答には、画像に関する技術プロパティーが含まれ、権利とライセンスのプロパティー、また、関連するサービスを含むこともできます。
5.1. 画像情報リクエスト
情報に対するリクエストは、次のURIテンプレートに準拠していなければなりません(must)。
{scheme}://{server}{/prefix}/{identifier}/info.json
応答の構文はJSON-LDです。応答のコンテンツ・タイプは「application/json」(通常のJSON)か、
Content-Type: application/json
「application/ld+json」(JSON-LD)でなければなりません(must)。
Content-Type: application/ld+json
クライアントが明確にJSON-LDコンテンツ・タイプを望んでいる場合は、Acceptヘッダーでそれを指定しなければならず(must)、そうでない場合は、サーバーは通常のJSONコンテンツ・タイプを返さなければなりません(must)。
サーバーは、情報リクエストに対する応答において、*
という値で、Access-Control-Allow-Origin
ヘッダーを送るべきです(should)。以下に構文を示しており、CORS仕様で記述しています。様々なサーバーで提供されるウェブ・アプリケーションでJSONの応答を使用できるようにするためには、このヘッダーが必要です。
Access-Control-Allow-Origin: *
これらの挙動を可能とするための秘訣は、Apache HTTPサーバー実装ノートで提供されています。
5.2. 技術プロパティー
技術プロパティー | 必須? | 説明 |
---|---|---|
@context |
必須 | これは、IIIF画像APIのバージョン2.1では、http://iiif.io/api/image/2/context.json というURIでなければなりません。このドキュメントにより、JSON-LDシリアル化を用いて、応答をRDFとして解釈できるようになります。 |
@id |
必須 | スキーム、サーバー、接頭辞、識別子が含まれていて、末尾にスラッシュがない、URI構文で定義されているとおりの画像の基底URI。 |
@type |
オプション | 画像のタイプ。存在している場合は、値はiiif:Image という文字列でなければなりません(must)。 |
protocol |
必須 | ドキュメントが、IIIF画像APIの1つのバージョンである画像サービスを記述したものであると判断するために使用できるhttp://iiif.io/api/image というURI。 |
width |
必須 | フル画像コンテンツの幅のピクセル数。整数で指定します。 |
height |
必須 | フル画像コンテンツの高さのピクセル数。整数で指定します。 |
profile |
必須 | プロファイルのリスト。URIまたはサポートされている機能が記述されているオブジェクトで示されます。リストの最初のエントリーは、準拠レベルURIでなければなりません(must)。 |
sizes |
オプション | サーバーが提供する様々なサイズのフル画像をクライアントがリクエストするためにsize パラメータに用いるべき高さと幅の対。これは、任意のサイズに対するリクエストをサーバーがサポートしていない場合に入手できるサイズをクライアントに知らせるために用いたり、単にこのサイズの画像をリクエストするとより速く応答を得られるかもしれないというヒントとして使用できます。サーバーは、任意の幅と高さをサポートしていなくても、これらのサイズを用いたw,h という構文で構成されるリクエストはサポートしなければなりません(must)。 |
tiles |
オプション | サーバーが効率的に配信する画像領域(タイル)をリクエストするために用いるパラメータの一連の記述。それぞれの記述は、幅、正方形ではないタイルの高さ(オプション)、それらの大きさのタイルを入手できる倍率を示します。 |
sizes
リスト内のオブジェクトは、以下の表のプロパティーを持っています。これらのサイズを用いてリクエストされた画像は、「full」という領域パラメータと「0」という回転率を持っているべきです(should)。サイズは、w,
という正規構文を用いてリクエストすべきです(should)。したがって、「jpg」というフォーマットで「default」という品質を持つ画像の完全なURLは、{scheme}://{server}/{prefix}/{identifier}/full/{width},/0/default.jpg
でしょう。
注意
sizes
リストの仕様と正規URI構文の間には矛盾があります。クライアントは、sizes
のエントリーに基づいて画像リクエストを行う時には、正規URI構文を用いるべきです(should)。最大限の互換性を確保するために、サーバーは、縦横比を維持したsizes
の値に対し、size
パラメータのw,
とw,h
の形式をどちらもサポートすべきです(should)。この矛盾については、この仕様の次のメジャー・バージョンで対応します。
サイズ・オブジェクト・プロパティー | 必須? | 説明 |
---|---|---|
@type |
オプション | オブジェクトのタイプ。存在している場合は、値はiiif:Size という文字列でなければなりません(must)。 |
width |
必須 | リクエストされる画像の幅(ピクセル)。整数で指定します。 |
height |
必須 | リクエストされる画像の高さ(ピクセル)。整数で指定します。 |
tiles
リスト内のオブジェクトは、以下の表のプロパティーを持っています。領域パラメータはwidth
とheight
で記述し、画像URLのサイズ・パラメータにはscaleFactors
を記入すべきです。これに関しては実装ノートで詳細に説明しています。
タイルのwidth
、またはheight
が指定されている時のwidth
とheight
の組み合わせは、tiles
リストのメンバー内で一意でなければなりません(must)。
タイル・オブジェクト・プロパティー | 必須? | 説明 |
---|---|---|
@type |
オプション | タイルのタイプ。存在している場合は、値はiiif:Tile という文字列でなければなりません(must)。 |
scaleFactors |
必須 | 画像の定義済みタイルに対する解像度倍率。フル・サイズの画像を分割するための正の整数で表現されます。例えば、4という倍率は、フル画像の1/4または25%の高さと幅でサービスが画像を効率的に配信できることを示します。特定の倍率の値はtiles リスト内に1度だけ出現すべきです(should)。 |
width |
必須 | リクエストされる定義済みタイルの幅(ピクセル)。整数で指定します。 |
height |
オプション | リクエストされる定義済みタイルの高さ(ピクセル)。整数で指定します。JSONで指定されていない場合は、width と同じデフォルト値になり、その結果、正方形のタイルになります。 |
サーバーは、サポートされている品質とフォーマットのすべての組み合わせに対し、sizes
とtiles
フィールドで指定されているパラメータを持つ画像に対するリクエストをサポートすべきです(should)。
下記は、オプションのsizes
とtiles
のプロパティーを含む、有効な画像情報応答を示しています。
{
"@context" : "http://iiif.io/api/image/2/context.json",
"@id" : "http://www.example.org/image-service/abcd1234/1E34750D-38DB-4825-A38A-B60A345E591C",
"protocol" : "http://iiif.io/api/image",
"width" : 6000,
"height" : 4000,
"sizes" : [
{"width" : 150, "height" : 100},
{"width" : 600, "height" : 400},
{"width" : 3000, "height": 2000}
],
"tiles": [
{"width" : 512, "scaleFactors" : [1,2,4,8,16]}
],
"profile" : [ "http://iiif.io/api/image/2/level2.json" ]
}
5.3. プロファイル記述
画像にサポートされる追加の機能を指定するために、プロファイル・オブジェクトをprofile
リストに追加できます。profile
リスト内のオブジェクトは、以下の表のプロパティーを持っています。プロファイルがURIから逆参照される場合には、@context
、@id
、@type
のプロパティーは必須ですが(required)、これらを画像情報の応答に含めるべきではありません(should not)。
プロファイルプロパティー | 必須? | 説明 |
---|---|---|
@context |
オプション | 「http://iiif.io/api/image/2/context.json」という文字列。これは、プロファイルのURIが逆参照される場合にのみ含まれるべきです。 |
@id |
オプション | プロファイルのURI。 |
@type |
オプション | オブジェクトのタイプ。存在している場合は、値は「iiif:ImageProfile」という文字列でなければなりません(must)。 |
formats |
オプション | 画像に利用できる画像フォーマットのパラメータ値。指定されていない場合は、クライアントは、準拠レベルのドキュメントで宣言されているフォーマットのみを想定すべきです。 |
maxArea |
オプション | この画像でサポートされている最大領域のピクセル値。これより大きい幅*高さの画像サイズに対するリクエストはサポートできません。 |
maxHeight |
オプション | この画像でサポートされている最大の高さのピクセル値。これより大きい高さの画像サイズに対するリクエストはサポートできません。maxWidth が指定されていて、maxHeight が指定されていない場合は、クライアントは、maxHeight = maxWidth であると推測すべきです。 |
maxWidth |
オプション | この画像でサポートされている最大の幅のピクセル値。これより大きい幅の画像サイズに対するリクエストはサポートできません。maxHeight が指定されている場合は、指定しなければなりません(must)。 |
qualities |
オプション | 画像に利用できる画質のパラメータ値。指定されていない場合は、クライアントは、準拠レベルのドキュメントで宣言されている品質のみを想定すべきです。 |
supports |
オプション | 画像に対してサポートされている機能。指定されていない場合は、クライアントは、準拠レベルのドキュメント宣言されている機能のみを想定すべきです。 |
maxWidth
、maxHeight
、maxArea
のパラメータは、画像にサポートされているサイズの限界を画像サーバーが表す方法を提供します。maxWidth
のみ、またはmaxWidth
とmaxHeight
が指定されている場合は、クライアントは、それより大きな長さのリクエストは拒否されると予期すべきです。maxArea
が指定されている場合は、クライアントは、それより大きなピクセル領域のリクエストが拒否されると予期すべきです。maxWidth / maxHeight
とmaxArea
のパラメータは独立しており、サーバーはどちらか一方または両方の限界を実装できます。サーバーは、sizes
またはtiles
のプロパティーで指定されたサイズが、表されているサイズの範囲内にあることを保証しなければなりません(must)。クライアントは、表されているサイズの限界を上回るリクエストを行うべきではありません(should not)。
画像プロファイルのsupportsプロパティーで指定できる機能は次のとおりです。
機能名 | 説明 |
---|---|
baseUriRedirect |
サービスの基底URIにより画像情報ドキュメントにリダイレクトされます。 |
canonicalLinkHeader |
画像の応答で正規の画像URI HTTP linkヘッダーが提供されます。 |
cors |
すべての応答でCORS HTTPヘッダーが提供されます。 |
jsonldMediaType |
JSON-LDがリクエストされた時にJSON-LDメディア・タイプが提供されます。 |
mirroring |
画像が垂直軸で回転し、その結果、コンテンツが左から右へ反転します。 |
profileLinkHeader |
画像の応答でプロファイルHTTP linkヘッダーが提供されます。 |
regionByPct |
パーセンテージで画像の領域をリクエストできます。 |
regionByPx |
ピクセルの大きさで画像の領域をリクエストできます。 |
regionSquare |
幅と高さがフル画像コンテンツのより短い辺の長さと同じである正方形の領域。 |
rotationArbitrary |
90度の倍数以外の度数で画像の回転をリクエストできます。 |
rotationBy90s |
90度の倍数の度数で画像の回転をリクエストできます。 |
sizeAboveFull |
「full」サイズ以上の画像のサイズをリクエストできます。注意を参照。 |
sizeByConfinedWh |
「!w,h」の形式で画像のサイズをリクエストできます。 |
sizeByDistortedWh |
画像を歪めるサイズを含み、「w,h」の形式で画像のサイズをリクエストできます。 |
sizeByH |
「,h」の形式で画像サイズをリクエストできます。 |
sizeByPct |
「pct:n」の形式で画像サイズをリクエストできます。 |
sizeByW |
「w,」の形式で画像サイズをリクエストできます。 |
sizeByWh |
提供されたwとhが縦横比を保持ている場合に、「w,h」の形式で画像サイズをリクエストできます。 |
sizeByWhListed |
下記の非推奨に関する注意を参照。 |
sizeByForcedWh |
下記の非推奨に関する注意を参照。 |
非推奨に関する注意
sizeByWhListed
およびsizeByForcedWh
という機能名の使用は非推奨となりました。これらの名前はバージョン3.0.で削除される予定です。sizeByForcedWh
はバージョン2.0で矛盾して定義されました。また、sizeByWhListed
は、画像情報ドキュメントにサイズを記述することで暗示されるため、名前付き機能としての必要性はありません。
sizeByWh
とsizeByDistortedWh
の機能は、サイズパラメータに対し同じ「w,h」という構文を共有していますが、それらは別個の機能を表します。sizeByWh
はサポートしているけれどもsizeByDistortedWh
はサポートしていないサーバーは、あらゆる拡大・縮小サイズで画像応答を提供しますが(存在していれば、別々のmaxWidth
、maxHeight
、maxArea
、sizeAboveFull
の制約の対象)、それは、結果として得られる画像が元の縦横比を保持している場合に限られます。歪んだ画像に対するリクエストに対する応対は行われません。
sizeByW
もsizeByWh
もサポートしないサーバーは、sizes
プロパティーで記述されている、または、画像情報ドキュメントのtiles
プロパティーで暗示されている画像サイズを提供すれば良いだけであり、それによって、静的なファイル実装が可能となります。
サポートされている機能、フォーマット、品質の集合は、すべての外部プロファイル・ドキュメントで宣言されているものと、組み込みプロファイル・オブジェクトとの和集合です。機能が、組み込みプロファイルのプロファイル・ドキュメントにもsupports
プロパティーにも存在していなければ、クライアントは、その機能はサポートされていないと見なさなければなりません(must)。
formats
、qualities
、supports
のいづれかに、参照されている準拠レベルで規定されている以外の値がなければ、プロパティーは、空リストとして存在するのではなく、応答から削除されるべき(should)です。
プロファイルのsupportsリストにURIを追加して、この仕様で定義されていない機能をカバーすることができます(may)。クライアントは、認識されないURIを無視しなければなりません(must)。
下記のフラグメントは、レベル2の準拠を超える追加のフォーマット、品質、機能に対するサポートを示すプロファイルです。これにはサイズの限界も含まれています。
{
"@context" : "http://iiif.io/api/image/2/context.json",
"@id" : "http://www.example.org/image-service/abcd1234/1E34750D-38DB-4825-A38A-B60A345E591C",
"protocol" : "http://iiif.io/api/image",
//...
"profile" : [
"http://iiif.io/api/image/2/level2.json",
{
"formats" : [ "gif", "pdf" ],
"qualities" : [ "color", "gray" ],
"maxWidth" : 2000,
"supports" : [
"canonicalLinkHeader", "rotationArbitrary", "profileLinkHeader", "http://example.com/feature/"
]
}
]
}
5.4. 権利・ライセンス・プロパティー
attribution
、license
、logo
という権利とライセンスのプロパティーは、プレゼンテーションAPIと同じセマンティクスと要件を持っています。
権利・ライセンス・プロパティー | 必須? | 説明 |
---|---|---|
attribution |
オプション | 画像APIサービスから取得したコンテンツが表示または使用される時に提示されなければならない(must)文章。これには、著作権や所有者のステートメント、または、提供機関のシンプルな謝辞が含まれるかもしれません。プレゼンテーションAPIのプロパティー値内のHTMLマークアップの項で記述しているとおり、値にはシンプルなHTMLを含むことができます(may)。 |
license |
オプション | 画像API サービスから取得したコンテンツの利用にあたってのライセンスまたは権利ステートメントが記述されている、外部の資源へのリンク。 |
logo |
オプション | コンテンツと関係している個人や組織を表す小さな画像。画像APIサービスから取得したコンテンツが表示または使用される時には、ロゴ画像が明示されなければなりません(must)。クライアントは、画像を切り取ったり、回転させたり、その他の方法で歪めたりしてはなりません(must not)。 |
すべての権利およびライセンスのプロパティーは、JSON配列で表された値を複数または1つ持つことができます(may)。
attribution
に複数の値が提供されているようなケースでは、クライアントは、どの値をユーザに表示するかを決めるために、以下のアルゴリズムを用いなければなりません(must)。
- どの値にも言語が関連付けられていない場合は、クライアントはすべての値を表示しなければなりません(must)。
- そうでない場合には、クライアントはユーザの言語プレファレンスの特定を試みるか、それができない場合には、複数のデフォルト言語プレファレンスを用いるべきです。その場合、
- どの値にも言語が関連付けられていない場合は、クライアントは、言語プレファレンスと最も一致する言語に関連付けられているすべての値を表示しなければなりません(must)。
- すべての値に言語が関連付けられていて、どれも言語プレファレンスと一致しない場合は、クライアントは言語を選択し、その言語と関連付けられているすべての値を表示しなければなりません(must)。
- 一部の値には言語が関連付けられているものの、どれも言語プレファレンスと一致しない場合は、クライアントは、関連付けられている言語がない値をすべて表示しなければなりません(must)。
logo
プロパティーの値は、画像のURLが含まれている文字列、または、ロゴ画像とロゴに対するIIIF画像APIサービスの両方のURIを示すJSONオブジェクトでありえます。可能ではあるものの、IIIFサービスのロゴ自身がロゴを持たないことが推奨されます(recommended)。ロゴを持つロゴに遭遇したクライアントは、無限である可能性がある集合を表示する必要はありません。
画像APIとプレゼンテーションAPIの両方でattributionやlogoが表されている場合は、それらが同一のものでない限り、クライアントはその両方を表示しなければなりません(must)。
下記は、これらのそれぞれのプロパティーのシンプルな使用例です。
{
"@context" : "http://iiif.io/api/image/2/context.json",
"@id" : "http://www.example.org/image-service/abcd1234/1E34750D-38DB-4825-A38A-B60A345E591C",
"protocol" : "http://iiif.io/api/image",
// ...
"attribution" : "Provided by Example Organization",
"logo" : "http://example.org/images/logo.png",
"license" : "http://example.org/rights/license1.html"
// ...
}
完全な応答の例で、より複雑な例を提供しています。
5.5. 関連サービス
プロパティー | 必須? | 説明 |
---|---|---|
service |
オプション | service プロパティーは、例えば、認証サービスへのリンクなどの、画像記述に含まれている追加情報の手掛かりを提供します。値はオブジェクトまたはオブジェクトのリストでありえます。 |
画像と関連付けられたサービスが1つ以上存在できます(may)。詳細についてはサービス・プロファイルの付録を参照してください。
下記は、画像にアクセスするためにユーザが通過しなければならない認証システムのログイン・ページと連携するためのservice
の使用例です。詳細については、認証を参照してください。
{
"@context" : "http://iiif.io/api/image/2/context.json",
"@id" : "http://www.example.org/image-service/abcd1234/1E34750D-38DB-4825-A38A-B60A345E591C",
"protocol" : "http://iiif.io/api/image",
// ...
"service": {
"@context" : "http://iiif.io/api/auth/0/context.json",
"@id" : "http://www.example.org/auth/login.html",
"profile": "http://iiif.io/api/auth/0/login"
}
}
完全な応答の例で、より複雑な例を提供しています。
5.6. 完全な応答
下記は、すべての必須とオプションの画像情報プロパティーが含まれている応答を示しています。
{
"@context" : "http://iiif.io/api/image/2/context.json",
"@id" : "http://www.example.org/image-service/abcd1234/1E34750D-38DB-4825-A38A-B60A345E591C",
"protocol" : "http://iiif.io/api/image",
"width" : 6000,
"height" : 4000,
"sizes" : [
{"width" : 150, "height" : 100},
{"width" : 600, "height" : 400},
{"width" : 3000, "height": 2000}
],
"tiles": [
{"width" : 512, "scaleFactors" : [1,2,4]},
{"width" : 1024, "height" : 2048, "scaleFactors" : [8,16]}
],
"attribution" : [
{
"@value" : "<span>Provided by Example Organization</span>",
"@language" : "en"
},{
"@value" : "<span>Darparwyd gan Enghraifft Sefydliad</span>",
"@language" : "cy"
}
],
"logo" : {
"@id" : "http://example.org/image-service/logo/full/200,/0/default.png",
"service" : {
"@context" : "http://iiif.io/api/image/2/context.json",
"@id" : "http://example.org/image-service/logo",
"profile" : "http://iiif.io/api/image/2/level2.json"
}
},
"license" : [
"http://example.org/rights/license1.html",
"https://creativecommons.org/licenses/by/4.0/"
],
"profile" : [
"http://iiif.io/api/image/2/level2.json",
{
"formats" : [ "gif", "pdf" ],
"qualities" : [ "color", "gray" ],
"supports" : [
"canonicalLinkHeader", "rotationArbitrary", "profileLinkHeader", "http://example.com/feature/"
]
}
],
"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"
},{
"@context" : "http://geojson.org/contexts/geojson-base.jsonld",
"@id" : "http://www.example.org/geojson/paris.json"
}
]
}
6. 準拠レベル
画像情報ドキュメントは、profile
プロパティーの最初のエントリーとして準拠レベルURIを含めることで、APIがサポートされている範囲を指定しなければなりません(must)。このURIは、すべての要件を満たす最も高い準拠レベルの記述にリンクされています。URIは、画像API準拠ドキュメントで列挙されているものの1つでなければなりません(must)。画像情報の項で論じているとおり、この記述には、プロファイルに必要な機能の集合が含まれています。サーバーは、様々な識別子を持つ画像に様々な準拠レベルを宣言できます(may)。
準拠レベルURIは、HTTP Linkヘッダー(RFC5988)のrel="profile"
というパラメータで提供することもできます(may)。例えば、完全なヘッダーは次のようになるかもしれません。
Link: <http://iiif.io/api/image/2/level1.json>;rel="profile"
このヘッダーをApacheのHTTPサーバーで設定するための秘訣は、Apache HTTPサーバー実装ノートで示されています。
7. サーバー応答
7.1. 成功の応答
リクエストがうまく処理された時には、サーバーは200(成功)または3xx(リダイレクト)のステータス・コードでHTTP応答を送信できます。ステータス・コードが200の時のエンティティ・ボディは、リクエストされた画像または情報ドキュメントでなければなりません(must)。ステータス・コードが301、302、303または304の時のエンティティ・ボディには制限はありませんが、空であることが推奨されます(recommended)。ステータス・コードが301、302または303の時は、Location HTTPヘッダーにリクエストを満たす画像のURIを含むように設定しなければなりません(must)。これにより、サーバーが正規のURIを1つ持つことができ、応答のキャッシュが促進されます。ステータス・コード304は、HTTPの仕様どおりに処理されます。クライアントは、これらのすべての状況に遭遇するものと想定すべきで(should)、初期の応答のエンティティ・ボディに必ず画像データが含まれていると想定してはなりません(must not)。
7.2. エラー状況
サーバーがリクエストを解析し、エラーを検出する順序は規定していません。リクエストは、最初のエラーに遭遇した時に失敗となる可能性が高く、下記リストで提供している一般的なコードを用いて適切なHTTPステータス・コードを返します。エラー応答の本文に、人間が読めるエラーの記述がプレーン・テキストかhtmlのいずれかで含まれていることが推奨されます(recommended)。
ステータス・コード | 説明 |
---|---|
400 Bad Request | クライアントが行ったリクエストの構文が正しくないため、サーバーがリクエストを満たすことができません。 |
401 Unauthorized | 認証が必要ですが、提供されていません。詳細に関しては認証の項を参照してください。 |
403 Forbidden | ユーザ(認証済みであろうがなかろうが)はリクエストされた操作を実行することを許されていません。 |
404 Not Found | 識別子で指定された画像資源が存在しない、パラメータの1つ以上の値がこの画像ではサポートされていない、または、リクエストされたサイズが定めれている限界より大きい。 |
500 Internal Server Error | サーバーは、リクエストの実行を阻止した予想外のエラーに遭遇しました。 |
501 Not Implemented | サーバーは、実装されていない正当なIIIFリクエストを受け取りました。 |
503 Service Unavailable | 読み込み/メンテナンスの問題のため、サーバーがビジー/一時的に利用不可です。 |
8. 認証
一般的に、画像はウェブ・ページやアプリケーションの二次資源です。ウェブ・ページの場合、画像はHTMLのimg
タグに組み込まれており、HTTPリクエストを追加することで読み出されます。ユーザがウェブ・ページを読み込むことができない時には、ユーザを別のページにリダイレクトし、認証の機会を提供することができます — そして、これは一般的に受け入れられている挙動です。画像などの二次資源の場合にはこれはできず、ユーザには壊れた画像アイコンが提供されるだけです。
新たな認証メカニズムも、承認ビジネス・ロジックに対する役割も提案しません。代わりに、認証の要件とプロセスは、IIIF固有のコンテキストの外であっても、IIIFに対応したアクセス管理ワークフロー内で処理されることが期待されます。ドラフトの認証仕様を参照してください。
9. URIのエンコーディングとデコーディング
このAPIのURI構文は、エンコードしてはならない(must not)スラッシュ(/)区切り記号に依存しています。クライアントは、特殊文字(下記のto-encodeの集合: パーセントとRFC3986のコロンを除くgen-delims)と、リクエストのコンポーネント内のUS-ASCII集合以外の文字をパーセント・エンコードしなければなりません(must)。例えば、URIの識別子部分に含まれているあらゆるスラッシュをパーセント・エンコードしなければなりません(must)。その他のコンポーネントには特殊文字が含まれていないため、エンコーディングは識別子にのみ必要です。他の文字をパーセント・エンコードしても曖昧さは生じませんが、必要性がないのです。
to-encode = "/" / "?" / "#" / "[" / "]" / "@" / "%"
パラメータ | URIパス |
---|---|
identifier=id1 region=full size=full rotation=0 quality=default | id1/full/full/0/default |
identifier=id1 region=0,10,100,200 size=pct:50 rotation=90 quality=default format=png | id1/0,10,100,200/pct:50/90/default.png |
identifier=id1 region=pct:10,10,80,80 size=50, rotation=22.5 quality=color format=jpg | id1/pct:10,10,80,80/50,/22.5/color.jpg |
identifier=bb157hs6068 region=full size=full rotation=270 quality=gray format=jpg | bb157hs6068/full/full/270/gray.jpg |
identifier=ark:/12025/654xz321 region=full size=full rotation=0 quality=default | ark:%2F12025%2F654xz321/full/full/0/default |
identifier=urn:foo:a123,456 region=full size=full rotation=0 quality=default | urn:foo:a123,456/full/full/0/default |
identifier=urn:sici:1046-8188(199501)13:1%3C69:FTTHBI%3E2.0.TX;2-4 region=full size=full rotation=0 quality=default | urn:sici:1046-8188(199501)13:1%253C69:FTTHBI%253E2.0.TX;2-4/full/full/0/default |
identifier=http://example.com/?54#a region=full size=full rotation=0 quality=default | http:%2F%2Fexample.com%2F%3F54%23a/full/full/0/default |
任意のエンコードが行われた識別子を処理できないサーバーは、クライアントが文字のエンコードを全く行わないと思われる画像識別子のみを提供するように最善を尽くすべきで(should)、したがって、識別子の文字を、文字、数、下線文字に制限することが推奨されます(recommended)。
10. セキュリティに関する留意点
このAPIは、そのコンポーネントに関連するURI構文とセマンティクスを定義しています。URIの構成には、URI内の機密情報の露出やユーザの閲覧/表示行動の漏洩の可能性を除き、セキュリティに関する留意事項はほとんどありません。
このAPIを実施するサーバ・アプリケーションは、DoS攻撃や、DNS偽装による認証脆弱性の可能性を考慮すべきです。アプリケーションは、オーバーフロー攻撃、インジェクション攻撃やディレクトリ・トラバーサル攻撃を避ける方法で、慎重に受信リクエスト(URI)の解析・サニタイズを行わなければなりません。
恣意的に大きな画像リクエスト(ひいてはサーバーをDoS攻撃にさらす)を防止するために、sizeAboveFull
機能を実装しているサーバーは、maxWith
、maxHeight
、maxArea
のうちの1つまたはそれ以上も実装することが推奨されます。
早期のURIのサニティー・チェック(長さ、末尾のGET、不正な文字、範囲外のパラメータ)と、適切な応答コードを用いた拒絶を推奨します(recommended)。
11. 付録
A. 実装ノート
- 画像の保存を可能にするユースケースでは、HTTP
Content-Disposition
ヘッダー(RFC6266)を用いて、提供された識別子とパラメータに基づいて画像識別用の使いやすいファイル名を提供することをお勧めします(recommended)。 - サーバー実装は、PythonのWSGIなどのURIパスをアンエスケープするコンポーネントまたは枠組に依存することができます。そのような状況では、サーバーがリクエストを処理するAPIパラメータと接頭辞の知識があれば、リクエストされたURIは、スラッシュが含まれている可能性がある識別子を処理するために、右から解析できます。
- 認証が完了したかどうかに関わらず、この仕様は、リクエストされた画像やその他の記述メタデータの権利ステータスに関する言明は行いません。権利およびその他の情報に関しては、IIIFプレゼンテーションAPIを参照してください。
- さらにApache HTTPサーバー実装ノートも提供されています。
- リンクト・データの実装では、JSON-LDフレーミング実装ノートで提供されているフレームを用いてinfo.json応答を構築できます。
w,
という正規構文でサイズをリクエストする時に、特定の高さを希望する場合には、以下のアルゴリズムを使用できます。
# Calculate request width for `w,` syntax from desired height
request_width = image_width * desired_height / image_height
- フル画像が拡大・縮小されるタイル・サイズの倍数ではない場合には、画像タイルをリクエストする時に、右端と下端の部分的なタイルを考慮に入れて領域とサイズのパラメータを算出しなければなりません。下記のアルゴリズムは、Pythonコードで示しており、終始、インプットと演算は整数を想定しています(つまり、除算では余りを切り捨て)。インプットは、フル画像コンテンツのサイズ
(width,height)
、倍率s
、タイル・サイズ(tw,th)
、および左上の角の(0,0)
から数えたタイル座標(n,m)
です。数の丸め方が実装依存であることに注意してください。
# Calculate region parameters /xr,yr,wr,hr/
xr = n * tw * s
yr = m * th * s
wr = tw * s
if (xr + wr > width):
wr = width - xr
hr = th * s
if (yr + hr > height):
hr = height - yr
# Calculate size parameters /ws,hs/
ws = tw
if (xr + tw*s > width):
ws = (width - xr + s - 1) / s # +s-1 in numerator to round up
hs = th
if (yr + th*s > height):
hs = (height - yr + s - 1) / s
- 回転において説明したとおり、リクエストされた画像コンテンツのサイズを確保するために、回転によって、返される画像の幅と高さは変わるでしょう。与えられている最初のサイズと回転に対して、返される画像の大きさを算出するための式を下記に示しています。数の丸め方が実装依存であり、一部の言語では、角度を度からラジアンに変換する必要があることに注意してください。
# (w,h) are size parameters, n is rotation angle
w_returned = abs(w*cos(n)) + abs(h*sin(n))
h_returned = abs(h*cos(n)) + abs(w*sin(n))
B. バージョン付け
バージョン2.0から、この仕様はセマンティック・バージョニングに従っています。実施方法の詳細については、APIのバージョン付けのノートを参照してください。
C. 謝辞
このドキュメントの作成に、アンドリューWメロン財団の助成による寛大な支援をいただきました。
継続的な関与、革新的なアイデア、およびフィードバックに関し、IIIFのメンバーに感謝申し上げます。
D. 変更履歴
日付 | 説明 |
---|---|
2016-05-12 | バージョン2.1 (Crowned Eagle) 変更履歴を表示 |
2014-09-11 | バージョン2.0 (Voodoo Bunny) 変更履歴を表示 |
2013-09-17 | バージョン1.1 (名称なし) 変更履歴を表示 |
2012-08-10 | バージョン1.0 (名称なし) |