ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
English
(非標準)Omeka SのOAI-PMH RepositoryモジュールでDeleteレコードを出力してみる

(非標準)Omeka SのOAI-PMH RepositoryモジュールでDeleteレコードを出力してみる

概要 Omeka SのOAI-PMH RepositoryモジュールでDeleteレコードを出力してみましたので、備忘録です。 背景 以下のモジュールを使用することにより、OAI-PMHのリポジトリ機能を構築することができます。 https://omeka.org/s/modules/OaiPmhRepository/ ただ、確認した限り、Deleteレコードを出力する機能はないようでした。 関連モジュール Omekaの標準機能では、削除されたリソースを保存する機能はないかと思います。 一方、以下のモジュールは削除されたリソースを保持する機能を追加します。 https://github.com/biblibre/omeka-s-module-Necropolis 本モジュールを有効化することにより、以下のように、リソースがいつ誰によって削除されたかを記録できるようになりました。 OAI-PMH Repositoryモジュールへの応用 上記のモジュールで作成される削除されたリソースの情報が格納されるテーブルを使って、Deleteレコードの出力を試みます。 以下のファイルのlistResponse関数に追記します。 private function listResponse($verb, $metadataPrefix, $cursor, $set, $from, $until): void { /** * @var \Omeka\Api\Adapter\Manager $apiAdapterManager * @var \Doctrine\ORM\EntityManager $entityManager */ $apiAdapterManager = $this->serviceLocator->get('Omeka\ApiAdapterManager'); $entityManager = $this->serviceLocator->get('Omeka\EntityManager'); $itemRepository = $entityManager->getRepository(\Omeka\Entity\Item::class); $qb = $itemRepository->createQueryBuilder('omeka_root'); $qb->select('omeka_root'); $query = new ArrayObject; $expr = $qb->expr(); // 以下を追加 if ($set === 'o:deleted') { $settings = $this->serviceLocator->get('Omeka\Settings'); $namespaceId = $settings->get('oaipmhrepository_namespace_id', 'default_namespace'); // 削除済みレコードを necropolis_resource テーブルから取得する $deletedResourceRepository = $entityManager->getRepository(\Necropolis\Entity\NecropolisResource::class); // カスタムエンティティ // oaipmhrepository_expose_mediaに応じて、mediaとitemの取得を分ける $exposeMedia = $settings->get('oaipmhrepository_expose_media', false); // デフォルトはfalse(itemのみ) if ($exposeMedia) { $qb = $deletedResourceRepository->createQueryBuilder('necropolis_resource'); } else { // Itemのみを取得する $qb = $deletedResourceRepository->createQueryBuilder('necropolis_resource') ->andWhere('necropolis_resource.resourceType = :itemType') ->setParameter('itemType', 'Omeka\Entity\Item'); } // 日付フィルタリング if ($from) { $qb->andWhere($expr->gte('necropolis_resource.deleted', ':from')); $qb->setParameter('from', $from); } if ($until) { $qb->andWhere($expr->lte('necropolis_resource.deleted', ':until')); $qb->setParameter('until', $until); } // 結果の制限とオフセット $qb->setMaxResults($this->_listLimit); $qb->setFirstResult($cursor); $paginator = new Paginator($qb, false); $rows = count($paginator); if ($rows == 0) { $this->throwError(self::OAI_ERR_NO_RECORDS_MATCH, new Message('No records match the given criteria.')); // @translate } else { if ($verb == 'ListIdentifiers') { $method = 'appendHeader'; } elseif ($verb == 'ListRecords') { $method = 'appendRecord'; } $verbElement = $this->document->createElement($verb); $this->document->documentElement->appendChild($verbElement); foreach ($paginator as $deletedEntity) { // 削除されたリソースの情報をOAI-PMHレスポンスに追加 $header = $this->document->createElement('header'); $header->setAttribute('status', 'deleted'); // 削除済みレコードとして設定 $identifier = $this->document->createElement('identifier', 'oai:' . $namespaceId . ":" . $deletedEntity->getId()); $header->appendChild($identifier); $datestamp = $this->document->createElement('datestamp', $deletedEntity->getDeleted()->format('Y-m-d\TH:i:s\Z')); $header->appendChild($datestamp); $verbElement->appendChild($header); } // Resumption Token の処理 if ($rows > ($cursor + $this->_listLimit)) { $token = $this->createResumptionToken($verb, $metadataPrefix, $cursor + $this->_listLimit, $set, $from, $until); $tokenElement = $this->document->createElement('resumptionToken', (string) $token->id()); $tokenElement->setAttribute('expirationDate', $token->expiration()->format('Y-m-d\TH:i:s\Z')); $tokenElement->setAttribute('completeListSize', (string) $rows); $tokenElement->setAttribute('cursor', (string) $cursor); $verbElement->appendChild($tokenElement); } elseif ($cursor != 0) { $tokenElement = $this->document->createElement('resumptionToken'); $verbElement->appendChild($tokenElement); } } return; } ... OAI-PMH標準には合致していない実装方法ですが、setにo:deletedを指定すると、削除レコードを返却することができます。 ...

