ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
English
Omeka:デジタルコレクションとオンライン展示のためのプラットフォーム

Omeka:デジタルコレクションとオンライン展示のためのプラットフォーム

TL;DR Omeka は、図書館・博物館・大学などの文化機関向けに設計されたオープンソースのWebプラットフォームである。デジタルコレクションの管理とオンライン展示の構築に特化しており、Omeka S(Linked Data対応の最新版)とOmeka Classic(シンプルな旧版)の2つのバージョンが存在する。GPLライセンスで提供されている。 Omekaとは OmekaはRoy Rosenzweig Center for History and New Media(RRCHNM、ジョージ・メイソン大学)が開発したWebパブリッシングプラットフォームである。「展示する」を意味するスワヒリ語に由来する名前の通り、デジタル資料の公開と展示に最適化されている。 世界中の数千の文化機関で採用されており、スミソニアン協会、米国議会図書館、フランス国立図書館などの大規模機関でも利用実績がある。 Omeka SとOmeka Classicの違い Omeka S(推奨) Linked Data対応:Dublin Core、Schema.org、FOAFなどのRDFボキャブラリーをネイティブサポート マルチサイト管理:一つのインストールで複数の独立したサイトを運用可能 モジュール式:必要な機能をモジュールとして追加できる拡張性の高いアーキテクチャ IIIF対応:IIIF Image API/Presentation APIとの統合が可能 API ファースト:RESTful APIを標準搭載し、外部システムとの連携が容易 Omeka Classic シンプルな構成:セットアップが簡単で、小規模プロジェクトに適している 豊富なプラグイン:長い歴史に基づく多数のプラグインが利用可能 テーマ:デザインテーマの切り替えが容易 新規プロジェクトではOmeka Sの利用が推奨される。 主要機能 アイテム管理 デジタル資料(画像、文書、音声、動画など)をアイテムとして登録し、Dublin Coreなどのメタデータスキーマに基づいて詳細な記述情報を付与できる。 オンライン展示 登録したアイテムを使って、テーマ別のオンライン展示(Exhibition)を構築できる。ストーリーラインに沿って資料を配置し、解説テキストを添えることで、学術的な文脈を伴ったデジタル展示が実現する。 コレクション管理 アイテムをコレクション(資料群)に分類し、階層的に管理できる。各コレクションにも独自のメタデータを付与可能である。 検索とブラウジング ファセット検索やタグブラウジングにより、利用者は直感的にコレクションを探索できる。全文検索機能も備えている。 セットアップ Omeka Sのインストールには、LAMP環境(Linux、Apache、MySQL、PHP)が必要である。 # 基本的な要件 # - PHP 7.4以上 # - MySQL 5.7以上 / MariaDB 10.2以上 # - Apache(mod_rewrite有効) # Composerでインストール composer create-project omeka/omeka-s また、Omeka.netではホスティングサービスも提供されており、サーバー管理なしで利用を開始することもできる。 ...

Omeka SのIIIF Serverモジュールで、PLYファイルがIIIFマニフェストのitemsに出力されない問題の調査

Omeka SのIIIF Serverモジュールで、PLYファイルがIIIFマニフェストのitemsに出力されない問題の調査

概要 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()メソッド) if ($mediaType === 'application/octet-stream') { $extension = strtolower(pathinfo((string) $this->resource->source(), PATHINFO_EXTENSION)); if ($extension === 'glb') { return 'model/gltf-binary'; } } IiifTypeOfMedia.php if ($mediaType === 'application/octet-stream') { $extension = strtolower(pathinfo((string) $media->source(), PATHINFO_EXTENSION)); if ($extension === 'glb') { return $mediaIiifTypes[$mediaId] = 'Model'; } } IIIFマニフェストのitems生成フロー メディアタイプの判定 (TraitMediaInfo.php) ...

Omeka Sで独立した作者データベースを構築する方法

Omeka Sで独立した作者データベースを構築する方法

はじめに 美術館や図書館のデジタルアーカイブでよく見られる課題として、「作品と作者の関係を適切に管理したい」というニーズがあります。特に、一人の作者が複数の作品を制作している場合や、複数の作者が共同で一つの作品を制作している場合、その関係性を明確に表現し、検索可能にすることが重要です。 この記事では、Omeka Sで作者データベースを独立して構築し、作品とリンクさせる方法について解説します。 課題の要点 独立した作者データベースの構築 : 作品データベースとは別に、作者(執筆者)のデータベースを作成し、両者をリンクさせることは可能か? 複数作者への対応 : 一つの論文やデザインに複数の作者がいる場合、どのように表現すればよいか? 解決方法 1. 作者を独立したアイテムとして登録する Omeka Sでは、作者を独立した「アイテム」として登録することで、作者データベースを構築できます。 手順: ステップ1: 作者用のアイテムセットを作成 「アイテムセット」から「新規アイテムセット」を作成 タイトルを「作者一覧」などとする このアイテムセットに全ての作者アイテムを収納 ステップ2: 作者アイテムを登録 「アイテム」→「新規アイテム」 クラスは foaf:Person を選択(推奨) 作者情報を入力: dcterms:title(作者名) foaf:firstName(名) foaf:familyName(姓) dcterms:description(経歴や専門分野) その他、所属機関など必要な情報 作成した「作者一覧」アイテムセットに追加 2. 作品から作者へリンクを設定する 作品アイテムの dcterms:creator(作成者)プロパティで、作者アイテムへの参照を設定します。 手順: ステップ1: 作品アイテムを編集 作品アイテムの編集画面を開く dcterms:creatorプロパティを見つける 「値を追加」→「Omekaリソース」を選択 ステップ2: 作者アイテムをリンク 「選択リソース無し」ボタンをクリック サイドバーが開き、アイテム検索が可能になる 作成済みの作者アイテムを検索 該当する作者を選択して「追加」 これにより、作品アイテムと作者アイテムが関連付けられます。 3. 複数作者への対応 Omeka Sでは、同一プロパティに複数の値を追加できます。 手順: 作品アイテムの dcterms:creator フィールドで、「値を追加」ボタンを再度クリック 2人目、3人目の作者アイテムを同様に選択して追加 必要な人数分だけ繰り返す 重要なポイント: Dublin Coreの dcterms:creator は、複数の値を持つことが想定されています 同じプロパティに複数の作者アイテムをリンクすることで、共著論文やコラボレーション作品を適切に表現できます 4. 作者の作品一覧を表示する 作者アイテムのページから、その作者が制作した全作品を一覧表示できます。 ...

