ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
English
Omeka SのIIIF ServerモジュールでのCORSエラー

Omeka SのIIIF ServerモジュールでのCORSエラー

概要 Omeka SのIIIF Serverモジュールを使ってIIIFマニフェストを配信した際、外部のビューア等で以下のCORSエラーが発生しました。 Access to fetch at 'https://xxx/iiif/2/09fd29d5-8497-4def-a64d-ca104284f90d/manifest' from origin 'https://universalviewer.io' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled. 本記事では、Omeka SでのCORSエラーへの対策について紹介します。 対策 https://github.com/Daniel-KM/Omeka-S-module-IiifServer?tab=readme-ov-file#cors-cross-origin-resource-sharing 以下を追加しました。 SetEnv APPLICATION_ENV "production" ... </FilesMatch> Header setIfEmpty Access-Control-Allow-Origin "*" Header setIfEmpty Access-Control-Allow-Headers "origin, x-requested-with, content-type" Header setIfEmpty Access-Control-Allow-Methods "GET, POST" これにより、CORSの問題を解決することができました。 ...

Service with name “Omeka\Acl” could not be created

Service with name “Omeka\Acl” could not be created

概要 Omeka S 4.1系にCleanUrlモジュールをインストール使用した際、以下のエラーが発生しました。 Laminas\ServiceManager\Exception\ServiceNotCreatedException Service with name “Omeka\Acl” could not be created. Reason: Resource id ‘Omeka\Controller\Site\Page’ already exists in the ACL この不具合は、以下のフォーラムでも報告されていました。 https://forum.omeka.org/t/error-installing-version-4-1/22522 対策 Omeka S 4.0系にダウングレードすることで、本不具合が解消されました。 まとめ 参考になりましたら幸いです。

‘session.name’ is not a valid sessions-related ini setting

‘session.name’ is not a valid sessions-related ini setting

概要 Omeka Sの運用において、以下のエラーが発生しました。 ‘session.name’ is not a valid sessions-related ini setting これについて、以下のフォーラムで同じ事象が報告されていました。 https://forum.omeka.org/t/session-name-is-not-a-valid-sessions-related-ini-setting/15499 原因と対処法 Omeka S 3系とPHP 8.1の組み合わせにおいて発生することがあるようでした。 The issue here is PHP 8.1 specifically. You won’t see it on 8.0 or older versions. An upcoming release of Omeka S will resolve this problem with PHP 8.1, but I don’t have a date currently set on when that will release. これは2022年の情報なので、例えば、2024年時点の新しいOmeka Sをバージョンアップすることで、本問題を回避することができました。 まとめ Omeka Sの運用にあたり、参考になりましたら幸いです。

Omeka SのCustomOntologyモジュールを使って、クラスやプロパティを追加する

Omeka SのCustomOntologyモジュールを使って、クラスやプロパティを追加する

概要 Custom Ontologyは、LOV、schema.org、W3Cといった標準的なオントロジーが利用できないときに、独自の語彙を追加することができるモジュールです。 本モジュールの基本的な使い方については、以下を参考にしてください。 https://nakamura196.hatenablog.com/entry/2021/07/24/235050 また本モジュールを使ってすでに作成した語彙を更新する方法は以下を参考にしてください。 今回は、すでに作成した語彙に、クラスやプロパティを追加する方法に関して説明します。 方法 以下のように、「myprefix」という独自語彙が作成済みであることを前提とします。 myprefix http://localhost/ns/myprefix/ この語彙にクラスなどを新規に追加する場合には、「Create a specific ontology」のフォームは空のままにしておきます。 結果、以下のように、追加を行うことができます。 参考 すでに語彙が作成済みの場合、「Create a specific ontology」のフォームを埋めると、以下のようにエラーが発生しますので、ご注意ください。 An ontology exists for the prefix "myprefix". An error was found. Turtle cannot be created. Nothing was imported. まとめ Custom Ontologyの使用にあたり、参考になりましたら幸いです。

Omeka-S-module-FixCjkSearchのv4.1.0をリリースしました。

Omeka-S-module-FixCjkSearchのv4.1.0をリリースしました。

概要 Omeka Sの標準機能では、日本語による全文検索がうまくいかない課題に対して、以下のモジュールを作成しています。 https://github.com/nakamura196/Omeka-S-module-FixCjkSearch 本モジュールについて、本記事執筆時点のOmeka Sの最新版、v4.1.0では動作しなくなっていたため、モジュールの最新版をリリースしました。 https://github.com/omeka-j/Omeka-S-module-FixCjkSearch/releases 不完全な点もあるかと思いますが、参考になりましたら幸いです。 参考 日本語による全文検索の不具合については、以下の記事も参考にしてください。 また、日本語検索時における「たこ」「タコ」「だこ」「ダコ」などのアクセスの区別については、以下の記事を参考にしてください。

Omeka Sの部分一致検索時のアクセントの区別

