ホーム 記事一覧 ブック DH週間トピックス 検索 このサイトについて
RSS English

最新の記事

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

LEAF Writer: サンプルデータの追加方法

LEAF Writer: サンプルデータの追加方法

概要 LEAF Writerのカスタマイズ方法に関する調査記録です。 https://gitlab.com/calincs/cwrc/leaf-writer/leaf-writer 今回はサンプルデータの追加方法に関する備忘録です。以下のように、独自のサンプルデータを追加します。 方法 以下を参考にしてください。 https://gitlab.com/nakamura196/leaf-writer/-/commit/c4e98090c94874037980819c9672eea10814eedb samples.jsonの更新に加えて、必須ではありませんが、アイコンを追加するため、apps/commons/src/icons/index.tsxも更新する必要がありました。 結果 以下のように、サンプルデータからエディタ環境を開くことができました。 まとめ LEAF Writerの理解にあたり、参考になりましたら幸いです。

LEAF Writer: Image Viewerの使い方

LEAF Writer: Image Viewerの使い方

概要 LEAF Writerでは、以下のように、テキストと画像を並列表示する機能を提供します。画像のページをおくると、テキストも連動して動作する機能も提供されています。 このImage Viewer部分に画像を表示するための、TEI/XMLの記述例を紹介します。 方法 以下のように、pbタグを指定します。 https://github.com/kouigenjimonogatari/kouigenjimonogatari.github.io/blob/master/xml/lw/01.xml 具体的には、以下です。 ... <pb corresp="#zone_0005" facs="https://dl.ndl.go.jp/api/iiif/3437686/R0000022/0,0,3445,4706/full/0/default.jpg" n="5"/> ... pb要素のfacs属性に指定された画像が、Image Viewer部分に表示されるようでした。 まとめ 近年、TEIとIIIFを組み合わせて利用するケースも多いです。 https://github.com/TEI-EAJ/jp_guidelines/wiki/IIIF画像とのリンク 上記のような記法に基づき、IIIF Image APIと連動するようなLEAF WriterのImage Viewerの開発にも取り組みたいと思います。 またその延長として、Oxygen XML Editorのアノテーション機能のようなツールも用意できればと思います。 LEAF Writerの利用にあたり、参考になりましたら幸いです。

LEAF Writer:CSSのカスタマイズ

LEAF Writer:CSSのカスタマイズ

概要 LEAF Writerのカスタマイズ方法に関する調査記録です。 https://gitlab.com/calincs/cwrc/leaf-writer/leaf-writer 今回はCSSによる見た目のカスタマイズ方法に関する備忘録です。これにより、以下のように、縦書き表示にする編集環境の用意などが可能になります。 以下は、カスタマイズ前の表示です。 方法 以下のように、スキーマファイルを指定します。 https://github.com/kouigenjimonogatari/kouigenjimonogatari.github.io/blob/master/xml/lw/01.xml 具体的には、以下です。 <?xml-stylesheet type="text/css" href="https://kouigenjimonogatari.github.io/lw/tei_genji.css"?> LEAF Writerはこのスキーマファイルを読み込み、エディタ部分のスタイルを変更するようでした。 これはLEAF Writerに特化した機能ではなく、一般的なブラウザも対応しているものです。 例えば、上記のxmlファイルをGoogle Chromeで表示した場合、以下のようにcssファイルの内容が適用されます。 まとめ TEIおよびLEAF WriterなどのツールにおけるCSSファイルの取り扱いについて、参考になりましたら幸いです。

LEAF Writer:スキーマのカスタマイズ

LEAF Writer:スキーマのカスタマイズ