Omeka-S Docker環境を別サーバーに移行する完全ガイド

Omeka-S Docker環境を別サーバーに移行する完全ガイド

はじめに 本記事では、Docker ComposeでセットアップされたOmeka-S環境を、volumeデータを含めて別のサーバーに移行する手順を解説します。データの整合性を保ちながら、安全に移行作業を進めることができます。 環境 移行元サーバー : Ubuntu 22.04 移行先サーバー : Ubuntu 22.04(新規セットアップ) 構成 : Omeka-S + MariaDB + phpMyAdmin + Traefik + Mailpit 移行の流れ 移行元サーバーでのバックアップ ローカルマシンへのダウンロード 移行先サーバーのDocker環境セットアップ データの復元と起動 ステップ1: 移行元サーバーでのバックアップ 1.1 現在の環境確認 # 実行中のコンテナを確認 docker ps # Dockerボリュームを確認 docker volume ls 出力例: DRIVER VOLUME NAME local omeka-s-docker_mariadb local omeka-s-docker_omeka 1.2 バックアップファイルの作成 # /optディレクトリに移動 cd /opt # 設定ファイル等をバックアップ(約60MB) sudo tar -czf omeka-backup-$(date +%Y%m%d).tar.gz omeka-s-docker/ # Dockerボリュームのデータをバックアップ(約1GB) sudo docker run --rm \ -v omeka-s-docker_omeka:/data/omeka \ -v omeka-s-docker_mariadb:/data/mariadb \ -v /opt:/backup \ alpine tar -czf /backup/omeka-volumes-$(date +%Y%m%d).tar.gz -C /data . # バックアップファイルの確認 ls -lh /opt/*.tar.gz 出力例: ...

Omeka-SのMroongaSearchモジュールで日本語全文検索を実現する

Omeka-SのMroongaSearchモジュールで日本語全文検索を実現する

はじめに Omeka-Sは強力なデジタルアーカイブシステムですが、デフォルトでは日本語の全文検索がほとんど機能しません 。本記事では、MroongaSearchモジュールを導入することで、日本語全文検索を実現する方法を解説します。 重要:なぜMroongaSearchモジュールが必要なのか Omeka-Sの標準検索の問題点 Omeka-Sの標準フルテキスト検索(FullTextSearchモジュール)は、InnoDBエンジンを使用しており、以下の致命的な問題があります: 日本語単語検索の例 : データ: 「東京大学で人工知能を研究する」 検索語: 「人工知能」 結果: ❌ ヒットしない InnoDBのフルテキスト検索は英語のようなスペース区切り言語を前提としているため、日本語では: 単語検索が不可能 : 文字列全体が1つの単語として扱われる 部分一致も機能しない : FULLTEXTインデックスが日本語を正しく処理できない 検索結果がゼロ : ユーザーは何も見つけられない MroongaSearchモジュールの解決策 MroongaSearchモジュール は、この問題を2段階で解決します: 1. フォールバック機能(モジュール導入直後から有効) 重要 : MroongaSearchモジュールをインストールするだけで、特別な設定なし で日本語検索が動作するようになります。 データ: 「東京大学で人工知能を研究する」 検索語: 「人工知能」 【MroongaSearchモジュールなし】 → ❌ 結果ゼロ 【MroongaSearchモジュールあり(Mroonga未設定でも)】 → ✅ LIKE '%人工知能%' にフォールバック → ✅ 検索結果が返る! MroongaSearchモジュールのフォールバック機能 : CJK(日本語・中国語・韓国語)の単一語検索を自動検出 LIKE '%term%' 検索に自動的にフォールバック Mroongaが設定されていなくても動作する これがないと、日本語全文検索がそもそもうまくいかない 2. Mroonga+TokenMecabによる高速・高精度検索(推奨) さらに、MariaDBにMroongaプラグインを設定すると: ✅ 形態素解析による精密な単語検索 ✅ 高速な全文検索(LIKEの数百倍高速) ✅ AND/OR検索の厳密な制御 MroongaSearchモジュールとは MroongaSearchは、Omeka-S用の全文検索強化モジュールです。 ...

Omeka Sのテーマ更新とモジュール改修

Omeka Sのテーマ更新とモジュール改修