Omeka Sの部分一致検索時のアクセントの区別

概要 Omeka Sの部分一致検索について、アクセントの区別について調査しましたので、その備忘録です。 事象 例えば、「たこ」という文字列を含むアイテムが格納されている場合、「たこ」「タコ」「だこ」「ダコ」で同じ検索になります。 原因 インストール時にデフォルトで設定される照合順序「utf8mb4_unicode_ci」が原因のようでした。 具体的には、この照合順序は「case-insensitive」(大文字小文字を区別しない)および「accent-insensitive」(アクセントを区別しない)となるため、「たこ」「タコ」「だこ」「ダコ」で同じ検索になるようでした。 対策 ! 照合順序を変更する際、既存のデータに影響が出ないように注意して、変更前には必ずバックアップを取ることをお勧めします。 もし上記を区別したい場合、「value」というテーブルの照合順序を「utf8mb4_bin」に設定するのが一つの方法のようです。 上記の設定を行った結果、例えば「ダコ」で検索すると0件になりました。 まとめ Omekaの利用にあたり、参考になりましたら幸いです。

Omeka Sで動画を公開する

Omeka Sで動画を公開する

概要 Omeka Sで動画を公開する方法について調べてみましたので、備忘録です。 標準機能 Omeka Sは標準で動画をサポートしています。 以下は標準の機能を使用した例です。 以下のmp4ファイルを使用させていただいています。 https://file-examples.com/storage/fe4e1227086659fa1a24064/2017/04/file_example_MP4_480_1_5MG.mp4 具体的には、以下のように<video>タグが使用されていました。 <div class="media-render file"> <video src="https://omeka-d.aws.ldas.jp/files/original/5060f3ba2537676746a7aa69c9884c64daac300b.mp4" controls=""> <a href="https://omeka-d.aws.ldas.jp/files/original/5060f3ba2537676746a7aa69c9884c64daac300b.mp4">5060f3ba2537676746a7aa69c9884c64daac300b.mp4</a> </video> </div> 同様に.movファイルをアップロードしたところ、ブラウザ依存かと思いますが、無事に再生されました。 IIIF Server IIIF Serverモジュールを使用することで、IIIFマニフェストファイルを配信することが可能になります。 https://omeka.org/s/modules/IiifServer/ これをインストールし、合わせて、Universal Viewerをインストールします。 https://omeka.org/s/modules/UniversalViewer/ 結果、以下のように、Universal Viewerが表示され、マニフェストファイルに記載されたメタデータとともに、動画を表示することができました。 マニフェストファイルの確認(v2) IIIF Sererモジュールによって生成するマニフェストファイル(v2)を確認したところ、以下のように表示されました。 { "@context": [ "http://iiif.io/api/presentation/2/context.json", "http://wellcomelibrary.org/ld/ixif/0/context.json" ], "@id": "https://omeka-d.aws.ldas.jp/iiif/2/1/manifest", "@type": "sc:Manifest", "label": "mp4", "metadata": [ { "label": "Title", "value": "mp4" } ], "viewingDirection": "left-to-right", "license": "https://rightsstatements.org/vocab/CNE/1.0/", "related": { "@id": "https://omeka-d.aws.ldas.jp/s/test/item/1", "format": "text/html" }, "seeAlso": { "@id": "https://omeka-d.aws.ldas.jp/api/items/1", "format": "application/ld+json" }, "sequences": [ { "@id": "https://omeka-d.aws.ldas.jp/iiif/2/1/sequence/normal", "@type": "sc:Sequence", "label": "Unsupported extension. This manifest is being used as a wrapper for non-IIIF v2 content (e.g., audio, video) and is unfortunately incompatible with IIIF v2 viewers.", "compatibilityHint": "displayIfContentUnsupported", "canvases": [ { "@id": "https://omeka-d.aws.ldas.jp/iiif/ixif-message/canvas/c1", "@type": "sc:Canvas", "label": "Placeholder image", "thumbnail": "https://omeka-d.aws.ldas.jp", "width": null, "height": null, "images": [ { "@id": "https://omeka-d.aws.ldas.jp/iiif/ixif-message/imageanno/placeholder", "@type": "oa:Annotation", "motivation": "sc:painting", "resource": { "@id": "https://omeka-d.aws.ldas.jp/iiif/ixif-message-0/res/placeholder", "@type": "dctypes:Image", "width": null, "height": null }, "on": "https://omeka-d.aws.ldas.jp/iiif/ixif-message/canvas/c1" } ] } ] } ], "mediaSequences": [ { "@id": "https://omeka-d.aws.ldas.jp/iiif/2/1/sequence/s0", "@type": "ixif:MediaSequence", "label": "XSequence 0", "elements": [ { "@id": "https://omeka-d.aws.ldas.jp/files/original/bc5bbd4550ae7b6eab3affbc832bb158b5e280ab.mp4/element/e0", "@type": "dctypes:MovingImage", "label": "mp4", "metadata": [ { "label": "Title", "value": "mp4" } ], "thumbnail": "https://omeka-d.aws.ldas.jp/application/asset/thumbnails/video.png", "rendering": [ { "@id": "https://omeka-d.aws.ldas.jp/files/original/bc5bbd4550ae7b6eab3affbc832bb158b5e280ab.mp4", "format": "video/mp4" } ], "service": { "@id": "https://omeka-d.aws.ldas.jp/iiif/2/5", "profile": "http://wellcomelibrary.org/ld/ixif/0/alpha.json" }, "width": 0, "height": 0 } ] } ] } v2では動画などには非対応のため、mediaSequencesをUniversal Viewerが独自にロードして表示しているようです。 ...