概要 LEAF Writerのカスタマイズ方法に関する調査記録です。 https://gitlab.com/calincs/cwrc/leaf-writer/leaf-writer 今回はスキーマのカスタマイズ方法に関する備忘録です。以下のように、日本語訳などを表示することを目指します。 以下は、カスタマイズ前の表示です。以下のスキーマに基づき、多くの要素が英語の説明とともに表示されます。 https://www.tei-c.org/release/xml/tei/custom/schema/relaxng/tei_all.rng 方法 以下のように、スキーマファイルを指定します。 https://github.com/kouigenjimonogatari/kouigenjimonogatari.github.io/blob/master/xml/lw/01.xml 具体的には、以下です。 <?xml-model href="https://kouigenjimonogatari.github.io/lw/tei_genji.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?> LEAF Writerはこのスキーマファイルを読み込み、validationや使用可能な要素の提示を行うようでした。 これはLEAF Writerに特化した機能ではなく、Oxygen XML Editorのような一般的なXMLエディタにおいても同じように動作することが多いようです。 (参考)LEAF Writerのカスタマイズ 上述したように、LEAF Writerでは、ロードしたXMLファイルで指定されたスキーマを参照するため、エディタとスキーマは疎結合な構成になっています。 しかし、LEAF Writer側で事前に定義したスキーマ以外を参照する場合、以下のようなダイアログが表示され、「ADD SCHEMA」ボタンから、独自に定義したスキーマの情報をLEAF Writerに教える必要があります。 上記の登録処理を行えば問題ありませんが、LEAF Writer側に事前に定義を追加しておきたい場合には、LEAF Writerをカスタマイズする必要があります。 具体的には、以下のように修正を加えることで、LEAF Writer側に指定したスキーマおよびCSSを事前登録できました。 https://gitlab.com/nakamura196/leaf-writer/-/commit/dc5108978bc3013a80965913d74e729daf6941f2 packages/cwrc-leafwriter/src/config/schemas.tsファイルに以下を追加しました。 ... { id: 'teiGenji', name: 'TEI Genji', mapping: 'tei', rng: ['https://kouigenjimonogatari.github.io/lw/tei_genji.rng'], css: ['https://kouigenjimonogatari.github.io/lw/tei_genji.css'], }, ... これにより、指定したスキーマがLEAF Writerに事前登録され、以後、同じスキーマを参照する際には、上記の追加設定は不要になりました。 まとめ TEIおよびLEAF Writerなどのツールにおけるスキーマの取り扱いについて、参考になりましたら幸いです。

Google スプレッドシート + GAS(Google Apps Script)でonEditが2回実行されてしまう

Google スプレッドシート + GAS(Google Apps Script)でonEditが2回実行されてしまう

概要 GAS(Google Apps Script)を使って、Google スプレッドシートの編集時に追加処理を行うスクリプトを用意した際に、Google スプレッドシートの編集によって、onEdit関数が2回実行されるケースがありました。 原因と解決策 原因は、スプレッドシートの編集時のトリガーとしてもonEdit関数を選択していることが原因でした。 onEdit関数は予約済みの関数であるため、トリガーの設定を行う必要がありませんでした。 まとめ 同様の事象でお困りの方の参考になりましたら幸いです。

RDF、TurtleやJSON-LD、およびIIIFマニフェストファイルなどの関係を理解する

RDF、TurtleやJSON-LD、およびIIIFマニフェストファイルなどの関係を理解する