概要 以下のワークショップにおいて、Omeka Sの扱う機会がありました。今回は、本演習で参加者の方々からいただいたフィードバックに基づき、テーマやモジュールに加えた修正を紹介します。 https://dh.nihu.jp/news/post/dihuco_20250724 Universal Viewerモジュール Universal Viewerモジュールは、Omeka SにUniversal Viewerを導入するモジュールです。 https://gitlab.com/Daniel-KM/Omeka-S-module-UniversalViewer 本モジュールが提供する機能の一つとして、以下のようにアイテム一覧ページにUniversal Viewerを表示する機能があります。 ただ、この表示において、メディアが紐づいていないアイテムがあると、IIIFマニフェストファイル or IIIFコレクションファイルの作成に不具合が生じ、都度アラートが表示される事象が発生しました。 そこで、以下の機能修正を行い、プルリクエストを送りました。 https://gitlab.com/Daniel-KM/Omeka-S-module-UniversalViewer/-/merge_requests/3 実装した機能としては、以下のようなサイトごとの設定画面において、 http://localhost/admin/site/s/aaa#site-settings アイテムの一覧画面にUVを表示するか否かを設定できるオプションを追加しました。 結果、本設定をOFFにすると、以下のように、アイテム一覧画面にUVが表示されなくなります。 同様に、日本語訳を適用済みです。 Bootstrap5を用いたOmeka Sのテーマ 背景 Omeka Sのv.4系に合わせて、以下のテーマを作成しています。 https://github.com/nakamura196/Omeka-S-theme-Bootstrap5 以下は、もともとOmeka Sのv.3系向けに作成していたので、生成AIの力を借りて作り直しました。 https://github.com/ldasjp8/Omeka-S-theme-Bootstrap5 本テーマについての詳細は、別の記事で紹介したいと思います。 変更内容 変更前 変更後 本テーマでは、元々は上記の変更前 のように、正方形にクロップされたサムネイル画像を使用していました。 ただ、この設定の場合、ユーザが表示したい箇所をうまく表示できないことがありました。そこで、変更後 のような表示を可能にするためのオプションを追加しました。 具体的には、以下のように、テーマの設定画面に「サムネイル表示モード」を追加しました。 なお、この変更に用いたコミットは以下です。 https://github.com/nakamura196/Omeka-S-theme-Bootstrap5/commit/cc4ef7025950c90e2753d34d0ed52e81b782fac3 まとめ Omeka Sのテーマやモジュールなど、利用者のフィードバックに基づく改善や日本語環境への適用に向けて、引き続き改修を加えていく予定です。

Omeka SにPROV-Oオントロジーを登録する方法

Omeka SにPROV-Oオントロジーを登録する方法

はじめに Omeka Sでデジタルアーカイブを構築する際、メタデータの記述に標準的な語彙を使用することで、データの相互運用性が向上します。今回は、W3Cが策定したPROV-O(PROV Ontology)をOmeka Sに登録する手順を解説します。 PROV-Oは、データやデジタルオブジェクトの来歴(プロヴェナンス)情報を記述するためのオントロジーで、「誰が」「いつ」「どのように」データを作成・変更したかを構造化して記録できます。 前提条件 Omeka S(バージョン3.0以降)がインストール済み 管理者権限でログイン可能 インターネット接続環境(外部URLからのインポートに必要) 登録手順 1. 語彙管理画面へのアクセス Omeka S管理画面にログイン 左側メニューから「語彙の一覧」をクリック 右上の「新しい語彙を追加」ボタンをクリック 2. 基本情報の入力 語彙の基本情報を以下のように入力します: 項目 入力値 ラベル PROV-Oオントロジー コメント W3C PROV-O (PROV Ontology) - データの来歴情報を記述するための標準オントロジー 名前空間URI http://www.w3.org/ns/prov# 名前空間の接頭語 prov 重要 : 名前空間URIの末尾に#(ハッシュ)が必要です。これを忘れるとプロパティが正しく認識されません。 3. ファイルのインポート設定 Import typeの選択 「URL」を選択します(デフォルトで選択されているはずです)。 File URLの入力 以下のURLを入力します: https://www.w3.org/ns/prov-o このURLは内容交渉(Content Negotiation)に対応しており、Omeka Sが自動的に適切な形式(Turtle)で取得します。 ファイルフォーマット 「Turtle (.ttl)」が自動的に選択されます。変更の必要はありません。 4. 登録の実行 入力内容を確認 「インポート」ボタンをクリック 処理が完了するまで待機(数秒〜数十秒) 5. 登録の確認 登録が完了すると、語彙一覧にPROV-Oオントロジーが表示されます。 クリックして詳細を確認すると、以下のようなクラスとプロパティが登録されているはずです: 主要なクラス: prov:Entity - エンティティ(物や概念) prov:Activity - アクティビティ(プロセスや行為) prov:Agent - エージェント(人、組織、ソフトウェア) 主要なプロパティ: ...

Omeka Sテーマの多言語化

Omeka Sテーマの多言語化

はじめに Omeka Sのテーマ開発において、多言語化の実装方法に関する日本語の情報は限られています。本記事では、Omeka Sのカスタムテーマを多言語対応させる具体的な手順と、実装時の注意点について解説します。 目次 Omeka Sの翻訳システムの仕組み テーマの多言語化に必要なファイル ステップバイステップガイド よくある間違いと解決方法 実装例 トラブルシューティング 1. Omeka Sの翻訳システムの仕組み Omeka Sはgettext という標準的な翻訳システムを使用しています。このシステムでは: .poファイル:人間が読み書きできる翻訳ソースファイル .moファイル:コンパイル済みのバイナリファイル(実際に使用される) $translate()関数:PHPテンプレート内で翻訳を適用 2. テーマの多言語化に必要なファイル 必要なディレクトリ構造 your-theme/ ├── config/ │ └── theme.ini # 重要:has_translations = "true"を追加 ├── language/ │ ├── template.pot # 翻訳テンプレート(オプション) │ ├── ja.po # 日本語翻訳ソース │ └── ja.mo # 日本語翻訳バイナリ └── view/ └── (各種テンプレートファイル) 3. ステップバイステップガイド ステップ1:theme.iniの設定 config/theme.iniファイルの[info]セクションに以下の行を追加します: [info] name = "Your Theme Name" version = "1.0.0" author = "Your Name" description = "Theme description" omeka_version_constraint = "^4.1.0" has_translations = "true" # ← この行が重要! ⚠️ 重要: has_translations = "true"がないと、翻訳ファイルが読み込まれません。 ...

