ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
English
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の使い方を調べる

Omeka Sの使い方を調べる

概要 Omeka Sの使い方を調べる方法に関する備忘録です。 調べ方 公式マニュアル 公式マニュアルです。こちらが最も充実しており、最新の内容が反映されていると思います。 https://omeka.org/s/docs/user-manual/ Chat With Copilot 次に、自然言語で調べる方法として、「Chat With Copilot」を使用する方法です。 以下のリポジトリにアクセスして、 https://github.com/omeka/omeka-s-enduser 「Chat With Copilot」をクリックします。 以下のようなチャット画面において、質問を行うことができます。 DeepWiki Chat With Copilotと同様、自然言語で問い合わせることができる環境として、DeepWikiサイトを作成しました。 https://deepwiki.com/omeka/omeka-s-enduser 以下のように、日本語による問い合わせも可能です。 公式マニュアルの日本語版:最新版ではありません。 英語の公式マニュアルを機械翻訳によって日本語化したサイトを以下で公開しています。 https://nakamura196.github.io/omeka-s-enduser/ja/ 最新でなかったり、フォーマットが崩れているなど、不完全な点が多いですが、参考になりましたら幸いです。 Zennの本 こちらも不完全ですが、個人的にOmeka Sの使い方をまとめています。こちらも参考になりましたら幸いです。 https://zenn.dev/nakamura196/books/70ab821362fe2f まとめ LLMのおかげで、OSSリポジトリの使い方を調べる手間が大幅に減少していると思います。LLMの発展に感謝いたします。

Omeka S Docker の紹介:デジタルコレクションのための最新かつセキュアなソリューション

Omeka S Docker の紹介:デジタルコレクションのための最新かつセキュアなソリューション

! 本記事はAIが作成しました。 Omeka S Docker へようこそ!このプロジェクトは、大学、ギャラリー、図書館、アーカイブ、博物館向けの Web パブリケーションシステムである Omeka S の本番環境対応 Docker セットアップを提供します。 📦 GitHub リポジトリ : https://github.com/nakamura196/omeka-s-docker なぜ Omeka S Docker なのか? デジタルコレクションの管理は複雑である必要はありません。そのため、Omeka S のデプロイと管理を簡素化する Docker ベースのソリューションを作成しました。 主な機能 🚀 クイックセットアップ : シングルコマンドで数分以内に Omeka S を稼働 🔒 セキュリティファースト : 非 root コンテナとセキュアなデフォルト設定を含むセキュリティベストプラクティスで構築 📦 モジュール管理 : 人気の Omeka S モジュールの自動インストールとアップデート 🔄 簡単なアップグレード : データの永続性を保ちながらシームレスなバージョンアップグレード 🐳 本番環境対応 : 開発環境と本番環境の両方に最適化 🌐 Traefik 統合 : リバースプロキシと SSL 終端のビルトインサポート はじめに 前提条件 Docker と Docker Compose がインストールされていること コマンドラインの基本的な知識 (オプション)SSL 付き本番環境デプロイ用のドメイン名 セットアップオプションの理解 この Docker セットアップは2つのデプロイモードを提供します: ...

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) ...

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にサイズが大きいファイルをアップロードする

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: 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の利用にあたり、参考になりましたら幸いです。 ...

Omeka SのCustom Vocabモジュールを使って、他のアイテムを関連づける

Omeka SのCustom Vocabモジュールを使って、他のアイテムを関連づける

概要 Omeka SのCustom Vocabモジュールを使って、他のアイテムを関連づける機会がありましたので、備忘録です。 背景 以下の記事で、カスタム語彙の使い方を説明しました。 今回は、文字列やURIsでなく、アイテムを関連づけてみます。 アイテムセットの作成 まず、関連付け対象とするアイテムを格納するアイテムセットを作成します。 今回は、「二次利用条件表示」というアイテムセットを作成します。 「二次利用条件表示」に関するアイテムの作成 以下のように、アイテムを作成しました。 ここのアイテムは、以下のように、タイトルや内容記述、識別子などを与えます。 カスタム語彙の作成 以下のように、カスタム語彙を作成します。ポイントとして、Vocab typeにおいて「アイテム」を選択し、アイテムにおいて、前のステップで作成したアイテムセット「二次利用条件表示」を選択します。 リソーステンプレートの作成 リソーステンプレートを作成して、データタイプにおいて、作成したカスタム語彙を選択します。 任意のアイテムの作成 任意のアイテムの作成において、先に作成したリソーステンプレートを選択します。結果、以下のように、設定したアイテムセットのアイテムから値を選択するようになります。 利点 今回説明したような方法を採用することで、指定した項目から値を選択する形式になり、表記揺れを防ぐことができます。また、その値をアイテムとして設定することで、メタデータの管理を一元化することが可能です。例えば、二次利用条件表示の内容を更新したい場合は、該当する二次利用条件表示のメタデータのみを更新すればよく、関連付けた複数のアイテムを個別に更新する必要はありません。 これは、Drupalにおけるタクソノミーのような使い方に該当します。 まとめ Omeka Sの利用にあたり、参考になりましたら幸いです。

Omeka SのOAI-PMHリポジトリのresumptionTokenの不具合への対応

Omeka SのOAI-PMHリポジトリのresumptionTokenの不具合への対応

概要 Omeka SのOAI-PMHリポジトリのresumptionTokenにおいて、有効期限内にもかかわらず、以下のように、[badResumptionToken]が出力される事例に遭遇しました。 この不具合への対処方法についてメモします。 対応 以下のファイルについて、$currentTimeと$expirationTimeを比較する処理を加えたところ、有効期限内のtokenが残るようになりました。 ... private function resumeListResponse($token): void { $api = $this->serviceLocator->get('ControllerPluginManager')->get('api'); $expiredTokens = $api->search('oaipmh_repository_tokens', [ 'expired' => true, ])->getContent(); foreach ($expiredTokens as $expiredToken) { $currentTime = new \DateTime(); // 追加 $expirationTime = $expiredToken->expiration(); // 追加 if (!$expiredToken || $currentTime > $expirationTime) { // 追加 $api->delete('oaipmh_repository_tokens', $expiredToken->id()); } // 追加 } 上記のような対応をしなくてもうまくいくケースがあったので、PHPのバージョン等による違いがあるのかもしれません。 参考 参考までに、OAI-PMHリポジトリモジュールによって作成されるテーブルの中身を確認しました。 ...