Bootstrap 5を用いたOmeka Sのテーマver 4.0.2をリリースしました。

Bootstrap 5を用いたOmeka Sのテーマver 4.0.2をリリースしました。

概要 Bootstrap 5を用いたOmeka Sのテーマを更新しました。今回の更新で追加した機能などについて紹介します。 https://github.com/ldasjp8/Omeka-S-theme-Bootstrap5/releases/tag/4.0.2 新機能 詳細検索ボタンのリンク設定 テーマの設定画面に「Advanced Search URL」という項目を追加しました。 上記の例では、「page/advanced」というページに遷移する設定を行っています。 具体的には、以下の「詳細検索」のボタンをクリックした際に、ここで設定したURLに遷移します。(未設定の場合は、Omekaの通常の詳細検索のページに遷移します。) 以下の記事で、独自の検索ページを作成する方法を紹介しました。こちらと組み合わせて使用することで、独自の検索ページとの画面遷移を実現できます。 不具合の修正 ソート 以下のように、ソート項目が表示されない不具合がありました。 以下のように、$sortByとして使用していたものを、$sortConfigに変更する必要がありました。 https://github.com/ldasjp8/Omeka-S-theme-Bootstrap5/commit/5928a37fc4af1cb26ac0b6df13c25cf4f57eb66e#diff-2388527aaa944d338d7a5144cb4e49aa659702c2d628d12103e090f7cd6ed3bc Advanced Search Advanced Searchモジュールと組み合わせて使用した際、レイアウトが崩れる箇所がありました。まだ統一感が取れていない点がありますが、改善しました。 まとめ Omeka Sの利用にあたり、お役に立ちましたら幸いです。

Omeka SのAdvanced Searchモジュールでの部分一致検索

Omeka SのAdvanced Searchモジュールでの部分一致検索

概要 Advanced Searchモジュールを使って、追加したフィルタで部分一致検索を行う方法について説明します。 上記では、「とる」という文字列をクエリとして、タイトルが「abc タイトル」のアイテムがヒットしています。 背景 Advanced Searchモジュールを使用すると、検索条件やファセットなどを柔軟に設定することができます。 https://omeka.org/s/modules/AdvancedSearch/ 特に、「Reference」モジュールと組み合わせることで、以下のようなファセット検索を実現できます。 フィルタの追加もできます。ただし、フィルタを用いた部分一致検索を行う場合には、設定が必要です。 上記の例では、「とる」という文字列をクエリとした際、タイトルが「abc タイトル」のアイテムがヒットしていません。 設定方法 フィルタの追加は、以下の設定画面のFiltersで行います。(slugの部分は必要に応じて読み替えてください。) /admin/search-manager/config/1/configure 上記の例では、titleとsubjectをフィルタとして以下のように追加しています。 title = Title subject = Subject advanced = Filters = Advanced = このままでは、titleおよびsubjectに対する完全一致になります。 これに対して、以下のように、Textを追加します。 title = Title = Text subject = Subject advanced = Filters = Advanced = これにより、titleについては部分一致、subjectについては完全一致、を実現することができます。 まとめ Omeka SのAdvanced Searchモジュールの利用にあたり、参考になりましたら幸いです。

Omeka Sの検索結果に表示する項目を指定する

Omeka Sの検索結果に表示する項目を指定する

