👏
iiif-prezi3を試す
概要
IIIF Presentation API 3が普及しつつありますが、その仕様を理解しつつ、JSONファイルを直接作成することが難しく感じるようになりました。
そこで、以下のPythonライブラリを使用してみましたので、備忘録です。
以下の記事で紹介した東寺百合文書WEBで公開されているデータの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_lang
にja
を与えることで、label
やmetadata
の言語フィールドが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",
が自動的に設定される点も、ライブラリを使用する利点かと思います。
その他
マニフェストやキャンバスについても、同様の方法で作成することができました。
特に、キャンバスおよび画像のサイズの指定にあたっては、以下が参考になりました。
まとめ
iiif-prezi3の利用にあたり、参考になりましたら幸いです。
Discussion