Omeka SのIIIF Serverモジュールを使用した階層構造を持つ目次の記述

Omeka SのIIIF Serverモジュールを使用した階層構造を持つ目次の記述

概要 Omeka SのIIIF Serverモジュールを使用し、階層構造を持つ目次の記述方法について紹介します。 マニュアル やや複雑な記述になっていますが、以下に説明があります。 https://github.com/Daniel-KM/Omeka-S-module-IiifServer?tab=readme-ov-file#input-format-of-the-property-for-structures-table-of-contents 単純な目次 「Toyo Bunko Media Repository」で公開されている以下を例とします。 https://app.toyobunko-lab.jp/s/main/document/9f9d95c2-d33d-7402-742b-47db12748688 以下のように、{RangeのID},{Rangeの名前},{Canvasのインデックス}を指定します。 r1,延享、寛延、宝暦,1 r2,明和,25 r3,安永一,55 r4,安永二,79 r5,天明一,110 r6,天明二,142 r7,寛政一,177 r8,寛政二,218 r9,享和,255 r10,文化一,279 r11,文化、文政、二,313 これにより、以下のように目次が表示されます。 階層構造を持つ目次 以下を例とします。 https://app.toyobunko-lab.jp/s/main/document/4797b8ca-530f-8aae-f252-7911ad64039b 階層構造を持つ目次を記述する場合には、以下のように4列でデータを用意します。 r0, 全体,-, r1;r2;r29;r55;r73 r1, 目次, 4-8, - r2, 第一、 蒙疆政府ノ司法制度…一頁, -, r3;r4;r9;r14;r15 r3, 一、 司法制度ノ沿革…一, 8-10, - r4, 二、 司法關係機關…四, -, r5;r6;r7;r8 r5, (一) 司法部…四, 10, - r6, (二) 法院…四, 10-11, - r7, (三) 縣旗司法機關…六, 11, - r8, (四) 行刑機關…七, 11-12, - r9, 三、 司法事務…八, -, r10;r11;r12;r13 r10, (一) 刑事事件…八, 12, - r11, (二) 民事事件…九, 12, - r12, (三) 行刑事務…九, 12-14, - r13, (四) 登記…一二, 14-15, - r14, 四、 司法經費…一四, 15-16, - 4列目に子要素となるRangeのIDを指定します。インデントを含めると、以下のような形になります。 ...

MCPサーバーを使って、Omeka Sにリソース(アイテムと画像)を登録する

MCPサーバーを使って、Omeka Sにリソース(アイテムと画像)を登録する

概要 MCPサーバーの勉強を兼ねて、Omeka Sにリソース(アイテムと画像)を登録するMCPサーバを作成しました。 https://github.com/nakamura196/omeka-s-mcp-sample 関連記事 以下の記事を参考にしています。 https://zenn.dev/himara2/articles/14eb2260c4f0e4 https://zenn.dev/meson_tech_blog/articles/simple-mcp-server 準備 MCP サーバをClaude Desktopで利用する方法については、他の記事に譲ります。以下のような設定を追加します。 { "mcpServers": { ... "omeka": { "command": "python", "args": [ "<絶対パス>/omeka_s_mcp_sample/server/omeka_server.py" ], "env": { "OMEKA_API_URL": "<Omeka SのURL>/api", "OMEKA_KEY_IDENTITY": "<OMEKA_KEY_IDENTITY>", "OMEKA_KEY_CREDENTIAL": "<OMEKA_KEY_CREDENTIAL>" } }, ... } } 結果、以下のようにツールが登録されます。 アイテムの登録 海に関するアイテムを登録して 海に関するアイテムをOmeka Sに登録いたします。「海」の項目が正常にOmeka Sに登録されました! 登録された項目の詳細: タイトル : 海 説明 : 地球の表面の約71%を占める広大な塩水の水域。生命の起源であり、気候調節、生態系の維持、人間の文化や経済活動において重要な役割を果たす。波の音、潮の香り、広がる水平線は多くの人々に癒しとインスピレーションを与える。 項目ID : 28 登録日時 : 2025年6月4日 23:11:49 (UTC) 海に関するアイテムが正常に作成されました。海の美しさや重要性について詳しく説明した内容で登録されています。必要に応じて、この項目にも海に関連する画像やメディアファイルを追加することができます。 海に関する画像も追加されますか?それとも他に何かご希望がありますか? 画像の登録 海に関する画像を3枚登録して 海に関する画像を3枚、先ほど作成した「海」の項目に登録いたします。海に関する画像3枚が正常にOmeka Sに登録されました! 登録された海の画像: 美しい海と空の景色 (メディアID: 29) 800×601ピクセル 登録日時: 2025年6月4日 23:12:22 (UTC) 海の波と海岸 (メディアID: 30) ...

MDX.jpのオブジェクトストレージに対するIPアドレス制限の実装方法

MDX.jpのオブジェクトストレージに対するIPアドレス制限の実装方法