概要 以下のように、検索結果に表示する項目を指定する方法について説明します。 設定 デフォルトの設定では、以下のように、「見出し」にタイトル(dcterms:title)、「Body」に説明文(dcterms:description)が表示されます。 これに対して、サイトごとの設定画面の以下の箇所を変更することにより、「見出し」「Body」それぞれに表示する項目を設定することができます。 Advanced Searchの場合 Advanced Searchモジュールを使用している場合でも、この設定は引き継がれます。 以下でソースコードを確認できます。 https://github.com/Daniel-KM/Omeka-S-module-AdvancedSearch/blob/master/view/search/resource-list.phtml browse_heading_property_termとbrowse_body_property_termの設定に基づき、表示項目が指定されています。 <?php ... $headingTerm = $setting('browse_heading_property_term'); $bodyTerm = $setting('browse_body_property_term'); ... ?> <?php if ($title): ?> <h3><?= $escape($title) ?></h3> <?php endif; ?> <ul class="resource-list search-results-list<?= $gridListMode === 'list_only' ? ' list' : ($gridListMode === 'grid_only' ? ' grid' : '') ?>"> <?php /** @var \Omeka\Api\Representation\AbstractResourceEntityRepresentation $resource */ foreach ($resources as $resource): ... $heading = $headingTerm ? $resource->value($headingTerm, ['lang' => $langValue]) : null; $heading = $heading ? $heading->asHtml() : $escape($resource->displayTitle($untitled, $lang)); $body = $bodyTerm ? $resource->value($bodyTerm, ['lang' => $langValue]) : null; $body = $body ? $body->asHtml() : $escape($resource->displayDescription(null, $lang)); ?> <li class="resource <?= $resourceType ?>"> <div class="resource-thumbnail"> <?= $hyperlink->raw($resourceThumbnail, $resourceUrl, ['class' => 'resource-link']) ?> </div> <div class="resource-metadata"> <h4><?= $resource->linkRaw($heading) ?></h4> <div class="description"> <?= $body ?> </div> </div> </li> <?php endforeach; ?> </ul> まとめ Omeka Sの検索結果に表示する項目の指定にあたり、参考になりましたら幸いです。 ...

Omeka Sで独自の検索ページを作成する

Omeka Sで独自の検索ページを作成する

概要 Omeka Sで以下のような独自の検索ページを作成する方法について紹介します。 背景 Omeka Sでの検索ページの作成にあたり、詳細検索画面で絞り込み項目を限定する方法を紹介しました。 一方、概要で紹介したように、指定した項目だけを列挙した検索画面を作成したい場合もあります。このような検索ページの作成にあたり、「Advanced Search」モジュールを使うことができます。 https://omeka.org/s/modules/AdvancedSearch/ 以下のページで使い方を説明しています。以下ではApache Solrとの連携を行っていますが、Referenceモジュールなどと組み合わせて、Omeka S単体で使用することもできます。 ただし、「Advanced Search」モジュールは機能が豊富なゆえに、使いこなすのが難しい面があります。そこで、今回は簡単に上記のようなカスタム検索ページを作成する方法について紹介します。 作成方法 具体的には、検索用の独自ページを作成します。 以下のように、特定のサイトで、ページを作成します。 「HTML」ブロックを追加します。 「ソース」ボタンをクリックして、以下のHTMLをコピペします。 <div id="dynamic-fields"></div> <button id="submit" class="btn btn-primary">検索</button> <script> const params = [ { label: "キーワード検索", type: "in", placeholder: "すべてのフィールドに対して検索します。", help: "部分一致", }, { label: "タイトル", property: 1, type: "in", help: "部分一致" }, { label: "資料番号", property: 10, type: "eq", help: "完全一致" }, { label: "主題", property: 3, type: "in", help: "部分一致" }, ]; // 以下はそのまま document.addEventListener("DOMContentLoaded", () => { initializeSearchForm(); setupFormSubmission(); }); function initializeSearchForm() { const container = document.getElementById("dynamic-fields"); params.forEach((param, index) => { container.appendChild(createFormGroup(param, index)); }); } function createFormGroup(param, index) { const formGroup = document.createElement("div"); formGroup.className = "form-group mb-4"; formGroup.appendChild(createLabel(param.label)); formGroup.appendChild( createInput( `property[${index}][text]`, "form-control", param.placeholder ) ); formGroup.appendChild(createHelpText(param.help)); formGroup.appendChild( createHiddenInput(`property[${index}][type]`, param.type) ); if (param.property) { formGroup.appendChild( createHiddenInput(`property[${index}][property][]`, param.property) ); } formGroup.appendChild( createHiddenInput(`property[${index}][joiner]`, "and") ); return formGroup; } function createLabel(text) { const label = document.createElement("label"); label.className = "mb-1"; label.textContent = text; return label; } function createInput(name, className, placeholder) { const input = document.createElement("input"); input.type = "text"; input.name = name; input.className = className; input.placeholder = placeholder || ""; // set value const urlParams = new URLSearchParams(window.location.search); const value = urlParams.get(name); if (value) { input.value = value; } return input; } function createHelpText(text) { const small = document.createElement("small"); small.className = "form-text text-muted"; small.textContent = text; return small; } function createHiddenInput(name, value) { const input = document.createElement("input"); input.type = "hidden"; input.name = name; input.value = value; return input; } function setupFormSubmission() { document.getElementById("submit").addEventListener("click", () => { const form = document.createElement("form"); form.method = "GET"; form.action = "../item"; form.style.display = "none"; Array.from( document.querySelectorAll("#dynamic-fields input") ).forEach((input) => { form.appendChild(input.cloneNode(true)); }); document.body.appendChild(form); form.submit(); }); } </script> 結果、以下のように、ボタンのみが表示されます。 ...

