👏

iiif-prezi3を試す

2024/06/19に公開

概要

IIIF Presentation API 3が普及しつつありますが、その仕様を理解しつつ、JSONファイルを直接作成することが難しく感じるようになりました。

そこで、以下のPythonライブラリを使用してみましたので、備忘録です。

https://github.com/iiif-prezi/iiif-prezi3

以下の記事で紹介した東寺百合文書WEBで公開されているデータのIIIFへの変換にあたり、本ライブラリを使用しています。

https://zenn.dev/nakamura196/articles/dce32fda27cc0e

読みにくいもので恐縮ですが、ソースコードも以下のリポジトリで公開していますので、参考になりましたら幸いです。

https://github.com/nakamura196/toji_iiif

コレクションの作成

以下のようなコードにより、IIIFコレクションを作成できました。

import iiif_prezi3

iiif_prezi3.config.configs['helpers.auto_fields.AutoLang'].auto_lang = "ja"

collection = iiif_prezi3.Collection(
    id=f"{origin}/set/3/collection.json",
    label="東寺百合文書",
    viewingDirection="right-to-left",
    provider=iiif_prezi3.ProviderItem(
        id=self.homepage,
        label=self.attribution,
    ),
    homepage=iiif_prezi3.HomepageItem(
        id=self.homepage,
        type="Text",
        label=self.attribution,
        format="text/html",
        language="ja"
    ),
    metadata=[
        iiif_prezi3.KeyValueString(label="Attribution", value=self.attribution),
        iiif_prezi3.KeyValueString(label="Rights", value=self.rights),
    ],
    rights=self.rights,
)

opath = f"{self.docs_dir}/iiif/set/3/collection.json"
os.makedirs(os.path.dirname(opath), exist_ok=True)

with open(opath, "w") as f:
    f.write(collection.json(ensure_ascii=False, indent=2 if IS_DEBUG else None))

iiif_prezi3.config.configs['helpers.auto_fields.AutoLang'].auto_langjaを与えることで、labelmetadataの言語フィールドがjaになりました。

{
    "@context": "http://iiif.io/api/presentation/3/context.json",
    "id": "https://nakamura196.github.io/toji_iiif/iiif/set/3/collection.json",
    "type": "Collection",
    "label": {
        "ja": [
            "東寺百合文書"
        ]
    },
    "metadata": [
        {
            "label": {
                "ja": [
                    "Attribution"
                ]
            },
            "value": {
                "ja": [
                    "京都府立京都学・歴彩館 東寺百合文書WEB"
                ]
            }
        },
        {
            "label": {
                "ja": [
                    "Rights"
                ]
            },
            "value": {
                "ja": [
                    "https://creativecommons.org/licenses/by/2.1/jp/"
                ]
            }
        }
    ],
    "rights": "https://creativecommons.org/licenses/by/2.1/jp/",
    "provider": [
        {
            "id": "https://hyakugo.pref.kyoto.lg.jp/",
            "type": "Agent",
            "label": {
                "ja": [
                    "京都府立京都学・歴彩館 東寺百合文書WEB"
                ]
            }
        }
    ],
    "homepage": [
        {
            "id": "https://hyakugo.pref.kyoto.lg.jp/",
            "type": "Text",
            "label": {
                "ja": [
                    "京都府立京都学・歴彩館 東寺百合文書WEB"
                ]
            },
            "format": "text/html",
            "language": [
                "ja"
            ]
        }
    ],
    "items": [
        {
            "id": "https://nakamura196.github.io/toji_iiif/iiif/3/1/manifest.json",
            "label": {
                "ja": [
                    "イ函/1/:山城国紀伊郡司解案"
                ]
            },
            "type": "Manifest"
        }
    ]
}

iiif_prezi3.KeyValueString関数を使用することで、フィールドや値が配列として出力される点も有用かと思いました。

また、iiif_prezi3.ProviderItemを与えることにより、"type": "Agent",が自動的に設定される点も、ライブラリを使用する利点かと思います。

その他

マニフェストやキャンバスについても、同様の方法で作成することができました。

特に、キャンバスおよび画像のサイズの指定にあたっては、以下が参考になりました。

https://iiif-prezi.github.io/iiif-prezi3/recipes/0004-canvas-size/

まとめ

iiif-prezi3の利用にあたり、参考になりましたら幸いです。

Discussion