概要 IIIFマニフェストがJSON-LDで記述されていることを確認するため、他のフォーマットに変換してみましたので、備忘録です。 RDFと、JSON-LDやTurtleなどのファイルフォーマットの関係、およびJSON-LDによって記述されているIIIFマニフェストファイルとの関係など、参考になりましたら幸いです。 対象 今回は、NDLデジタルコレクションで公開されている以下のマニフェストファイルを対象にします。 https://dl.ndl.go.jp/api/iiif/3437686/manifest.json 変換 EASY RDF Converterを使用します。 https://www.easyrdf.org/converter 以下のように、IIIFマニフェストファイルのURLを指定して、Input FormatにJSON-LD、Output FormatにTurtleを指定します。 結果、以下のように変換されました。 @prefix ns0: <http://iiif.io/api/presentation/2#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix dc: <http://purl.org/dc/terms/> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix exif: <http://www.w3.org/2003/12/exif/ns#> . @prefix dc11: <http://purl.org/dc/elements/1.1/> . @prefix ns1: <http://rdfs.org/sioc/services#> . @prefix doap: <http://usefulinc.com/ns/doap#> . @prefix oa: <http://www.w3.org/ns/oa#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . <https://dl.ndl.go.jp/api/iiif/3437686/manifest.json> a <http://iiif.io/api/presentation/2#Manifest> ; ns0:attributionLabel "国立国会図書館 National Diet Library, JAPAN"^^xsd:string ; ns0:hasRanges ( <https://dl.ndl.go.jp/api/iiif/3437686/range/1> <https://dl.ndl.go.jp/api/iiif/3437686/range/2> <https://dl.ndl.go.jp/api/iiif/3437686/range/3> <https://dl.ndl.go.jp/api/iiif/3437686/range/4> <https://dl.ndl.go.jp/api/iiif/3437686/range/5> <https://dl.ndl.go.jp/api/iiif/3437686/range/6> <https://dl.ndl.go.jp/api/iiif/3437686/range/7> <https://dl.ndl.go.jp/api/iiif/3437686/range/8> <https://dl.ndl.go.jp/api/iiif/3437686/range/9> <https://dl.ndl.go.jp/api/iiif/3437686/range/10> <https://dl.ndl.go.jp/api/iiif/3437686/range/11> <https://dl.ndl.go.jp/api/iiif/3437686/range/12> <https://dl.ndl.go.jp/api/iiif/3437686/range/13> <https://dl.ndl.go.jp/api/iiif/3437686/range/14> <https://dl.ndl.go.jp/api/iiif/3437686/range/15> <https://dl.ndl.go.jp/api/iiif/3437686/range/16> ) ; ns0:hasSequences ( _:genid18 ) ; ns0:metadataLabels ( _:genid20 _:genid22 _:genid24 _:genid26 _:genid28 _:genid30 _:genid32 _:genid34 _:genid36 _:genid38 _:genid40 ) ; dc:rights <https://dl.ndl.go.jp/ja/iiif_license.html> ; rdfs:label "校異源氏物語. 巻一"^^xsd:string ; rdfs:seeAlso <https://dl.ndl.go.jp/api/oaipmh?verb=GetRecord&metadataPrefix=dcndl_porta&identifier=oai:dl.ndl.go.jp:info:ndljp/pid/3437686> ; foaf:logo <https://dl.ndl.go.jp/img/logo/ndldc/iiif-logo.png> . <https://dl.ndl.go.jp/api/iiif/3437686/range/1> a ns0:Range ; ns0:hasCanvases ( <https://dl.ndl.go.jp/api/iiif/3437686/canvas/3> ) ; rdfs:label "校異源氏物語 卷一"^^xsd:string . <https://dl.ndl.go.jp/api/iiif/3437686/canvas/3> a ns0:Canvas ; ns0:hasImageAnnotations ( _:genid43 ) ; rdfs:label "3"^^xsd:string ; exif:height 4706 ; exif:width 6890 . <https://dl.ndl.go.jp/api/iiif/3437686/range/2> a ns0:Range ; ns0:hasCanvases ( <https://dl.ndl.go.jp/api/iiif/3437686/canvas/19> ) ; rdfs:label "目次"^^xsd:string . <https://dl.ndl.go.jp/api/iiif/3437686/canvas/19> a ns0:Canvas ; ns0:hasImageAnnotations ( _:genid46 ) ; rdfs:label "19"^^xsd:string ; exif:height 4706 ; exif:width 6890 . ... RDF/XMLにも変換してみます。 ...

校異源氏物語・本文テキストデータリポジトリで公開しているTEI/XMLを一部更新しました。

校異源氏物語・本文テキストデータリポジトリで公開しているTEI/XMLを一部更新しました。