Omeka SのCleanUrlモジュールインストール時の不具合対応

Omeka SのCleanUrlモジュールインストール時の不具合対応

概要 以下の環境で構築したOmeka SにClean Urlモジュールをインストールしようとしたところ、 PHP Version: 8.3.2 Omeka S Version: 4.0.4 Clean Url Version: 3.17.7 以下のメッセージが表示されました。 Deprecated: Creation of dynamic property CleanUrl\Router\Http\CleanRoute::$priority is deprecated in /var/www/html/vendor/laminas/laminas-router/src/SimpleRouteStack.php on line 285 この課題に対して、以下に記載したように、/modules/CleanUrl/src/Router/Http/CleanRoute.phpファイルを一部修正することにより、上記メッセージを非表示にすることができました。 https://github.com/Daniel-KM/Omeka-S-module-CleanUrl/issues/19 .htaccessファイル内のSetEnv APPLICATION_ENV "production"という記述を、SetEnv APPLICATION_ENV "development"に設定していない場合には、そもそも上記メッセージが表示されないかもしれませんが、参考になりましたら幸いです。 補足 Clean Urlモジュールでは、インストール時に、/configフォルダにcleanurl.config.phpというファイルを作成するようです。 https://gitlab.com/Daniel-KM/Omeka-S-module-CleanUrl#installation そのため、configフォルダの権限によっては、以下のようなメッセージが表示され、インストールができないケースがありました。 The file “cleanurl.config.php” in the config directory of Omeka is not writeable. このような場合、いったんconfigフォルダの権限をfilesなどを同じにして、インストールを行い、その後、元に戻す、といったプロセスが必要になるかと思われます。 こちらも参考になりましたら幸いです。

File Sideload: Omeka Sで画像を一括アップロードする

File Sideload: Omeka Sで画像を一括アップロードする

概要 Omeka Sで画像を一括アップロードするためのモジュール「File Sideload」について説明します。 https://omeka.org/s/modules/FileSideload/ 以下で公式のマニュアルが公開されています。 https://omeka.org/s/docs/user-manual/modules/filesideload/ モジュールのインストール 通常の方法でインストールできます。 https://omeka.org/s/docs/user-manual/modules/#installing-modules モジュールの設定 インストール後、以下のような設定画面に遷移します。ここで、一括登録用の画像をアップロードするためのフォルダへのパスを指定します。権限によるかと思いますが、任意のパスを指定することができるかと思います。 画像のアップロード 先に指定したフォルダに画像をアップロードします。これは、Omekaの機能を使用するのではなく、WinSCPやFileZillaなどのツールを使って、Omekaがインストールされているサーバに直接ファイルをアップロードしておきます。 メディアの登録 以下のように、右のメニューから「サイドロードするディレクトリ」を選択し、ディレクトリを選択します。 指定したディレクトリ内のファイルを再帰的に登録したい場合には、「Ingest directory recursively」オプションを有効化します。 まとめ Omeka Sへの画像の一括アップロードにあたり、「Bulk Import」モジュールを用いる方法や、REST APIと各種プログラミング言語を用いる方法、などがありますが、本記事で紹介した「File Sideload」モジュールを使用する方法も参考になりましたら幸いです。

Omeka ClassicとOmeka Sの違い

Omeka ClassicとOmeka Sの違い

Omeka ClassicとOmeka Sの違いについて、ChatGPT4による回答を共有します。参考になりましたら幸いです。 OmekaとOmeka Sは、デジタルコレクションと展示を構築するためのオープンソースのウェブパブリッシングプラットフォームです。どちらも学術機関、図書館、博物館、アーカイブ、教育者、および文化遺産を扱う組織によって広く使用されています。しかし、OmekaとOmeka Sは設計と使用目的において異なる点があります。 Omeka (Classic) 対象 : 個人や小規模プロジェクトに最適です。学校のプロジェクト、個人の研究、小規模なアーカイブコレクションに適しています。 機能 : インストールが簡単で、直感的な管理インターフェイスを提供します。個々のウェブサイトやプロジェクトに焦点を当て、単一のサイトの管理と展示作成に特化しています。 使用シナリオ : 小規模なデジタルコレクションの展示や教育目的のプロジェクトに最適です。プラグインとテーマを使用してカスタマイズが可能ですが、複数のプロジェクトやコレクションの統合管理には向いていません。 Omeka S 対象 : 大学、図書館、博物館など、複数のプロジェクトやコレクションを持つ組織に最適です。 機能 : Omeka Sは、複数のサイトの作成と管理を可能にするよう設計されています。一つのインストールで、異なるプロジェクトやコレクションを跨いだリソースの共有、再利用、および関連付けが可能です。 使用シナリオ : 複数のデジタルコレクションや展示を持ち、それらを統合して管理したい大規模な機関に最適です。API、高度な検索機能、そしてLinked Open Dataのサポートを含む、より高度な機能を提供します。 主な違い 使用目的 : Omeka Classicは小規模なプロジェクトや個人ユーザー向け、Omeka Sは複数のプロジェクトやサイトを持つ組織や機関向けに設計されています。 機能性 : Omeka Sは、複数のサイト管理、Linked Open Dataのサポート、API経由でのデータアクセスなど、より高度な機能を提供します。 拡張性と相互運用性 : Omeka Sは、コレクション間でアイテムを共有し、より広範なデータの統合と相互運用性を目指しています。 選択はプロジェクトの規模、目的、および管理するデータの種類に依存します。小規模なプロジェクトや個人的な使用にはOmeka Classicが、複数のプロジェクトや大規模なデータセットを扱う組織にはOmeka Sが適しています。