概要 MDX.jpのオブジェクトストレージに対するIPアドレス制限の実装方法を調べました。以下、動作確認を行なった上で、AIが記事を執筆しました。 はじめに 本記事では、MDX.jpが提供するDDN EXAScaler S3互換オブジェクトストレージサービスにおいて、特定のIPアドレスからのみアクセスを許可する設定方法について解説します。 オブジェクトストレージのセキュリティレイヤー DDN EXAScaler S3互換ストレージには、主に以下の3つのセキュリティレイヤーがあります: アクセスキーとシークレットキー :基本的な認証情報 バケットポリシー :バケットレベルでのアクセス制御 アクセス制御リスト(ACL) :オブジェクトレベルでのアクセス制御 この中で、IPアドレス制限を実装するには「バケットポリシー」を利用します。 バケットポリシーによるIPアドレス制限の設定手順 1. ポリシーJSONファイルの作成 まず、以下のようなJSONファイル(例:mdx.json)を作成します: { "Version": "2008-10-17", "Statement": [ { "Sid": "BucketName", "Effect": "Allow", "Principal": { "DDN": ["*"] }, "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": "BucketName", "Condition": { "IpAddress": { "aws:SourceIp": [ "192.168.1.1/32", "203.0.113.0/24" ] } } } ] } ポリシーの主な要素: Version : ポリシー構文のバージョン Sid : ポリシーステートメントの識別子(任意の名前) Effect : 許可または拒否(“Allow"または"Deny”) Principal : このポリシーが適用されるユーザー(DDN EXAScalerでは"DDN"を使用) Action : 許可または拒否するアクション Resource : ポリシーが適用されるリソース(バケット名) Condition : 条件(ここでIPアドレス制限を設定) 2. ポリシーの適用 s3cmdツールを使用して、作成したポリシーをバケットに適用します: ...

Omeka Sのモジュールアップデート情報(2025-03-27)

Omeka Sのモジュールアップデート情報(2025-03-27)

概要 Omeka Sの運用において、モジュールのアップデートが必要になったものを紹介します。 IIIF Server https://omeka.org/s/modules/IiifServer/ 2024年2月にリリースされた3.6.18を使用していましたが、IIIFマニフェストファイル生成時に、サムネイル画像がおかしくなる不具合が確認されました。 2025年3月時点で最新の3.6.24に更新したところ、本不具合が解消しました。なお、このアップデートには、Commonモジュールの更新も必要でしたので、参考になりましたら幸いです。 https://omeka.org/s/modules/Common/ Google Analytics https://github.com/Libnamic/Omeka-S-GoogleAnalytics 2023年頃から使用していましたが、PHPのあるバージョンからwarningが表示されるようになりました。 また本モジュールの更新も、2023年から行われていませんでした。 そこで以下の記事でも紹介したように、Analytics Snippetモジュールを使用したほうがよさそうでした。 以下で更新履歴が確認できますが、こちらは最新のリリースが2025/1になっています。 https://omeka.org/s/modules/AnalyticsSnippet/ まとめ Omeka Sの運用にあたり、参考になりましたら幸いです。

Omeka Sで非公開サイトを共有する

Omeka Sで非公開サイトを共有する

概要 Omeka Sで非公開サイトを共有する機会があったので、備忘録です。 関連モジュール まず以下のモジュールを確認しました。 https://omeka.org/s/modules/Guest/ 上記では、Guest Privateモジュールも紹介されており、使い分けの方法をChatGPTに問い合わせました。 Omeka S の Guest モジュール と Guest Private モジュール の使い分けについて説明します。 1. Guest モジュール guest ロール を追加し、ゲストユーザーとして登録できるようにする。 管理画面へのアクセス権限はなし 。 API経由でログイン・ログアウト・登録・パスワード更新などが可能。 公開サイトのみ閲覧可能 (非公開サイトや非公開ページは見られない)。 用途 : 公開サイトに一般ユーザーを登録させ、ログイン機能を提供する。 2. Guest Private モジュール このモジュールを追加すると、さらに2つのロールが追加される: (1) guest_private_site 公開サイト + 非公開サイトを閲覧可能 (ただし、非公開ページや非公開リソースは見られない)。 用途 : サイト全体を非公開にしつつ、特定のユーザーにサイトの閲覧権限を与えたい場合。 (2) guest_private 公開サイト + 非公開サイト + 非公開ページ + 非公開リソースを閲覧可能 。 用途 : 非公開リソースを含む、特定のコンテンツを許可されたゲストユーザーだけに見せたい場合。 質問: 非公開サイトに指定したユーザーだけ閲覧できるようにしたい 解決策 Guest Private モジュールをインストールする → 通常の Guest モジュールでは非公開サイトの閲覧ができないため、Guest Private が必要。 ...

Omeka Sのファイルをmdx.jpのオブジェクトストレージに保存する

Omeka Sのファイルをmdx.jpのオブジェクトストレージに保存する