Omeka Sのテーマの一覧を視覚的に確認するページを作成するプログラム

Omeka Sのテーマの一覧を視覚的に確認するページを作成するプログラム

概要 以下の記事で、Omeka Sのテーマの一覧を視覚的に確認するページを紹介しました。 上記のページ作成に使用したプログラムを以下のリポジトリで公開しました。 https://github.com/nakamura196/OmekaS まとめ 同様の作業を行うにあたり、参考になりましたら幸いです。

Omeka Sで3Dモデルを公開する

Omeka Sで3Dモデルを公開する

概要 Omeka Sで3Dモデルを公開する方法について調べてみましたので、備忘録です。 結果、以下のように3DモデルをOmeka Sで扱うことができました。 https://omeka.aws.ldas.jp/s/sample/item/43 バージョン 使用するOmeka Sおよびモジュールのバージョンは以下です。 Omeka S 4.1.1 Common 3.4.62 IIIF Server 3.6.21 Universal Viewer 3.6.9 モジュールのインストール Common, IIIF Server, Universal Viewerモジュールをインストールします。 モジュールの設定 IIIF Serverモジュールについて、設定を2点行います。 まず、Default IIIF api version of the manifestを3にします。 また、Default IIIF image api versionをNo image serverにします。 glbファイルのアップロード 以下で公開されているglbファイルを利用させていただきます。 https://ft-lab.github.io/gltf.html 以下のように、apple.glbをメディアとして、新規のアイテムを登録します。 結果、サイトの詳細ページにおいて、Universal Viewer上に3Dモデルが表示されます。 https://omeka.aws.ldas.jp/s/sample/item/43 作成されるマニフェストファイルは以下です。 { "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://omeka.aws.ldas.jp/iiif/3/43/manifest", "type": "Manifest", "label": { "none": [ "glb" ] }, "metadata": [ { "label": { "none": [ "Title" ] }, "value": { "none": [ "glb" ] } } ], "rights": "https://rightsstatements.org/vocab/CNE/1.0/", "provider": [ { "id": "https://omeka.aws.ldas.jp/", "type": "Agent", "label": { "none": [ "Omeka S" ] } } ], "viewingDirection": "left-to-right", "seeAlso": [ { "id": "https://omeka.aws.ldas.jp/api/items/43", "type": "Dataset", "label": { "none": [ "Api rest json-ld" ] }, "format": "application/ld+json", "profile": "https://omeka.aws.ldas.jp/api-context" } ], "homepage": [ { "id": "https://omeka.aws.ldas.jp/s/aaa/item/43", "type": "Text", "label": { "none": [ "Resource in site: aaa" ] }, "format": "text/html", "language": [ "ja" ] } ], "items": [ { "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://omeka.aws.ldas.jp/iiif/3/43/canvas/p1", "type": "Canvas", "label": { "none": [ "1" ] }, "rights": "https://rightsstatements.org/vocab/CNE/1.0/", "items": [ { "id": "https://omeka.aws.ldas.jp/iiif/3/43/annotation-page/44", "type": "AnnotationPage", "items": [ { "id": "https://omeka.aws.ldas.jp/iiif/3/43/annotation/44", "type": "Annotation", "motivation": "painting", "body": { "id": "https://omeka.aws.ldas.jp/files/original/c28f7107525270b03b4314e734bbdd318d0342a4.glb", "type": "Model", "format": "model/gltf-binary", "service": [], "height": null, "width": null, "duration": null }, "target": "https://omeka.aws.ldas.jp/iiif/3/43/canvas/p1", "label": { "none": [ "[Untitled]" ] } } ] } ] } ] } まとめ Omeka Sと関連モジュールを使用することで、比較的に3Dモデルを公開することができました。 ...