Omeka Sの詳細検索画面で絞り込み項目を限定する

Omeka Sの詳細検索画面で絞り込み項目を限定する

概要 Omeka Sで構築したサイトごとの詳細検索画面において、ユーザがプロパティを選択した上で、特定の値などで検索することができます。 この機能について、デフォルトの設定では、Omeka Sに登録されているすべてのプロパティが表示されてしまうため、利用しづらいことがあります。 この課題に対して、以下のように、選択肢として表示するプロパティを限定する方法について紹介します。 本記事は、Omeka Sのversion 4.0.4を対象にしています。 マニュアル 以下に記載があります。 https://omeka.org/s/docs/user-manual/sites/site_settings/#:~:text=Advanced search vocabulary members 最新ではないですが、機械翻訳によって作成した日本語版マニュアルでは、以下に記載があります。 https://nakamura196.github.io/omeka-s-enduser/ja/sites/site_settings/#:~:text=選択できます。-,高度な検索語彙メンバー,-では、プロパティと 方法 以下にアクセスして、設定 タブを選択します。 /admin/site/s/<サイト名> 検索 という見出しを持つ箇所において、Advanced search vocabulary members という項目があります。 このフォームを使って、詳細検索に使用するプロパティを限定することができます。 まとめ Omeka Sのバージョンによって一部操作方法が異なる可能性がありますが、参考になりましたら幸いです。

Omeka Sの一括登録用モジュール: Bulk Importの使い方(2024-02版)

Omeka Sの一括登録用モジュール: Bulk Importの使い方(2024-02版)

概要 Omeka Sのアイテムやメディアの一括登録用モジュールとして、Bulk Importがあります。 https://github.com/Daniel-KM/Omeka-S-module-BulkImport 継続的な更新が行われており、色々と便利になっていたので、備忘録です。 インストール 通常の方法でインストールできます。ただし、Logモジュールを事前にインストールしておく必要があります。 https://github.com/Daniel-KM/Omeka-S-module-Log 使い方 ここでは、CSVファイルを使った登録例を紹介します。 設定 まず、以下にアクセスして、編集アイコンをクリックします。 /admin/bulk/importer “Importer"タブの"Mapper"項目について、“マニュアル/Manual"を選択します。これにより、CSVのカラム名とOmeka Sの項目の手動での対応付けが可能になります。 次に、“Processor"というタブに移動します。ここでの設定はあとから(CSVファイルをアップロード後)でも変更可能ですが、ここでデフォルト値を設定しておくと、間違いや設定漏れがなくなり、効率的かと思います。 設定例として、例えば"Action"を"Revise data of resouces"にします。これにより、部分的な更新(PATCH)が可能になります。具体的には、CSVのカラムにないOmeka Sの項目があった場合、Omeka Sでは当該項目の値が残り、CSVにあるカラムに対応するOmeka Sの項目のみが更新され、比較的安全な更新方法かと思われます。 その他、“Action on unidentified resources"を"Create a new resource"にしておくと、既存のリソースがあれば更新され、ない場合には新規作成される、といった処理になります。この 既存のリソースがあれば を判断する基準として、“Identifier to use for linked resources or update"を設定します。例えば、dcterms:identifierに識別子を与えている場合、その値に基づき、既存リソースの有無がチェックされます。 また、“可視性"を"非公開"にしておくと、新規登録されたリソースは非公開の設定になり、後から個別に公開/非公開を切り替えることができます。 インポート 以下にアクセスして、“CSV - Items"をクリックします。(Mediaなど、他のリソースを登録する場合には、該当するタイプを選択します。) /admin/bulk/bulk-import Step 2/4: Mapper 次の画面でCSVファイルをアップロード後、“Step 2/4: Mapper"画面に遷移します。ここで、CSVファイルとOmeka Sの項目のマッピングを行います。 上記では、visibilityのような予約語が一部使われていますが、これらは以下のファイルで確認できます。 https://github.com/Daniel-KM/Omeka-S-module-BulkImport/blob/master/data/mappings/fields_to_metadata.php 例えば、以下のように設定されており、visibilityまたはpublicは、Omeka Sのo:is_publicにマッピングされる、ということがわかります。 'visibility' => 'o:is_public', 'public' => 'o:is_public', 上記のようなルールに当てはらないカラムについては、手動でOmeka Sの項目とマッピングを行うことができます。 ...