概要 以下のリポジトリで校異源氏物語のTEI/XMLファイルを公開しています。 https://github.com/kouigenjimonogatari ここで公開しているTEI/XMLに対して、一部変更を加えましたので、備忘録です。 フォルダ構成 修正前のファイルは以下に格納しています。これまでから変更はありません。 https://github.com/kouigenjimonogatari/kouigenjimonogatari.github.io/tree/master/tei 更新したファイルは以下に格納しました。 https://github.com/kouigenjimonogatari/kouigenjimonogatari.github.io/tree/master/xml/lw 後述する修正を加えたXMLファイルが格納されています。 修正内容 スキーマの追加 以下のrngファイルを追加しました。 <?xml-model href="https://kouigenjimonogatari.github.io/lw/tei_genji.rng" type="application/xml" schematypens="http://relaxng.org/ns/structure/1.0"?> このrngファイルは、使用するタグを限定し、かつ日本語訳を追加したものです。Romaで作成しており、rngファイルへの変換前のoddファイルもリポジトリに格納しています。 https://github.com/kouigenjimonogatari/kouigenjimonogatari.github.io/blob/master/lw/tei_genji.odd Romaの使い方等については、以下を参考にしてください。 これにより、例えばOxygen XML EditorやLEAF Writerなどにおいて、候補として表示されるタグが限定され、一部日本語訳が表示されるようになります。 LEAF Writerでの表示例は以下をご確認ください。 https://leaf-writer.leaf-vre.org/edit?provider=github&owner=kouigenjimonogatari&ownerType=organization&repo=kouigenjimonogatari.github.io&path=xml%2Flw&filename=01.xml CSSの追加 以下のcssファイルを追加しました。 <?xml-stylesheet type="text/css" href="https://kouigenjimonogatari.github.io/lw/tei_genji.css"?> 上記のスキーマの追加と同様、Oxygen XML EditorやLEAF Writerなどにおいて、追加したcssファイルに基づく表示に変更されました。 revisionDescの追加 revisionDesc要素を追加しました。今後の修正内容を記録していく予定です。 <revisionDesc status="published"> <change when="2024-06-28" who="#snakamura">pb要素のfacs属性を修正しました。facsimile要素を修正しました。</change> </revisionDesc> pb要素の変更 pb要素の記述方法を以下のように修正しました。 <pb corresp="#zone_0005" facs="https://dl.ndl.go.jp/api/iiif/3437686/R0000022/0,0,3445,4706/full/0/default.jpg" n="5"/> facs属性に対して、画像のURLを与えることで、LEAF Writerなどにおいて、Image Viewerの利用が可能になりました。 facsimile要素の記述方法の変更 IIIFマニフェストやキャンバスとの対応付の方法について、以下のガイドラインを参考に、修正しました。 https://github.com/TEI-EAJ/jp_guidelines/wiki/IIIF画像とのリンク#2024-年度版 以下に、変更前と変更後を示します。 変更前 <facsimile> <surfaceGrp facs="https://dl.ndl.go.jp/api/iiif/3437686/manifest.json"> <surface> <graphic n="https://dl.ndl.go.jp/api/iiif/3437686/canvas/22" url="https://dl.ndl.go.jp/api/iiif/3437686/R0000022/full/full/0/default.jpg" /> <zone xml:id="zone_0005" lrx="3445" lry="4706" ulx="0" uly="0" /> </surface> 変更後 <facsimile sameAs="https://dl.ndl.go.jp/api/iiif/3437686/manifest.json"> <surface lrx="6890" lry="4706" sameAs="https://dl.ndl.go.jp/api/iiif/3437686/canvas/22" ulx="0" uly="0" xml:id="f001"> <graphic height="4706px" sameAs="https://dl.ndl.go.jp/api/iiif/3437686/R0000022" url="https://dl.ndl.go.jp/api/iiif/3437686/R0000022/full/full/0/default.jpg" width="6890px"/> <zone lrx="3445" lry="4706" ulx="0" uly="0" xml:id="zone_0005"/> </surface> IIIF Image APIの情報や画像のサイズに関する情報が追加され、より機械的に利用しやすい形になったかと思います。 ...

LEAF Writer:Japan Searchに対するEntity Lookup

LEAF Writer:Japan Searchに対するEntity Lookup

概要 LEAF Writerのカスタマイズ方法に関する調査記録です。 https://gitlab.com/calincs/cwrc/leaf-writer/leaf-writer 今回はEntity Lookupの追加方法に関する備忘録です。具体的には、以下のように、Japan Searchの利活用スキーマに対する問い合わせを行う機能を追加します。 方法 フォークしたリポジトリに対して、以下の変更を加えました。 https://gitlab.com/nakamura196/leaf-writer/-/commit/69e10e2ddd17f6cd01501fbf29f0dd86d1e86a3a 利用 以下のリポジトリを使用することで、UIの一部が日本語化されたバージョンをお試しいただけます。 https://gitlab.com/nakamura196/leaf-writer 起動方法は以下を参考にしてください。 まとめ この方法を応用することで、任意のAPIの追加ができそうです。 LEAF Writerの応用にあたり、参考になりましたら幸いです。