Omeka SでのCSRF: Value is required and can’t be emptyエラーへの対応

Omeka SでのCSRF: Value is required and can’t be emptyエラーへの対応

概要 Omeka Sにおいて、多くのメディアが関連づけられたアイテムを保存しようとする際、CSRF: Value is required and can’t be emptyというエラーメッセージが表示され、保存が完了しない事象に遭遇しました。 本記事では、このエラーへの対処方法について説明します。 関連記事 以下の記事などで言及されています。既知のエラーのようで、php.iniを変更する必要があると述べられています。 https://forum.omeka.org/t/csrf-value-is-required-and-cant-be-empty/15421 https://github.com/omeka/omeka-s/issues/1472 対処方法 以下にチャットGPTによる回答を掲載します。 php.ini で max_input_vars を設定するには、以下の手順を実行してください。 php.ini ファイルを開きます。php.ini の場所は、環境によって異なるため、以下のいずれかのディレクトリにあることが多いです: /etc/php/8.x/apache2/php.ini (Apache) /etc/php/8.x/cli/php.ini (CLI) /etc/php/8.x/fpm/php.ini (PHP-FPM) max_input_vars の値を設定または変更します。設定するために、次の行を探します。または、存在しない場合は新しく追加します。 max_input_vars = 1000 1000 という値はデフォルトですが、必要に応じて大きな数に変更できます。例えば、5000に変更する場合は次のようにします。 max_input_vars = 5000 php.ini ファイルを保存します。 Webサーバーを再起動して設定を反映させます。例えば、Apache を使っている場合は、以下のコマンドを実行します。 sudo systemctl restart apache2 PHP-FPM を使用している場合は、次のように実行します。 sudo systemctl restart php8.x-fpm これで max_input_vars が設定され、Webサーバーがその設定を反映します。 まとめ 今回はmax_input_vars = 5000に設定することで、上記エラーを解消することができました。 同様のことでお困りの方の参考になりましたら幸いです。

Omeka Sのv4.0.4からv4.1へのアップデートに伴うエラー対応

Omeka Sのv4.0.4からv4.1へのアップデートに伴うエラー対応

概要 Omeka Sの更新作業にあたり、以下のエラーが発生しました。 Fatal error: Uncaught ArgumentCountError: Too few arguments to function Omeka\View\Renderer\ApiJsonRenderer::__construct(), 0 passed このエラーへの対処方法に関する備忘録です。 対処方法 以下に記載がありました。 https://forum.omeka.org/t/upgrade-from-4-0-4-to-4-1-failed/22281 具体的には、Nextモジュールをアンイストールすることで、上記の不具合を解消することができました。 まとめ 同様のことでお困りの方の参考になりましたら幸いです。

Omeka Sの更新

Omeka Sの更新

概要 Omeka Sの更新作業に関する備忘録です。以下の公式ドキュメントも参考にしてください。 https://omeka.org/s/docs/user-manual/install/#updating 事前準備:バックアップ 更新作業の前には、不測の事態に備えてデータベースとファイル一式のバックアップを必ず取得してください。 1. データベースのバックアップ mysqldumpコマンドなどでデータベースのダンプファイルを作成します。 # mysqldump -u [DBユーザー名] -p [DB名] > [出力ファイル名] mysqldump -u db_user -p omeka_s_db > omeka_s_backup.sql 2. ファイルのバックアップ Omeka Sのインストールディレクトリ全体をバックアップ(複製)します。 cd /home/nakamura/www # ディレクトリごとコピーする場合(日付などを付与しておくと便利です) cp -r omeka-s omeka-s_backup_20240801 # または、tarコマンドで圧縮して保存する場合 # tar -czvf omeka-s_backup_20240801.tar.gz omeka-s メンテナンスモード 更新にあたり、メンテナンスモードに切り替えます。 以下のEasyAdminモジュールをインストールしておきます。 https://omeka.org/s/modules/EasyAdmin/ そして、以下の「設定」ボタンから、設定ページにアクセスします。 /admin/setting 「Maintenance」項目について、例えば「Public front-end」にチェックを入れて保存します。 結果、以下のように、メンテナンスページが表示されるようになります。 本体およびデフォルトテーマの更新 Omeka Sがインストールされたディレクトリに移動して、以下を実行します。 cd /home/nakamura/www/omeka-s 以下は、v4.1.1に更新する例です。 version=4.1.1 wget https://github.com/omeka/omeka-s/releases/download/v$version/omeka-s-$version.zip unzip omeka-s-$version.zip rm -rf *.zip rm -rf application rm -rf vendor mv omeka-s/application . mv omeka-s/*.php . mv omeka-s/composer.* . mv omeka-s/LICENSE . mv omeka-s/README.md . mv omeka-s/vendor . rm -rf ./themes/default mv omeka-s/themes/default ./themes/ rm -rf omeka-s /admin にアクセスすると、/migrate にリダイレクトされ、以下の画面が表示されます。「データベースの更新」ボタンを押します。 ...

