概要

Omeka SのIIIF Serverモジュールで、PLYファイルがIIIFマニフェストのitemsとして出力されないが、GLBファイルは正常に出力される問題を調査しました。

前提条件:Omeka Sの設定

デフォルトでは、PLYファイルはOmeka Sにアップロードできません。以下の設定が必要です。

PLYファイルアップロード時のエラー

デフォルト設定では、PLYファイルのメディアタイプ(application/octet-stream)と拡張子(.ply)が許可されていないため、アップロードエラーが発生します。

設定の追加

管理画面の「設定」→「セキュリティ」で以下を追加してください:

  • 許可されるメディアタイプ : application/octet-stream を追加
  • 許可されるファイル拡張子 : ply を追加

原因

PLYファイルの処理コードがモジュールに実装されていませんでした。

GLBファイルには明示的な拡張子チェックと型変換のコードが存在しますが、PLYファイルには同様のコードが存在しませんでした。

技術的詳細

GLBファイルの処理(修正前から存在)

TraitMedia.php (format()メソッド)

i}f($$i}mefexdt(ie$raneeTsxtyitupoerennns==i'=om=snotd'r=eat=lpo=/plglo'liwgtcelfarb-t('bip)ioannt{a/hroiycn'tf;eot(-(ssttrreianmg'))${this->resource->source(),PATHINFO_EXTENSION));

IiifTypeOfMedia.php

i}f($$i}mefexdt(ie$raneeTsxtyitupoerennns==i$=om=snetd'r=iat=apo=Iplilo'iiwgfcelTarbyt('pip)eoasnt{[/h$oimcnetfdeoit(a-(Issdtt]rrei=anmg'')M)o$d{meeld'i;a->source(),PATHINFO_EXTENSION));

IIIFマニフェストのitems生成フロー

  1. メディアタイプの判定 (TraitMediaInfo.php)

    • 各メディアをIIIFタイプ(Image, Video, Sound, Text, Dataset, Model, other, invalid)に分類します
  2. Painting候補の優先付け

    • 優先度順: Model > Video > Sound > Image > Text
    • Modelタイプは最優先でCanvasのpaintingに選ばれます
  3. Canvasへの配置 (Manifest.php)

f}orea$i}cmfhed((i$$amtIehndCifiasoan-Iv>=narfse$ostoh&ui&rsc-!ie>et-mme>epmmdtseiyda(iI$anm(fe)od(ia$asmIen$dfmioea[d)'i;paa)in{ting'])){

PLYがitemsに含まれなかった理由

  1. PLYファイルがアップロードされると、メディアタイプはapplication/octet-streamになることが多いです
  2. 拡張子.plyをチェックするコードが存在しませんでした
  3. IIIFタイプがModelとして認識されず、otherまたはinvalidに分類されました
  4. paintingキーが設定されないため、Canvasが生成されませんでした

修正内容

1. src/Iiif/TraitMedia.php

i}f($$i}}mefexedt(lie$rsraneeeeTsxtityitufupoerrennn(ns$==i'e'=omxm=snototded'r=eneat=lslpo=/iplgplo'lnliwgtycelf='arb-=;t('b=ip)ioan'nt{ap/hrloiyycn''tf;)eot({-(ssttrreianmg'))${this->resource->source(),PATHINFO_EXTENSION));

2. src/View/Helper/IiifTypeOfMedia.php

i}f($$i}}mefexedt(lie$rsraneeeeTsxtityitufupoerrennn(ns$==i$e$=omxm=snetetded'r=iniat=asapo=IiIplioilo'iniiwgffcelT=Tarby=yt('p=pip)eeoas'snt{[p[/h$l$oimymcne'etfd)deoiit(a{a-(IIssddtt]]rrei==anmg''')MM)oo$dd{meeelld''i;;a->source(),PATHINFO_EXTENSION));

修正後の動作

PLYファイル(拡張子.ply)がapplication/octet-streamとして認識された場合:

  • メディアタイプがmodel/plyとして返されます
  • IIIFタイプがModelとして認識されます
  • GLBファイルと同様にIIIFマニフェストのitemsに出力されます

出力例

修正後、PLYファイルを含むアイテムのIIIFマニフェストは以下のように出力されます:

{}""""}"]@itl,icdyato"pben:ee"]m{}t"lnse":"o"xh:n:tt"e"""""}"]"tM{"c[@itl,i:pa:acdyat:nco"pbe"/i[tn:ee"]m{}h/fut"lnstlese":"o"tos"xh:n:pcttt"e""""]:a""tC{"1[iti/l,:pa:"dyt/h:n"peio"/[:em{}ish/a"sittls":"fto"h:.ipc,t"""""}"ii:atA[itmb,toi/lpndyooa/f/h:n"ptdra/io/:eiy"""gp3ist"v"itfeiitla":a:dyot3fotht"pr"p/.icit"i{:em:rmiiaotAo"aeaoilnpnn":t"sn/fhP:n"h"heia/oa/:t":tnfp3sgttMtteitela"po"pas3/"otp:dm:ttp/i,cia/eo/i"rciaoi/ld/o,eailnnl"elnsnfh"to,lo/ev/o,ic/c3na3snapa/ts/tglllca/3/"hyhotp/i,o"oni1aissto"nitten,nf//x/o/fit3t3ii./a/lijct3efsoi/s/onoa/3ntnno/"e-nr3,xpoi/tatgc.gaiajetnns/iavo4olan"n/s",/5/,44p"91,6"53c63ab23c880e4625fa3b6dae46a817b9b2.ply",

items内にCanvasが生成され、bodytypeModelformatmodel/plyとして出力されています。

関連ファイル

ファイル役割
src/Iiif/TraitMedia.phpメディアフォーマット(MIMEタイプ)の判定
src/View/Helper/IiifTypeOfMedia.phpIIIFタイプ(Image, Model等)の判定
src/Iiif/TraitMediaInfo.phpメディア情報の収集とpainting候補の選択
src/Iiif/Manifest.phpIIIFマニフェストのitems生成

謝辞

本調査で使用したPLYファイルのサンプルデータは、以下の記事からダウンロードさせていただきました:

調査日

2026-02-06