LEAF Writer:日本語UIの追加

LEAF Writer:日本語UIの追加

概要 LEAF Writerのカスタマイズ方法に関する調査記録です。 https://gitlab.com/calincs/cwrc/leaf-writer/leaf-writer 今回は日本語UIの追加方法に関する備忘録です。 方法 フォークしたリポジトリに対して、以下の変更を加えました。 https://gitlab.com/nakamura196/leaf-writer/-/commit/c9b7053814fc1e5a27a1847f20076096832dd68b 利用 以下のリポジトリを使用することで、UIの一部が日本語化されたバージョンをお試しいただけます。 https://gitlab.com/nakamura196/leaf-writer 起動方法は以下を参考にしてください。 まとめ LEAF Writerの応用にあたり、参考になりましたら幸いです。

mirador-sync-windowsのMirador 4版のリポジトリを公開しました。

mirador-sync-windowsのMirador 4版のリポジトリを公開しました。

概要 以下の記事で、mirador-sync-windowsのMirador 4(3)版を作成したことを紹介しました。 今回は、本プラグインのリポジトリを公開したので、備忘録です。 リポジトリ 以下で公開しています。 https://github.com/nakamura196/mirador-sync-windows デモページ 以下からお試しいただけます。 https://nakamura196.github.io/mirador-sync-windows/ GitHub Pagesでの公開に向けて、設定した内容は以下です。 webpack 以下のファイルを一部変更しました。 https://github.com/nakamura196/mirador-sync-windows/blob/main/webpack.config.js 具体的には、以下です。publicPathについて、developmentの場合は、相対パスにしました。これにより、basePathによる問題に対処しました。 return { ...config, output: { filename: 'demo.js', path: path.join(__dirname, 'demo/dist'), // publicPath: '/' publicPath: options.mode === "development" ? './' : '/', }, devServer: { hot: true, port: 4444, static: [ './demo/dist/', ], }, devtool: 'eval-source-map', mode: 'development', entry: ['./demo/src/index.js'], plugins: [ ...(config.plugins || []), new HtmlWebpackPlugin({ template: path.join(__dirname, 'demo/src/index.html') }), new ReactRefreshWebpackPlugin(), ], }; GitHub Actions GitHub Actionsを使ったGitHub Pagesの利用にあたり、以下のようなymlファイルを用意しました。 テストがうまくいかず、その部分はコメントアウトしていますが、今後修正したいと思います。 https://github.com/nakamura196/mirador-sync-windows/blob/main/.github/workflows/node.js.yml まとめ 不完全な部分も多いですが、参考になりましたら幸いです。

Mirador 4プラグイン開発:任意の角度で画像を回転する

Mirador 4プラグイン開発:任意の角度で画像を回転する

概要 Mirador 4において、任意の角度で画像を回転するプラグインを作成しました。 https://github.com/nakamura196/mirador-rotation-plugin 以下で挙動をご確認いただけます。 https://nakamura196.github.io/mirador-rotation-plugin/ 背景 Mirador 3向けに本プラグインを開発していましたが、2024/3/15にMirador 4がプレリリースされました。 https://github.com/ProjectMirador/mirador/releases/tag/v4.0.0.alpha-1 Mirador 3の最新版であるv3.3.0は2021年のリリースだったため、使用されているライブラリ等も古くなっていましたが、今回の更新で、開発がしやすくなりました。 工夫 任意の角度で画像を回転するにあたり、Mirador 4をそのまま使うと、以下のように、角度の変更に対して、画像の回転が追いつかないケースがありました。 https://www.youtube.com/watch?v=zJKWCTA9rjw そこで以下の記事で述べたように、画像の回転や拡大・縮小を遅延なく行うための機能を追加したMiradorを使用しています。 具体的には、openseadragonのsetRotationなどで用意されているimmediatelyパラメータをMiradorから設定できるようにしました。 https://openseadragon.github.io/docs/OpenSeadragon.Viewport.html#setRotation ! 今回はMirador本体にも手を加えましたが、プラグイン側でこのような設定がすでにできるかもしれません。引き続き調査したいと思います。 参考 90度単位で画像を回転させるプラグインとしては、以下もあります。 https://github.com/ProjectMirador/mirador-image-tools こちらは回転だけでなく、さまざまな画像を操作を可能にします。 まとめ Miradorの利用にあたり、参考になりましたら幸いです。