Omeka SのBulkExportを使って、特定のアイテムの指定した項目のみをエクスポートする

Omeka SのBulkExportを使って、特定のアイテムの指定した項目のみをエクスポートする

概要 Omeka SのBulkExportを使って、特定のアイテムの指定した項目のみをエクスポートする方法について紹介します。 ここでは、「Table Of Contents(dcterms:tableOfContents)」を持つアイテムのみに限定し、「タイトル(dcterms:title)」と「識別子(dcterms:identifier)」のみをエクスポートしてみます。 関連 以下の記事で、Omeka SのBulkExportモジュールの概要について説明しています。 今回は、具体的な使用例を元に説明します。 方法 以下にアクセスします。 /admin/bulk-export/bulk-export 「Add an exporter」ボタンを押します。 適当なラベルと、フォーマット(Writer)を指定します。 作成後、再度アクセスして、「Writer」タブを開きます。 そこで、「Metadata」項目から、出力したい項目を指定します。 また、「Resource query」項目から、出力したいアイテムを限定します。ここでは、「Table Of Contents(dcterms:tableOfContents)」に何かしらの値を持つ「has any value」を指定します。 以後、この設定を使用することにより、上記の条件に合致するアイテムおよび項目をエクスポートすることができます。 まとめ 検索条件や出力項目を変更して、目的に応じたエクスポートをお試しください。 本記事が参考になりましたら幸いです。

Omeka SのOaiPmhリポジトリモジュールにおいて、アイテムが公開されいているサイトページのURLを取得する

Omeka SのOaiPmhリポジトリモジュールにおいて、アイテムが公開されいているサイトページのURLを取得する

概要 Omeka SのOaiPmhリポジトリモジュールにおいて、アイテムが公開されいているサイトページのURLを取得する方法に関する備忘録です。 背景 以下の記事で、OaiPmhRepositoryを使った独自語彙の作成方法を紹介しています。 https://nakamura196.hatenablog.com/entry/2021/07/25/222651 こちらも参考にしてください。 アイテムが公開されいているサイトページのURLの取得 修正前 あるカスタマイズ事例において、以下のようにサイトページのURLを取得していました。以下は、Clean Urlモジュールにおいてdcterms:identifier以外が設定されている場合にはうまくいきません。また、/s/db/record/といったハードコーディングが見られます。 if ( $item->value( "dcterms:identifier" ) ) { $this->appendNewElement($oai, 'curation:relation', self::prefix."/s/db/record/".(string)$item->value("dcterms:identifier")->value()); } 修正後 以下のようにシンプルに記述することができました。これにより、当該アイテムが複数のサイトで公開されていても対応することができます。 $sites = $item->sites(); foreach ($sites as $key => $site) { $siteSlug = $site->slug(); $this->appendNewElement($oai, 'curation:relation', $item->siteUrl($siteSlug, true)); } まとめ Omeka Sを用いたOAI-PMHリポジトリの構築にあたり、参考になりましたら幸いです。

Omeka SのSetEnv APPLICATION_ENVのproductionとdevelopmentの違い

Omeka SのSetEnv APPLICATION_ENVのproductionとdevelopmentの違い