Mirador 3でPresentation API v2のマニフェストが表示できない時の対処例

Mirador 3でPresentation API v2のマニフェストが表示できない時の対処例

概要 以下のようなPresentation API v2のマニフェストファイルをMirador 3にロードした際、表示エラーが生じました。 https://gist.githubusercontent.com/nakamura196/42fb6bca6a9fa137234c334cb313fc58/raw/4188ebccb7406ff5132331a4fecc4ace8bdd7ebc/ng.json 以下、Mirador 3での表示です。 この原因と対処法について調べたので、共有します。 原因 以下のエラーメッセージが表示されていました。IIIF v2を入力しているにもかかわらず、v3と判断されているようでした。 Error: A IIIF v3 localized property value must have an array as the value for a given language. at PropertyValue.ts:126:20 at Array.map (<anonymous>) at t.parse (PropertyValue.ts:123:29) at t.getLabel (ManifestResource.ts:35:28) at canvases.js:162:12 at index.js:67:25 at h (defaultMemoize.js:123:20) at index.js:81:40 at h (defaultMemoize.js:123:20) at Function.mapToProps (OpenSeadragonViewer.js:39:12) これは、以下のように、canvasのlabelがオブジェクトの形で記述されている際に発生するようでした。 canvases": [ { "@id": "https://islamic-architecture.aa-ken.jp/omekas/iiif/2/monument1/canvas/p1", "@type": "sc:Canvas", "label": { "type": "literal", "property_id": 1, "property_label": "Title", "is_public": true, "@value": "0001-01" }, ... } ] なお、上記の記述方法は、Presentation API ValidatorではOKでした。 ...

Omeka SのモジュールIIIF Viewersの更新

Omeka SのモジュールIIIF Viewersの更新

概要 IIIF ViewersはOmeka Sのモジュールの一つです。 https://github.com/omeka-j/Omeka-S-module-IiifViewers 最新版のリリースは以下です。 https://github.com/omeka-j/Omeka-S-module-IiifViewers/releases/latest 今回、いくつかの更新を行いましたので、備忘録です。 Universal Viewerのバージョン更新 Universal Viewerのバージョンをv4.0.25に更新しました。 合わせて、READEME.mdの以下の箇所に、Universal Viewerの更新方法を記載しました。 https://github.com/omeka-j/Omeka-S-module-IiifViewers?tab=readme-ov-file#compilation-of-universal-viewer これは、以下のモジュールの記載を参考にしています。 https://github.com/Daniel-KM/Omeka-S-module-UniversalViewer また、Miradorの更新方法も記載しましたが、既に最新版が導入されていたので、更新は行われていません。 バグ修正 以下に加えて、細かなバグを修正しました。 Module.php 以下のエラーが生じていました。 Deprecated: Creation of dynamic property IiifViewers\Module::$dependencies is deprecated in /var/www/html/modules/IiifViewers/Module.php on line 147 以下のように修正しました。 namespace IiifViewers; use Omeka\Module\AbstractModule; use IiifViewers\Form\ConfigForm; use Laminas\Mvc\Controller\AbstractController; use Laminas\EventManager\Event; use Laminas\EventManager\SharedEventManagerInterface; use Laminas\Mvc\MvcEvent; use Laminas\View\Renderer\PhpRenderer; use Laminas\ServiceManager\ServiceLocatorInterface; use Omeka\Module\Exception\ModuleCannotInstallException; use Omeka\Stdlib\Message; class Module extends AbstractModule { protected $dependencies = []; // Define the property at the beginning // Rest of your code... iiif-viewers.phtml 以下のWarningが生じていたので、いずれも修正しました。 ...

Omeka Sで非公開ファイルを扱う

Omeka Sで非公開ファイルを扱う