カスタマイズしたMirador 4をnpmパッケージとして公開する

カスタマイズしたMirador 4をnpmパッケージとして公開する

概要 カスタマイズしたMirador 4をnpmパッケージとして公開する機会がありましたので、備忘録です。 Fork 以下の公式サイトからリポジトリをForkします。 https://github.com/projectmirador/mirador 以下のようになります。 ブランチを作成する クローンし、ブランチを作成します。 git clone https://github.com/nakamura196/mirador cd mirador git checkout -b feature-add-immediately-property 以下のように出力されます。 Switched to a new branch 'feature-add-immediately-property' 開発 以下で紹介したような改修を加えます。 テスト テストして、問題がないか確認します。 pnpm test コミット git add . git commit -a -m "feat: add immediately property" マージ masterブランチに戻って、feature-add-immediately-propertyの内容をマージする git checkout master git merge feature-add-immediately-property push masterブランチの変更内容をpushしておきます。 git push publish 以下のコマンドにより、ローカルの変更を一時的に無視するようにします。(他に良い方法がありそうです…) git update-index --assume-unchanged package.json パッケージ名を別名に変更します。 { "name": "@nakamura196/mirador", "version": "4.0.0-alpha.3", "description": "An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.", "main": "dist/cjs/src/index.js", "module": "dist/es/src/index.js", "files": [ "dist" ], "sideEffects": false, ... publishします。 ...

Mirador 4の拡大・縮小・回転の挙動を確認する

Mirador 4の拡大・縮小・回転の挙動を確認する

概要 Mirador 4の拡大・縮小・回転の挙動を変更する必要があり、その変更方法に関する備忘録です。 セットアップ 以下により、ローカルでMirador 4を起動します。 git clone https://github.com/projectmirador/mirador cd mirador pnpm i pnpm start ポート4444で起動します。 zoomIn時の処理のカスタマイズ 一例ですが、zoomInボタンをクリックした際の処理を以下のように変更してみます。 ... handleZoomInClick() { const { windowId, updateViewport, viewer } = this.props; updateViewport(windowId, { // zoom: viewer.zoom * 2, zoom: viewer.zoom * 1.1, // 追加 rotation: viewer.rotation + 5, // 追加 x: viewer.x * 1.1, // 追加 y: viewer.y * 1.1, // 追加 }); } ... 結果、zoomInボタンを押した際に、中心が少しずれながら、拡大・回転が行われることがわかります。 https://youtu.be/wn1WxpTVpS4 これを応用することで、Mirador 3の拡大・縮小・回転等のカスタマイズを行うことができます。 immediateの設定 上記の例では、拡大や回転が完了するまで少し時間がかかっていました。これを即座に行いたい場合、以下のOpenSeadragonViewer.jsのcomponentDidUpdateをカスタマイズします。 viewerConfigオブジェクトのimmediatelyプロパティに基づき、拡大縮小や回転を即座に実施するかを設定できるようにします。 ... componentDidUpdate(prevProps, prevState) { const { viewerConfig, canvasWorld, } = this.props; const { viewer } = this.state; this.apiRef.current = viewer; if (prevState.viewer === undefined) { if (viewerConfig) { viewer.viewport.panTo(viewerConfig, true); viewer.viewport.zoomTo(viewerConfig.zoom, viewerConfig, true); viewerConfig.degrees !== undefined && viewer.viewport.setRotation(viewerConfig.degrees); viewerConfig.flip !== undefined && viewer.viewport.setFlip(viewerConfig.flip); } this.addAllImageSources(!(viewerConfig)); return; } if (!this.infoResponsesMatch(prevProps.infoResponses) || !this.nonTiledImagedMatch(prevProps.nonTiledImages) ) { viewer.close(); const canvasesChanged = !(isEqual(canvasWorld.canvasIds, prevProps.canvasWorld.canvasIds)); this.addAllImageSources((canvasesChanged || !viewerConfig)); } else if (!isEqual(canvasWorld.layers, prevProps.canvasWorld.layers)) { this.refreshTileProperties(); } else if (viewerConfig && !this.osdUpdating) { const { viewport } = viewer; const immediately = viewerConfig.immediately || false; if (viewerConfig.x !== viewport.centerSpringX.target.value || viewerConfig.y !== viewport.centerSpringY.target.value) { viewport.panTo(viewerConfig, immediately); } if (viewerConfig.zoom !== viewport.zoomSpring.target.value) { viewport.zoomTo(viewerConfig.zoom, viewerConfig, immediately); } if (viewerConfig.rotation !== viewport.getRotation()) { viewport.setRotation(viewerConfig.rotation, immediately); } if (viewerConfig.flip !== viewport.getFlip()) { viewport.setFlip(viewerConfig.flip); } } } ... そして、先のZoomControls.jsにおいて、immediately: trueを追加します。 ...