概要 Omeka Sのファイルをmdx.jpのオブジェクトストレージに保存する方法に関する備忘録です。 ベースとするモジュール Amazon S3との連携を可能にする以下のモジュールをベースとします。 https://omeka.org/s/modules/AmazonS3/ 本モジュールでは、Omeka Sで取り扱う画像や動画といったメディアのファイルをAmazon S3に保存するための拡張機能を提供します。 一方、endpointの指定ができないため、mdx.jpのオブジェクトストレージなどを対象にすることはできませんでした。 モジュールのカスタマイズ 上述した背景を踏まえて、Amazon S3以外のオブジェクトストレージを利用できるように、モジュールをカスタマイズしました。カスタマイズした結果は、以下のリポジトリで公開しています。 https://github.com/nakamura196/Omeka-S-module-AmazonS3 なお、カスタマイズについては、エディタとしてCursorを使用し、s3互換のオブジェクトストレージにも対応したいという依頼をclaude-3.7-sonnetに提出し、その結果を反映しています。 結果、上記のモジュールを使用することにより、Omeka Sで登録したメディアが以下のようなURLでアクセス可能になりました。 https://s3ds.mdx.jp/<バケット名>/large/3e0a78e1cbc239f37cfff0e777c40c2f9b2f5c92.jpg 以下は、filesディレクトリを、mdx.jpに接続したCyberduckで表示した例です。 モジュールの設定内容は以下のとおりです。カスタムエンドポイントURLという項目が追加されており、https://s3ds.mdx.jpを指定することで、mdx.jpのオブジェクトストレージを利用できるようになりました。 なお、上記の画面キャプチャで表示されているとおり、mdx.jpのオブジェクトストレージにファイルが保存される設定をしても、現時点ではWrong region. Please use region of a bucket:と表示されてしまいます。この点は、今後修正予定です。 モジュールのインストール 今回フォークして作成したカスタムモジュールをインストールするには、以下の手順を踏む必要があります。 cd <モジュールが格納されているディレクトリ> git clone https://github.com/nakamura196/Omeka-S-module-AmazonS3 AmazonS3 cd AmazonS3 composer install --no-dev Omeka Sにおいて、ソースからモジュールを使用するには、おおよそ共通して上記のような手続きが必要になります。 参考 Omeka Sのモジュールにおいて、同様の機能を提供するものとして、Any Cloudがあります。 https://github.com/HBLL-Collection-Development/omeka-s-any-cloud こちらもAmazon S3との接続機能を提供しており、またカスタイズを行う必要がなく、AWS Endpointを入力する項目が提供されていました。 ただ、これらの項目に先述したmdx.jpのオブジェクトストレージの情報を入力したところ、アイテムなどを登録する画面で以下のエラーが表示されました。 原因や対処方法については引き続き調査したいと思いますが、このエラーが遭遇したため、Any Cloudではなく、Amazon S3モジュールをカスタマイズする選択を行いました。 まとめ 2025年度からmdx.jpのオブジェクトストレージは無料で使用可能になるということで、デジタルアーカイブにおける公開画像の格納先や、また長期保存のためのストレージとしても有効な選択肢になるかと思います。 https://mdx.jp/mdx1/news/4839 デジタルアーカイブの構築や活用にあたり、参考になりましたら幸いです。

Omeka Sにサイズが大きいファイルをアップロードする

Omeka Sにサイズが大きいファイルをアップロードする

概要 Omeka Sに比較的サイズが大きい(200MB超)ファイルをアップロードする機会がありましたので、備忘録です。 具体的には、3Dモデルを保存するために使用される3次元ファイル形式の.glbファイルをアップロードします。 課題 通常、比較的サイズが大きいファイルをGUIからアップロードを試みると、 以下のように「POST request exceeded maximum size」となることがあります。 これを対応方法の例を紹介します。 php.ini の設定変更 Omeka SはPHPの設定によってアップロードサイズの制限を受けるため、まずは php.ini の設定を確認・変更してください。 upload_max_filesize = 512M post_max_size = 512M max_execution_time = 300 変更後はWebサーバー(ApacheやNginx)を再起動してください。ただし、デメリットとして共有ホスティングでは変更できない場合などがあります。 直接サーバにアップロード Omeka SのGUIを経由せずに、サーバに直接ファイルをアップロードし、Omeka Sに認識させる方法もあります。 File Sideloadモジュール 以下で紹介したFile Sideloadモジュールが使用できます。 上記は一括登録の例ですが、以下のように「サイドロード:公式サイト以外からのファイル読込」オプションを使用して、サーバ上にアップロード済みのファイルを選択して登録することができます。 URL指定 サーバ上にアップロードしたファイルにURLでアクセスできる場合には、Omeka Sの標準機能を用いて登録することができます。 どの方法を選ぶべきか? 方法 メリット デメリット php.ini 設定変更 すぐに対応可能 共有ホスティングでは変更不可の場合あり File Sideloadモジュール GUI制限を回避 モジュールのインストールが必要 URL指定 一括登録が可能 URLの準備が必要 まとめ 他にも良い方法があるかもしれませんが、参考になりましたら幸いです。

Omeka SのImage ServerでのCORS対応

Omeka SのImage ServerでのCORS対応

概要 Omeka SのImage ServerでのCORS対応に関する備忘録です。 背景 以下の記事で、Omeka SのIIIF ServerモジュールでのCORSエラーへの対応方法を紹介しました。 上記の設定により、IIIFマニフェストファイルはダウンロードできるようになりましたが、以下のように、画像がダウンロードできなくなるケースがありました。 Access to image at 'https://xxx/iiif/2/8455/full/86,/0/default.jpg' from origin 'https://uv-v4.netlify.app' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. この症状への対処方法について紹介します。 方法 複数の箇所にaccess-control-allow-originが記載されていることが原因です。 上記の記事の対応により、サイト全体に対してCORSの設定を行いましたので、Image Serverモジュールにおける設定が適用されないように修正します。なお、このような対応が必要なものは特定のバージョンのモジュールで、最新のモジュールなどを使用する場合には不要かもしれません。 具体的には、以下のファイルに記載されています。 https://github.com/Daniel-KM/Omeka-S-module-ImageServer/blob/master/src/Controller/ImageController.php 以下のように記載されており、条件によって適用の可否が設定されていますが、使用しているバージョンや他のモジュールとの組み合わせにより、この条件が適用されず、複数のaccess-control-allow-originが設定されてしまうことが原因かと思われます。 $headers->addHeaderLine('Access-Control-Allow-Origin', '*'); 上記のような記載をコメントアウトすることにより、'Access-Control-Allow-Origin' header contains multiple values '*, *'というエラーを解消することができました。 まとめ 同様の事象の遭遇することは稀かもしれませんが、Omeka Sを用いたIIIF画像配信にあたり、参考になりましたら幸いです。