Omeka Sでのエラー詳細の表示を有効にする手順は次の通りです。この設定を行うことで、「Omeka S has encountered an error」というページに具体的なエラーメッセージと詳細が表示されるようになります。また、PHPレベルのエラーや警告もページ上に表示されるようになります。これは開発中に問題の特定と解決を容易にするためのものですが、セキュリティ上の理由から本番環境では使用しないことが推奨されます。 エラー詳細の表示を有効にする手順 .htaccessファイルを見つける : Omeka Sのインストールフォルダのメインディレクトリに.htaccessファイルがあります。このファイルはWebサーバーの設定をカスタマイズするために使用されるものです。 .htaccessファイルを編集する : .htaccess ファイルをテキストエディタで開きます。 ファイル内の次の行を探します。 SetEnv APPLICATION_ENV "production" * この行を次のように変更します。 SetEnv APPLICATION_ENV "development" 変更を保存してサーバーを再起動する : 変更を保存した後、Webサーバーを再起動する必要がある場合があります。これはサーバーの設定に依存します。 この変更により、Omeka Sは「開発」モードで実行されるようになり、エラーが発生した際には詳細な情報が表示されるようになります。これは問題の診断と解決に非常に役立ちますが、セキュリティ上のリスクも伴うため、公開環境では使用しないようにしてください。

Omeka SのBulkImportを使用する際の設定例

Omeka SのBulkImportを使用する際の設定例

概要 Omeka SのBulkImportを使ってデータの一括登録を行う際、登録方法の各種設定を行うことができます。 これはアップロードの都度、設定することもできますが、事前に登録しておいた設定を使用するようにすることで、作業者によるミスなどを軽減することができます。 ここでは、登録済みのアイテムに対して、IIIF画像を紐づける際の、一括登録用の設定例について紹介します。 アイテムの例 以下のように、dcterms:identifierにsampleを持つアイテムを作成しておきます。 設定 以下にアクセスします。 /admin/bulk/bulk-import 登録するフォーマットに合わせて、「CSV - Medias」または「OpenDocument spreadsheet (ods) - Medias」の編集アイコンをクリックします。 Importer タブにおいて、MapperをManualに設定します。これにより、登録時にマッピング結果を確認できるように、マッピングミスの有無などを確認できるようになります。 またProcessor タブにおいて、Identifier to use for linked resources or updateをdcterms:identifierに設定します。これにより、CSVやODSファイルにおいて、メディアを紐づけるアイテムをdcterms:identiferで指定できるようになります。 データ例 以下のようなデータを用意します。 iiif o:item dcterms:source https://dl.ndl.go.jp/api/iiif/3437686/R0000001/info.json sample https://dl.ndl.go.jp/api/iiif/3437686/R0000001/info.json CSVまたはODSファイルの項目の指定方法については、以下などを参考にしてください。 https://nakamura196.hatenablog.com/entry/2021/07/28/080952#アイテム マッピング表は以下にあります。 https://gitlab.com/Daniel-KM/Omeka-S-module-BulkImport/-/blob/master/data/mappings/fields_to_metadata.php 登録 Step 1/4: Reader において、ファイルを選択します。 (基本的には作業不要)Step 2/4: Mapper において、登録対象のリソースの数や、マッピング結果に問題がないかを確認します。 (基本的には作業不要)Step 3/4: Processor において、Identifier to use for linked resources or updateで先に設定した値が登録されているかを確認します。 (作業不要)Step 4/4: Confirmation において、画面右上の「Start import」ボタンを押します。 ...

Omeka SのBulkImportモジュールの不具合

Omeka SのBulkImportモジュールの不具合

概要 PHP 8.1.29とOmeka S version 4.0.4の組み合わせにおいて、BulkImportモジュールを使用した際、以下のエラーが発生しました。 Fatal error: Uncaught TypeError: mb_substr(): Argument #1 ($string) must be of type string, null given in /home/xxx/www/omeka-s/modules/BulkImport/src/Processor/ResourceProcessor.php:1079 Stack trace: #0 /home/xxx/www/omeka-… 現時点で、原因までは特定できていませんが、対策を紹介します。 対策 以下のBulkImportのv3.4.51を使用することで、上記のエラーが発生しませんでした。 https://github.com/Daniel-KM/Omeka-S-module-BulkImport/releases/tag/3.4.51 まとめ 参考になりましたら幸いです。

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

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の検索結果に表示する項目の指定にあたり、参考になりましたら幸いです。 ...