概要 Omeka Sでは、リソース(アイテムセット、アイテム、メディアなど)単位で公開/非公開の設定を行うことができますが、メディア等に紐づけられた画像などのファイルについては、非公開の設定が適用されていても、ファイルのURLを知っていれば誰でもアクセスすることができます。通常、以下のようなURLになります。 <Omekaのインストールディレクトリ>/files/original/<ハッシュ値>.jpg メディアに非公開の設定が適用されていれば、このファイルのURLが知られることは稀かと思いますが、「リンクを知っている全員」がアクセスできてしまう状況を避けたいケースがあります。 上記に対応するモジュールとして、「Access」がありました。 https://omeka.org/s/modules/Access/ 本記事では、本モジュールについて簡単に紹介します。 参考: Drupalの場合 Drupalにおいては、Private filesを使って、上記の問題に対応することができました。この実現にあたっては、以下の記事が参考になりました。 https://wheelercreek.com/blog/how-configure-private-files-directory-drupal-9-10 ファイルをPrivate filesとして登録し、 Access Content や Field Permissions モジュールと組み合わせて、匿名ユーザによるPrivate filesへのアクセスを制限することができました。 Accessモジュールの使い方 本モジュールはIPアドレスによるアクセス制御や Guest モジュールとの組み合わせによる匿名ユーザによるアクセス制御など、多様な設定を行うことができるようです。 今回は、単純な設定として、original(オリジナル)およびlarge(オリジナルより小さいサイズの画像)、medium(ラージよりも小さい画像)などについて、匿名ユーザはoriginalおよびlargeの画像は閲覧できないが、medium以下の画像は閲覧できるようにしてみます。 つまり、非ログインユーザは、大きな画像は閲覧できないが、比較的小さな画像のみ閲覧できる環境を構築します。 インストール 通常の方法でインストールできます。 ウェブサーバの設定 この点が少し面倒かもしれません。以下に記載があります。 https://github.com/Daniel-KM/Omeka-S-module-Access?tab=readme-ov-file#configuration-of-the-web-server 以下、Apacheの例ですが、.htaccessファイルのRewriteEngine Onに後に、以下を追記します。 # Set rule for original and selected derivative files (usually at least large thumbnails). RewriteRule "^files/(original|large)/(.*)$" "/access/files/$1/$2" [P] 上記は、ドメインまたはサブドメインのルートにOmeka Sがインストールされている場合です。その他の方法でインストールされた場合の設定例についても、上記のマニュアルに記載されています。 上記により、<Omekaのインストールディレクトリ>/files/original/<ハッシュ値>.jpgなどにアクセスすると、<Omekaのインストールディレクトリ>/access/files/original/<ハッシュ値>.jpgというURLに書き換えられます。 書き換えられた後のURLはOmeka Sが動的に作成するもので、IPアドレスやログイン状態などを考慮して、画像を返却するかを決定するようです。 先に紹介したDrupalにおいては、Public filesがファイルが格納されているパス、Private filesがDrupalが動的に生成するURLになるようなので、このような切り替えをOmeka Sでも実現していることになります。 設定 モジュールのインストール後、以下のような設定画面が表示されます。今回の用途では、全てのチェックを外しておきます。 本モジュールを有効にすることにより、リソースごとにAccess levelを設定できるようになります。今回の用途では、禁止を与えます。 「いらすとや」さんの画像を利用しています。Access statusがforbiddenになっていますが、ログインユーザは当該画像を閲覧できています。 一方、非ログインユーザで画像を閲覧した際には、鍵のアイコンが表示されるようになりました。オリジナル画像等にアクセスできていないことが確認できます。 ...

Amazon Lightsail上に立てたOmeka SからAmazon SESでメールを送信する

Amazon Lightsail上に立てたOmeka SからAmazon SESでメールを送信する

概要 Amazon Lightsail上に立てたOmeka Sからメールを送るには、メールの送信設定が必要なようです。今回は、Amazon SESを使用する方法を紹介します。 https://aws.amazon.com/jp/ses/ 以下のフォーラムでのやりとりが参考になりました。 https://forum.omeka.org/t/configuring-sendmail-or-smtp-for-omeka-s-on-amazon-lightsail/19335/1 Amazon SESの設定 以下のサイトなどを参考にして、Amazon SESの設定を行います。 https://qiita.com/Shun_konno/items/f51ae599b68e0d2d36ea Omeka Sの設定 Omeka S の local.config.php ファイルを以下のように編集します。 <?php return [ 'logger' => [ // ログ設定(必要に応じて) ], 'mail' => [ 'transport' => [ 'type' => 'smtp', // SMTP を使用 'options' => [ 'name' => 'ses-smtp-user', // 任意の名前 'host' => 'email-smtp.us-east-1.amazonaws.com', // SES SMTP サーバーエンドポイント 'port' => 587, // SES がサポートするポート(例: 587) 'connection_class' => 'plain', // 認証タイプ 'connection_config' => [ 'username' => 'your-ses-smtp-username', // SES SMTP ユーザー名 'password' => 'your-ses-smtp-password', // SES SMTP パスワード 'ssl' => 'tls', // SSL タイプ('tls' 推奨) 'use_complete_quit' => true, ], ], ], ], // その他の設定... ]; host には、使用している AWS リージョンに応じた Amazon SES SMTP サーバーのエンドポイントを指定してください。例では us-east-1 リージョンのエンドポイントを使用していますが、必要に応じて変更してください。 username と password は、Amazon SES で生成した SMTP クレデンシャルを使用してください。 まとめ Amazon Lightsailを用いたOmeka Sの利用にあたり、参考になりましたら幸いです。 ...