Omeka S: Advanced Searchモジュールに対応したテーマを探す

Omeka S: Advanced Searchモジュールに対応したテーマを探す

概要 Omeka SのAdvanced Searchモジュールに対応したテーマを探す方法の一例について紹介します。 背景 Omeka SのAdvanced Searchモジュールを用いることで、以下の記事などで紹介しているように、Omeka Sの検索画面をカスタマイズすることができます。 特に、ファセットなどを追加できる点に利点があります。 一方、使用しているテーマがこのAdvanced Searchモジュールに対応していない場合、一部表示が崩れてしまうケースがあります。テーマ側でAdvanced Searchモジュールに対応しているかどうかを判断する方法の一例として、以下のように、テーマのフォルダの「view/common」の下に「advanced-search」の有無を確認する方法があります。 https://github.com/omeka-s-themes/freedom/tree/master/view/common/advanced-search この方法に基づいて、GitHubで公開されているOmeka Sのテーマのうち、Advanced Searchモジュールに対応しているものを探す方法を紹介します。 方法 以下の記事で紹介したサイトを使用します。 URLは以下です。 https://satoru196.notion.site/satoru196/6f898ed1352e4c9fa013eee635cbabf4?v=02cab757b6cf4df6bfbedfeb85eca0a5 特に、本記事の目的のため、「各テーマがAdvanced Searchモジュールに対応しているか」のフラグを追加しました。加えて、リポジトリのownerの情報も加え、各テーマが誰によって提供されているかを確認できるようにしました。 具体的には、以下の図に示すように、スター数で降順として、さらに「has_advanced_search」にチェックが入っているテーマのみに限定します。 この結果、「freedom」というテーマが「omeka-s-themes」というOmekaの公式Teamによって提供されており、相対的にスター数が多く、Advanced Searchモジュールにも対応していることがわかります。 https://github.com/omeka-s-themes/freedom まとめ Omeka Sのテーマの探し方の一例について紹介しました。Omeka Sの利用にあたり、参考になりましたら幸いです。

Pythonを使ってOmeka Sにメディアをアップロードする方法

Pythonを使ってOmeka Sにメディアをアップロードする方法

概要 Pythonを使ってOmeka Sにメディアをアップロードする方法の備忘録です。 準備 環境変数を用意します。 OMEKA_S_BASE_URL=https://dev.omeka.org/omeka-s-sandbox # 例 OMEKA_S_KEY_IDENTITY= OMEKA_S_KEY_CREDENTIAL= 初期化します。 import requests from dotenv import load_dotenv import os def __init__(self): load_dotenv(verbose=True, override=True) OMEKA_S_BASE_URL = os.environ.get("OMEKA_S_BASE_URL") self.omeka_s_base_url = OMEKA_S_BASE_URL self.items_url = f"{OMEKA_S_BASE_URL}/api/items" self.media_url = f"{OMEKA_S_BASE_URL}/api/media" self.params = { "key_identity": os.environ.get("OMEKA_S_KEY_IDENTITY"), "key_credential": os.environ.get("OMEKA_S_KEY_CREDENTIAL") } ローカルファイルをアップロードする def upload_media(self, path, item_id): files = {} payload = {} file_data = { 'o:ingester': 'upload', 'file_index': '0', 'o:source': path.name, 'o:item': {'o:id': item_id} } payload.update(file_data) params = self.params files = [ ('data', (None, json.dumps(payload), 'application/json')), ('file[0]', (path.name, open(path, 'rb'), 'image')) ] media_response = requests.post( self.media_url, params=params, files=files ) # レスポンスを確認 if media_response.status_code == 200: return media_response.json()["o:id"] else: return None IIIF画像をアップロードする 以下のようなIIIF画像のURLを指定して登録します。 https://dl.ndl.go.jp/api/iiif/1288277/R0000030/info.json def upload_media(self, iiif_url, item_id): payload = { 'o:ingester': 'iiif', 'file_index': '0', 'o:source': iiif_url, 'o:item': {'o:id': item_id}, } media_response = requests.post( self.media_url, params=self.params, headers={'Content-Type': 'application/json'}, data=json.dumps(payload) ) # レスポンスを確認 if media_response.status_code == 200: return media_response.json()["o:id"] else: return None まとめ Omeka Sへの画像登録にあたり、参考になりましたら幸いです。 ...

Omeka SのIIIF Serverモジュールで、表示方向を指定する

Omeka SのIIIF Serverモジュールで、表示方向を指定する

概要 Omeka SのIIIF Serverモジュールで、表示方向を指定する方法です。 IIIFでは、viewingDirectionプロパティを使用し、マニフェストやキャンバスの表示方向を指定することができます。 モジュールの設定 /admin/module/configure?id=IiifServer IIIFサーバモジュールの設定画面において、「viewing direction」の項目を探します。 Property to use for viewing directionでプロパティを指定できる他、デフォルトの表示方向を指定することもできます。 上記の例では、sc:viewingDirectionプロパティを指定していますが、任意のプロパティを設定可能です。 メタデータの追加 上記で指定したプロパティに対して、表示方向の値を入力します。 結果 以下のように、IIIFマニフェストファイルにおいても、viewingDirectionが設定され、左送りが実現できます。 参考 https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/ 以下、ChatGPTによる回答です。 viewingDirection プロパティには以下の4つの値を指定できます: left-to-right 左から右への表示(英語などの横書き言語に適しています)。 right-to-left 右から左への表示(アラビア語やヘブライ語、縦書きの日本語に適しています)。 top-to-bottom 上から下への表示(主に縦書きの言語に適しています)。 bottom-to-top 下から上への表示(特殊な用途向け)。 まとめ Omeka SのIIIF Serverモジュールの利用にあたり、参考になりましたら幸いです。