LEAF-Writerをローカル環境で動かす

LEAF-Writerをローカル環境で動かす

概要 LEAF-Writerをローカル環境で動作する機会がありましたので、備忘録です。 リポジトリ 以下を使用します。 https://gitlab.com/calincs/cwrc/leaf-writer/leaf-writer 方法 git clone https://gitlab.com/calincs/cwrc/leaf-writer/leaf-writer cd leaf-writer npm i npm run dev 3000ポートでLEAF-Writerが起動します。 まとめ Dockerを用いる方法もあるようなので、方法がわかりましたら共有したいと思います。

zenodoで資料を公開する

zenodoで資料を公開する

概要 zenodoの使い方を学ぶにあたり、資料を登録してみましたので、備忘録です。登録した資料に付与されたDOIは以下です。 https://zenodo.org/doi/10.5281/zenodo.12508032 DOI DOIについては、最新のバージョンにアクセスできるものと、各バージョンに付与されるものがあり、上記のDOIは前者の者です。バージョン1は以下です。 https://zenodo.org/doi/10.5281/zenodo.12508033 バージョンについては、以下の記事も参考にしてください。 バージョン ファイルの追加や更新を行わない限り、バージョンを変更する必要はなさそうでした。PDFをアップロードした際にDOIが付与され、その後にメタデータを編集しても、バージョンに変更はありませんでした。 このメタデータの更新については、画面右下の「Technical metadata」で確認できました。バージョン1が作成されたのは6/23ですが、6/24に更新されていることが確認できます。 エクスポート JSON-LD いくつかのフォーマットでエクスポートできますが、JSON-LDによる出力もサポートされていました。 { "@context": "http://schema.org", "@id": "https://doi.org/10.5281/zenodo.12508033", "@type": "https://schema.org/PresentationDigitalDocument", "identifier": "https://doi.org/10.5281/zenodo.12508033", "name": "AIPを作成・利用するツール紹介", "creator": [ { "name": "Nakamura, Satoru", "givenName": "Satoru", "familyName": "Nakamura", "affiliation": [ { "@type": "Organization", "name": "The University of Tokyo" } ], "@id": "https://orcid.org/0000-0001-8245-7925", "@type": "Person" } ], "author": [ { "name": "Nakamura, Satoru", "givenName": "Satoru", "familyName": "Nakamura", "affiliation": [ { "@type": "Organization", "name": "The University of Tokyo" } ], "@id": "https://orcid.org/0000-0001-8245-7925", "@type": "Person" } ], "publisher": { "@type": "Organization", "name": "Zenodo" }, "datePublished": "2024-06-23", "dateModified": "2024-06-24T01:00:09.177651+00:00", "temporal": [ "2024-06-21" ], "inLanguage": { "alternateName": "jpn", "@type": "Language", "name": "Japanese" }, "contentSize": "2.47 MB", "size": "2.47 MB", "license": "https://creativecommons.org/licenses/by/4.0/legalcode", "url": "https://zenodo.org/records/12508033" } これをEASY RDF ConverterでRDF/XMLに変換した結果は以下です。schema.orgを中心に使用されていることがわかります。 ...