Omeka Sの特定のvocabularyのプロパティ一覧を取得する

Omeka Sの特定のvocabularyのプロパティ一覧を取得する

概要 Omeka Sの特定のvocabularyのプロパティ一覧を取得する方法です。 方法 以下を対象にします。 https://uta.u-tokyo.ac.jp/uta/api/properties?vocabulary_id=5 次のプログラムにより、プロパティ一覧をMS Excelに書き込みます。 import pandas as pd import requests url = "https://uta.u-tokyo.ac.jp/uta/api/properties?vocabulary_id=5" page = 1 data_list = [] while 1: response = requests.get(url + "&page=" + str(page)) data = response.json() if len(data) == 0: break data_list.extend(data) page += 1 remove_keys = ["@context", "@id", "@type", "o:vocabulary", "o:id", "o:local_name"] for data in data_list: for key in remove_keys: if key in data: del data[key] # DataFrameに変換 df = pd.DataFrame(data_list) df.to_excel("archiveshub.xlsx", index=False) 結果 以下のようなMS Excelが得られます。 o:label o:comment o:term Maintenance Agency A repository responsible for the maintenance of the archival finding aid. archiveshub:maintenanceAgency Is Maintenance Agency Of An archival finding aid for which the repository is responsible for the maintenance. archiveshub:isMaintenanceAgencyOf Encoded As An EAD document that is an encoding of the archival finding aid. archiveshub:encodedAs Encoding Of An archival finding aid of which the EAD document is an encoding. archiveshub:encodingOf Administers A resource which the agent manages. archiveshub:administers Is Administered By An agent that manages the resource. archiveshub:isAdministeredBy Provides Access To A resource to which the agent provides access. archiveshub:providesAccessTo Access Provided By An agent that provides access to the resource. archiveshub:accessProvidedBy Is Publisher Of A resource which the agent makes available. archiveshub:isPublisherOf Level An indicator of the part of an archival collection constituted by an archival resource. archiveshub:level Is Represented By A resource which represents the archival resource, such as an image of a text page, a transcription of text, an audio or video clip, or an aggregation of such resources. archiveshub:isRepresentedBy Origination An agent responsible for the creation or accumulation of the archival resource. archiveshub:origination Is Origination Of An archival resource for which the agent is responsible for the creation or accumulation. archiveshub:isOriginationOf Has Biographical History A narrative or chronology that places archival materials in context by providing information about their creator(s). archiveshub:hasBiographicalHistory Is Biographical History For An archival resource that the narrative or chronology places in context by providing information about their creator(s). archiveshub:isBiographicalHistoryFor Associated With A concept adjudged by a cataloguer to have an association with an archival resource which they consider useful for the purposes of discovering that resource. archiveshub:associatedWith Members Members archiveshub:members Country Code The ISO 3166-1 code for the country of the repository. archiveshub:countryCode Maintenance Agency Code The ISO 15511 code for the repository. archiveshub:maintenanceAgencyCode Body A literal representation of the content of the document. archiveshub:body Date created or accumulated The date, represented as a string, of a time interval during which the archival resource was created or accumulated. archiveshub:dateCreatedAccumulatedString Date created or accumulated The date, represented as a typed literal, of a time interval during which the archival resource was created or accumulated. archiveshub:dateCreatedAccumulated Date created or accumulated (start) The start date, represented as a typed literal, of a time interval during which the archival resource was created or accumulated. archiveshub:dateCreatedAccumulatedStart Date created or accumulated (end) The end date, represented as a typed literal, of a time interval during which the archival resource was created or accumulated. archiveshub:dateCreatedAccumulatedEnd Date of Birth The date of birth of the person. archiveshub:dateBirth Date of Death The date of death of the person. archiveshub:dateDeath Extent The size of the archival resource. archiveshub:extent Custodial History Custodial History archiveshub:custodialHistory Acquisitions Acquisitions archiveshub:acquisitions Scope and Content Scope and Content archiveshub:scopecontent Appraisal Appraisal archiveshub:appraisal Accruals Accruals archiveshub:accruals Access Restrictions Access Restrictions archiveshub:accessRestrictions Use Restrictions Use Restrictions archiveshub:useRestrictions Physical and Technical Requirements Physical and Technical Requirements archiveshub:physicalTechnicalRequirements Other Finding Aids Other Finding Aids archiveshub:otherFindingAids Location of Originals Location of Originals archiveshub:locationOfOriginals Alternate Forms Available Alternate Forms Available archiveshub:alternateFormsAvailable Related Material Related Material archiveshub:relatedMaterial Bibliography Bibliography archiveshub:bibliography Note Note archiveshub:note Processing Processing archiveshub:processing Name Name archiveshub:name Dates Dates archiveshub:dates Location Location archiveshub:location Other Other archiveshub:other Surname The surname of a person who is the focus of the concept archiveshub:surname Forename The forename of a person who is the focus of the concept archiveshub:forename Title The title of a person who is the focus of the concept archiveshub:title Epithet Epithet archiveshub:epithet Archival Box A number of archival boxes archiveshub:archbox Metre A number of metres archiveshub:metre Cubic Metre A number of cubic metres archiveshub:cubicmetre Folder A number of folders archiveshub:folder Envelope A number of envelopes archiveshub:envelope Volume A number of volumes archiveshub:volume File A number of files archiveshub:file Item A number of items archiveshub:item Page A number of pages archiveshub:page Paper A number of papers archiveshub:paper まとめ Omeka Sの利用にあたり、参考になりましたら幸いです。 ...