Archivematica AIPのREADMEファイルの日本語訳例

Archivematicaによって作成するAIPには、README.htmlファイルが含まれています。本ファイルをDeepLで翻訳(一部を人手で修正)しました。誤りも多く含まれているかと思いますが、参考になりましたら幸いです。 アーカイブマティカのAIP構造 このReadmeファイルでは、Archivematicaが生成するArchival Information Package(AIP)の基本的な構造について説明しています。 頭字語 AIP = アーカイバルインフォメーションパッケージ METS = メタデータのエンコードと送信の標準規格 OAIS = Open Archival Information System(オープン・アーカイブ・インフォメーション・システム) PDI = 保存記述情報(Preservation Description Information) PREMIS = 保存メタデータ実装ストラテジー UUID = ユニークユニバーサル識別子 はじめに Archivematica は、多様なデジタルコンテンツを取り込み、長期保存のためのAIPを作成するために設計されたオープンソースのツール群です。一度作成されたAIPは、Archivematicaに依存することなく、標準的なファイルブラウザで開くことができます。AIPのコンセプトは、ISO 14721:2012 Reference Model for an Open Archival Information System (OAIS) に由来し、「コンテンツ情報と関連する保存記述情報(PDI)からなり、OAIS内に保存される情報パッケージ」として定義されています。 コンテンツ情報 Archivematica AIPでは、コンテンツ情報は、主に最初に取り込まれたデジタルオブジェクトと、時間の経過とともにフォーマットが陳腐化するリスクを軽減するために作成されたオブジェクトの保存バージョンで構成されています。保存版は通常、元のオブジェクトと同じファイル名ですが、ファイル拡張子が異なり、ファイル名にUUIDが付加されています。たとえば、BBhelmet.aiという名前の元のファイルに対して、保存版の名前はBBhelmet-e3a3988d-8149-49ea-adc5-c255fb68d4f9.pdfである場合があります。 最初に取り込まれたデジタルオブジェクトと保存バージョンは、AIPのobjectsディレクトリに配置されます。もしこれらのサブディレクトリがオリジナルの転送に含まれていたり、SIPの配置中に追加された場合は、objectsディレクトリにネストしたサブディレクトリが存在します。objectsディレクトリには、submissionDocumentationフォルダーとmetadataフォルダーも含まれます。submissionDocumentationフォルダには、ドナー契約や譲渡書などの文書(AIPに含まれている場合)、およびAIPの作成元となった元の譲渡の内容を記録するMETSファイルが含まれます。metadataフォルダには、オリジナルの転送ファイルに含まれるメタデータファイルや、処理中に生成されたOCRテキストファイルが保存されます。 保存説明情報(PDI) Archivematica AIPのPDIは、METS XMLファイルに記録されています。METSは米国議会図書館によって管理されており、その定義は「World Wide Web ConsortiumのXMLスキーマ言語を使用して表現された、デジタルライブラリ内のオブジェクトに関する記述的、管理的、構造的メタデータをエンコードするための標準」です。Archivematica AIPでは、METSファイル名は、METSという名前にUUIDファイル拡張子とXMLファイル拡張子で構成されています。例えば、METS.0ad8cdab-dbbf-4863-8a4d-9a675c227216.xmlのようなファイル名です。METS ファイルは通常、以下の標準 METS セクションで構成されています。 mets:metsHdr (METSヘッダー):METSファイルに関する基本的な情報。 mets:dmdSec(記述的メタデータ・セクション):デジタル・オブジェクトについての記述的メタデータ。 mets:amdSec (管理メタデータセクション): デジタルオブジェクトに関する技術的および出所情報。 mets:fileSec (ファイルセクション): デジタルオブジェクトのリストとAIPにおける役割の表示(オリジナル、保存、メタデータ、提出書類、ライセンスなど)。 mets:structMap(構造マップ):デジタル・オブジェクトの物理的または論理的な順序付け。すべてのAIP METSファイルには、デフォルトの物理的structMapが含まれ、AIPの構造に応じて、物理的または論理的な追加のstructMapを含むことができます。 METS amdSecの技術的および出所情報は、PREMISメタデータとして記録されます。PREMISは米国議会図書館の規格でもあり、「デジタル・オブジェクトの保存を支援し、その長期的な有用性を確保するためのメタデータの国際標準」と説明されている。PREMISエンティティは、METSファイルの中で以下のようにラップされています。 ...

2023年2月9日 · 1 分 · Nakamura

ArchivematicaのAPIを試す(Archivematica API編)

概要 「ArchivematicaのAPIを試す」のArchivematica APi編です。(別に、「Storage Service API」があります。) https://www.archivematica.org/en/docs/archivematica-1.13/dev-manual/api/api-reference-archivematica/#api-reference-archivematica 今回は、以下の「Transfer」を試します。 https://www.archivematica.org/en/docs/archivematica-1.13/dev-manual/api/api-reference-archivematica/#transfer 使い方 以下のノートブックでお試しいただけます。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/ArchivematicaのAPIを使ってみる.ipynb 以下のような記述が必要でした。ロケーションのUUIDは、ストレージサービスから確認しました。 ## サーバの設定 endpoint = "http://<ドメイン>:81/api" username = "<ユーザ名>" api_key = "<APIキー>" location_uuid = "<ロケーションのUUID>" ## Transferの設定 name = "mc_api_transfer" type = "standard" accession = "2023-1234" paths = ["files/movie_test"] row_ids = [""] ## base64へエンコード import base64 paths_encoded = [] for path in paths: path_encoded = base64.b64encode(f"{location_uuid}:{path}".encode()).decode() paths_encoded.append(path_encoded) ## POST import requests data = { "name": name, "type": type, "accession": accession, "paths[]": paths_encoded, "row_ids[]": row_ids } headers = {'Authorization': f'ApiKey {username}:{api_key}'} response = requests.post(f'{endpoint}/transfer/start_transfer/', headers=headers, data=data) まとめ 今回はStart transferのみを試しましたが、各操作に対するAPIが提供されており、色々なシステム連携ができそうでした。 ...

2023年2月9日 · 1 分 · Nakamura

Amazon EC2にArchivematicaを立てる

概要 Archivematicaはデジタルデータの長期保存のためのオープンソースソフトウェアです。 https://www.archivematica.org/en/ このArchivematicaをAmazon EC2に立てる機会がありましたので、その備忘録です。 インストール 以下のページにインストール方法が記載されています。 https://www.archivematica.org/en/docs/archivematica-1.13/admin-manual/installation-setup/installation/installation/ いくつかの選択肢がありますが、今回は以下の「CentOS 7 64-bit、Installing Archivematica on CentOS/Red Hat」を試してみます。 https://www.archivematica.org/en/docs/archivematica-1.13/admin-manual/installation-setup/installation/install-centos/#install-pkg-centos EC2のインスタンス CentOS 7と指定されていましたので、以下のAmazon マシンイメージ(AMI)を選択しました。 以下にハードウェアの要件が記載されていますが、「Recommended minimum production requirements」であるメモリ4GBである「t2.medium」、200GBのストレージを選択しました。 https://www.archivematica.org/en/docs/archivematica-1.13/admin-manual/installation-setup/installation/installation/#hardware インストール EC2の起動後は、上記のサイトに記載されていたコマンドをすべて実行します。以下をコピー&ペーストすることがでインストールできます。 sudo yum -y update # Allow Nginx to use ports 81 and 8001 sudo semanage port -m -t http_port_t -p tcp 81 sudo semanage port -a -t http_port_t -p tcp 8001 # Allow Nginx to connect the MySQL server and Gunicorn backends sudo setsebool -P httpd_can_network_connect_db=1 sudo setsebool -P httpd_can_network_connect=1 # Allow Nginx to change system limits sudo setsebool -P httpd_setrlimit 1 sudo yum install -y epel-release sudo -u root rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch sudo -u root bash -c 'cat << EOF > /etc/yum.repos.d/elasticsearch.repo [elasticsearch-6.x] name=Elasticsearch repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF' sudo -u root bash -c 'cat << EOF > /etc/yum.repos.d/archivematica.repo [archivematica] name=archivematica baseurl=https://packages.archivematica.org/1.13.x/centos gpgcheck=1 gpgkey=https://packages.archivematica.org/1.13.x/key.asc enabled=1 EOF' sudo -u root bash -c 'cat << EOF > /etc/yum.repos.d/archivematica-extras.repo [archivematica-extras] name=archivematica-extras baseurl=https://packages.archivematica.org/1.13.x/centos-extras gpgcheck=1 gpgkey=https://packages.archivematica.org/1.13.x/key.asc enabled=1 EOF' sudo -u root yum install -y java-1.8.0-openjdk-headless elasticsearch mariadb-server gearmand sudo -u root systemctl enable elasticsearch sudo -u root systemctl start elasticsearch sudo -u root systemctl enable mariadb sudo -u root systemctl start mariadb sudo -u root systemctl enable gearmand sudo -u root systemctl start gearmand sudo -H -u root mysql -hlocalhost -uroot -e "DROP DATABASE IF EXISTS MCP; CREATE DATABASE MCP CHARACTER SET utf8 COLLATE utf8_unicode_ci;" sudo -H -u root mysql -hlocalhost -uroot -e "DROP DATABASE IF EXISTS SS; CREATE DATABASE SS CHARACTER SET utf8 COLLATE utf8_unicode_ci;" sudo -H -u root mysql -hlocalhost -uroot -e "CREATE USER 'archivematica'@'localhost' IDENTIFIED BY 'demo';" sudo -H -u root mysql -hlocalhost -uroot -e "GRANT ALL ON MCP.* TO 'archivematica'@'localhost';" sudo -H -u root mysql -hlocalhost -uroot -e "GRANT ALL ON SS.* TO 'archivematica'@'localhost';" sudo -u root yum install -y python-pip archivematica-storage-service sudo -u archivematica bash -c " \ set -a -e -x source /etc/sysconfig/archivematica-storage-service cd /usr/lib/archivematica/storage-service /usr/share/archivematica/virtualenvs/archivematica-storage-service/bin/python manage.py migrate"; sudo -u root systemctl enable archivematica-storage-service sudo -u root systemctl start archivematica-storage-service sudo -u root systemctl enable nginx sudo -u root systemctl start nginx sudo -u root systemctl enable rngd sudo -u root systemctl start rngd sudo -u root yum install -y archivematica-common archivematica-mcp-server archivematica-dashboard sudo -u archivematica bash -c " \ set -a -e -x source /etc/sysconfig/archivematica-dashboard cd /usr/share/archivematica/dashboard /usr/share/archivematica/virtualenvs/archivematica/bin/python manage.py migrate "; sudo -u root systemctl enable archivematica-mcp-server sudo -u root systemctl start archivematica-mcp-server sudo -u root systemctl enable archivematica-dashboard sudo -u root systemctl start archivematica-dashboard sudo -u root systemctl restart nginx sudo -u root yum install -y archivematica-mcp-client sudo -u root sed -i 's/^#TCPSocket/TCPSocket/g' /etc/clamd.d/scan.conf sudo -u root sed -i 's/^Example//g' /etc/clamd.d/scan.conf sudo -u root systemctl enable archivematica-mcp-client sudo -u root systemctl start archivematica-mcp-client sudo -u root systemctl enable fits-nailgun sudo -u root systemctl start fits-nailgun sudo -u root systemctl enable clamd@scan sudo -u root systemctl start clamd@scan sudo -u root systemctl restart archivematica-dashboard sudo -u root systemctl restart archivematica-mcp-server sudo -u archivematica bash -c " \ set -a -e -x source /etc/default/archivematica-storage-service || \ source /etc/sysconfig/archivematica-storage-service \ || (echo 'Environment file not found'; exit 1) cd /usr/lib/archivematica/storage-service /usr/share/archivematica/virtualenvs/archivematica-storage-service/bin/python manage.py createsuperuser "; 最後のコマンドで、archivematica-storage-serviceのユーザを作成します。ユーザ名やパスワードを指定します。 ...

2023年2月8日 · 3 分 · Nakamura

Headless CMSを使ってIIIFマニフェストファイルを作成する

概要 Headless CMSの学習のため、CMSに登録した情報からIIIFマニフェストを生成する試みを行いました。 以下がその結果です。(といっても、以下のアプリからはサーバ側の処理内容は見えないです。) https://iiif-headless-cms.vercel.app/ 本記事は上記の取り組みの備忘録です。 Contentful https://www.contentful.com/ 以下のようなiiifというContent modelを作成しました。画像データ(url, width, height)の紐付けには、フィールド「JSON object」と「Reference」が使用できそうでしたが、ここでは「Reference」を選択し、画像データの情報を管理するimageというContent modelを別途作成しました。 IIIFマニフェストの形式に変換して返却するAPIについては、Nuxt3を用いて作成しました。 https://github.com/nakamura196/iiif-headless-cms/blob/main/server/api/iiif/contentful/[id]/manifest.ts 以下のライブラリを使用することで、簡単に接続することができました。 https://www.npmjs.com/package/contentful microCMS https://microcms.io/ microCMSにおいても同様のスキーマ作成を行いました。 以下のような画像データを格納するカスタムフィールドを作成しました。 このカスタムフィールドを繰り返しありの形でiiifスキーマに追加することで、以下のように、画像に関する情報を格納できるようになりました。 スキーマをエクスポートしたデータは以下です。 { "apiFields": [ { "idValue": "ZRdeXxiWOB", "fieldId": "label", "name": "ラベル", "kind": "text", "isUnique": false }, { "fieldId": "image", "name": "画像", "kind": "repeater", "customFieldCreatedAtList": [ "2023-02-03T00:42:08.118Z" ] } ], "customFields": [ { "createdAt": "2023-02-03T00:42:08.118Z", "fieldId": "iiif_image", "name": "iiif画像に関するフィールド", "fields": [ { "idValue": "Y1B3C_tC1c", "fieldId": "url", "name": "URL", "kind": "text" }, { "idValue": "kS9afBRRHr", "fieldId": "width", "name": "幅", "kind": "number" }, { "idValue": "SpLhBEapVh", "fieldId": "height", "name": "高さ", "kind": "number" } ], "position": [ [ "Y1B3C_tC1c", "kS9afBRRHr", "SpLhBEapVh" ] ], "updatedAt": "2023-02-03T00:45:50.426Z", "viewerGroup": "H7Y" } ] } IIIFマニフェストの形式に変換する処理は以下です。 ...

2023年2月3日 · 1 分 · Nakamura

Omeka Sへの画像一括登録用プログラム

概要 Omeka Sでメタデータ(Omeka用語でアイテム)や画像(Omeka用語でメディア)を一括する場合、Bulk Importモジュールなどを使用することが多いです。 https://github.com/Daniel-KM/Omeka-S-module-BulkImport 一方、Omeka Sが提供するREST APIを介して登録することも可能です。 今回は、本APIを用いた画像の一括登録用プログラムを作成しましたので、その紹介です。 開発した理由 最新のBulk Importモジュールでは、エラーが発生した際に、停止するか継続するか等を選択できますが、古いバージョンのモジュールでは、この設定ができません。そのため、画像を一括登録した際に、画像の取得に失敗する都度、その画像が抜けてしまうケースがありました。 そこで、上記への対応のため、APIを用いた画像の一括登録用プログラムを作成しました。 使い方 以下のノートブックでサンプルをご確認いただけます。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/Omeka_Sへの画像一括登録用プログラム.ipynb まず、登録用のcsvファイルを作成します。本プログラムのIIIF画像の一括登録のみを対象としており、Media Urlには、IIIF画像のURL(info.jsonを含む)を指定します。 Item Identifier Media Url post_226 https://nakamura196.github.io/iiif_static/files/tile/kunshujo/info.json Google Colabで実行する場合には、csvファイルをアップロードします。 次にAPIの認証情報やエンドポイントのURLを設定します。 property_idの値については、上記csvのItem Identifierで指定した値をもつプロパティのIDを指定します。ここでは、dcterms:identifierを使用するため、そのOmekaの内部IDにあたる10を指定します。 処理内容 入力したcsvファイルと数の齟齬がある場合のみ、登録を行います。 例えば、アイテムに2件のメディアを紐づけるようにcsvファイルで指定されているにも関わらず、Omeka上では1件のメディアしか紐づいていないアイテムがあった場合、当該アイテムの紐づいたメディアを削除し、再度csvファイルの内容に基づいて登録します。 これにより、メディアの新規の一括登録や、登録漏れが発生していたメディアの修正等を行うことができます。 まとめ BulImport以外での画像の一括登録方法として、参考になりましたら幸いです。

2023年2月3日 · 1 分 · Nakamura

IIIF Image API level 0による画像公開方法

概要 IIIF Image API level 0は、事前に作成した静的なタイル画像を用いて画像配信を行います。これにより、GitHub PagesやAmazon S3といった静的ファイルのホスティングサービスのみでの画像公開が可能となります。一方、任意の範囲の画像切り出しができないといった欠点も挙げられます。 本記事は、IIIF Image API level 0を用いた画像公開の一例について紹介します。 ツール 以下のノートブックでお試しいただけます。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/IIIF_Image_API_静的ファイル作成ツール.ipynb 本ノートブックは、以下のスクリプトを参考にしています。 https://github.com/zimeon/iiif/blob/main/iiif_static.py 公開例 GitHub Pagesで公開するタイル画像を表示している例です。 https://www.kanzaki.com/works/2016/pub/image-annotator?u=https://nakamura196.github.io/iiif_static/files/tile/kunshujo/info.json まとめ 静的なファイルのみでIIIF Image API(のlevel 0)に対応する方法について紹介しました。 本手法の利点と欠点を考慮したうえで、ご活用いただけますと幸いです。

2023年1月30日 · 1 分 · Nakamura

app要素を含むTEI/XMLファイルに対して、編集距離を算出するプログラムを作成しました。

概要 app要素を含むTEI/XMLファイルに対して、編集距離を算出するプログラムを作成しました。 以下のGoogle Colabからご利用いただけます。 https://colab.research.google.com/github/nakamura196/ndl_ocr/blob/main/編集距離を算出するプログラム.ipynb XMLファイルをアップロードすると、witness間の類似度を算出します。 例 以下のXMLファイルをアップロードしてみます。 https://tei-eaj.github.io/koui/data/nakamura.xml 結果、以下のようなExcelファイルが得られます。witness間の類似度を一覧できます。 index name1 name2 distance ratio 0 中村式五十音 中村式五十音又様 10 0.85 1 中村式五十音 中村式五十音欠損本 7 0.8947368421052632 2 中村式五十音又様 中村式五十音欠損本 8 0.868421052631579 類似度の算出には、以下を使用しています。 https://pypi.org/project/python-Levenshtein/ まとめ テキストの比較方法については色々と検討の余地がありますが、witness間の定量的な比較の一例として参考になりましたら幸いです。 参考 以下で紹介している「二つのテキスト間の差分を抽出するプログラム」にも本機能を追加しました。

2023年1月26日 · 1 分 · Nakamura

【Omeka S モジュール紹介】BulkExport:データの一括エクスポート

概要 Omeka Sでデータの一括エクスポートを行うためのモジュールとして、BulkExportがあります。 https://github.com/Daniel-KM/Omeka-S-module-BulkExport 本記事では、本モジュールの使い方について説明します。 インストール 他の一般的なモジュールと同様、標準的な方法でインストールできます。 以下のURLから最新のzipファイルをダウンロードします。 https://github.com/Daniel-KM/Omeka-S-module-BulkExport/releases インストール時に、以下のように、Logモジュールを事前にインストールする必要があります。 使い方 管理画面左部の「BulkExport」をクリックし、エクスポートアイコンをクリックします。 次の画面でエスクポート内容の設定を行うことができます。デフォルトのままでもかまいません。 続く画面でエクポートを実行すると、以下のように、エクスポートの結果を確認できます。Get fileボタンから、エクスポート結果をダウンロードすることができます。 エクスポート結果の例は以下です。 o:id o:resource_template o:resource_class o:is_public o:item_set[o:id] o:item_set[dcterms:title] o:media[o:id] o:media[file] dcterms:title dcterms:rights dcterms:isPartOf 1 dctype:Image true parent 3 2 dctype:Image true child http://creativecommons.org/licenses/by/4.0/ 1 3 dctype:Collection true top データ数が多い場合 データ数が多い場合は、以下のように、バックグラウンドジョブとして実行されます。ジョブが完了すると、上記のダウンロードボタンが表示されます。 まとめ Omeka Sに格納されたデータの一括エクスポートを行う場合の参考になりましたら幸いです。 ...

2023年1月22日 · 1 分 · Nakamura

Visual Studio Live Shareを用いてTEI/XMLファイルを共同編集する(xmlでなくても可)

概要 Visual Studio Live Shareはリアルタイムの共同開発を可能にするVSCodeの拡張機能です。 https://visualstudio.microsoft.com/ja/services/live-share/ 今回は本拡張機能を使って、TEI/XMLファイルをリアルタイムに共同編集してみます。 デモ動画 共同編集の様子を動画にしました。 https://youtu.be/DzyuJAtzl90 画面右はローカル環境でVSCodeを使用しているユーザ(nakamura196)、画面左はVisual Studio Live Shareによって招待されたユーザ(Guest User)がオンラインのVSCode(vscode.dev)を用いて編集している例です。 1行目はローカルのユーザ(nakamura196)が編集し、1行目はオンラインの共同編集者(Guest User)が編集しています。以下で紹介したTEI/XMLのプレビュー画面も同期されています。 https://zenn.dev/nakamura196/articles/d2733cc49d1239 使い方 Visual Studio Live Shareの使い方は、以下のページを参考にしてください。とても簡単な操作で、共同編集環境を作成することができます。またユーザ毎に「閲覧のみ」「編集可」といった権限の設定ができるので、いろいろな使い方ができます。 https://learn.microsoft.com/en-us/visualstudio/liveshare/quickstart/share 簡単に使い方を紹介します。 招待する側 Visual Studio Live Shareをインストールし、以下のように、画面左のタブから「Live Share」を選択して、「Share」ボタンを押します。 「Invite participants」を押すと、以下のようなリンクがコピーされます。 https://prod.liveshare.vsengsaas.visualstudio.com/join?7D0781A4301C45E7669D4D32CCE870AEBE2B 招待される側 上記のURLにアクセスします。すると、以下のように、ユーザ設定に関するポップアップが右下に表示されます。匿名ユーザとして参加する、すでにアカウントをお持ちであればログインする、などを行います。 その後、以下のように、ホストの承認を待つステータスになります。 ホストが権限を設定することで、招待されたユーザが閲覧または共同編集できるようになります。 上記のデモでは、オンラインのユーザが拡張機能「TEI Japanese Editor」をインストールすることで、プレビュー画面も表示しています。 気づき 別の記事で以下のようなコメントを書きました。 なお、https://github.dev/ など、web版のVSCodeを使用することで、各ユーザが環境のセットアップを行う必要がなくなり、より簡便に編集環境を用意することができそうです。ただし、2023年1月時点ではScholarly XMLなどの拡張機能がweb版に非対応となっており、現時点でこのような環境を使用することは難しいです。 ただ今回の方法を用いると、ローカル環境のユーザ側ではScholarly XMLによるValidationを行うことができ、招待されたユーザはオンラインのVSCodeを使って簡単にセットアップができる、という形になったので、上記の課題を解決する一つの方法になり得るかもしれません。(もちろん、Scholarly XMLがweb版に対応すると解決しますが。) まとめ 今回はTEI/XMLを対象にしましたが、これに限るものではありません。 Visual Studio Live Shareはとても便利な拡張機能です。TEIの学習の際などにも有用な環境になると思います。 TEI/XMLなどの共同編集にあたり、参考になりましたら幸いです。

2023年1月19日 · 1 分 · Nakamura

WordをTEI/XMLに変換する

概要 WordをTEI/XMLファイルに変換する機会がありました。調べてみたところ、TEIGarage ConversionなどのTEI公式のツールに加えて、以下のTEI Publisherでの変換例が見つかりました。 https://teipublisher.com/exist/apps/tei-publisher/test/test.docx.xml 上記の例では、Wordのスタイル情報を中心に、TEIのタグに変換しているようだったので、この方法を試してみました。なお今回は、TEI Publisherとは独立して使用することを目的として、python-docxライブラリを使用しました。 Wordファイル 以下のようなWordファイルを試作しました。いずれも仮ですが、「tei:persName」や「tei:warichu」といったスタイルを作成し、色などのスタイルを変更しました。スタイルを当てていくことで、簡易な構造化を行う仕組みです。 TEI/XMLへの変換 上記のようなWordファイルを入力として、スタイル情報を中心に、TEI/XMLに変換するスクリプトを作成しました。いずれpipなどを使って共有したいと考えています。 変換したTEI/XMLの例は以下です。まだまだ改善が必要ですが、validなTEI/XMLファイルに変換することができました。 <lb/> <seg> ワードの入力サンプル </seg> <lb/> <lb/> <seg type="dateline"> 日付の行にスタイル「dateLine」を使用してください。先頭に2文字の空白が入ります。 </seg> <lb/> <seg type="personline"> 名前の行にスタイル「personLine」を使用してください。末尾に2文字の空白が入ります。 </seg> <lb/> <seg> <ruby> <rb> 中村 </rb> <rt> なかむら </rt> <rt place="left"> さとる </rt> </ruby> の形で両側ルビを記述します。緑色が左ルビです。 </seg> <lb/> <lb/> <seg> <seg type="red"> 朱書 </seg> はスタイル「 <seg type="red"> red </seg> 」を使用してください。 </seg> <lb/> <lb/> <seg> 文字のサイズについては検討中です。 </seg> <lb/> <lb/> <seg> <persName> 中村覚 </persName> のような人名には、スタイル「 <persName> persName </persName> 」を使用してください。 </seg> <lb/> <lb/> <seg> 割注は <note type="割書"> あああああ <milestone unit="wbr"/> いいい </note> のように入力してください。正しく改行されるまで、全角スペースを入力してください。 <note type="割書"> こんな <milestone unit="wbr"/> スタイル </note> もあります。「こんな」の後に全角スペースを入れています。 </seg> <lb/> <lb/> <seg type="dateline"> 二〇二三年一月十七日 </seg> <lb/> <seg type="personline"> 作成:中村覚 </seg> <lb/> 別途開発中のTEI/XMLビューアで表示した例が以下です。<rt place="left">や朱書などのスタイルがまだ適用できていませんが、人名や割書などは再現することができました。 ...

2023年1月17日 · 1 分 · Nakamura

画像とIIIFマニフェストをipfsに追加してみる

概要 以下のツイートを参考に、画像とIIIFマニフェストをipfsに追加してみました。 https://twitter.com/edsilv/status/1400221815369355267 ipfsへの追加については、上記のツイートでも言及されているFleekを使用しました。 https://fleek.co/ Fleekの使い方は以下のサイトが参考になりました。 https://i-407.com/blog/m10/ ソースコード ソースコードは以下です。 https://github.com/nakamura196/fleek_test 手順 画像のアップロード まず、上記のリポジトリに以下の画像をアップロードしました。 https://github.com/nakamura196/fleek_test/blob/main/kunshujo_400.jpg 先のサイトを参考に、本リポジトリをfleekに接続しました。その結果、以下のURLでアクセスできました。 https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg 参考 またIPFSのデスクトップアプリをダウンロードして、「QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo」を入力したところ、以下のように表示することができました。 さらに、以下のGoogle Chromeの拡張機能をインストールしました。 https://chrome.google.com/webstore/detail/ipfs-companion/nibjojkomfdiaoajekhjakgkdhaomnch 上記のデスクトップアプリを起動した状態で、先のURL(https://ipfs.io/ipfs/…)を入力すると、以下のURLに変換されました。 http://bafybeigepsc4mwgbur7y7tao5v26oeqgi3bkial2rrbuudlaf3z43iyquq.ipfs.localhost:8080/kunshujo_400.jpg マニフェストファイルのアップロード 次にマニフェストファイルを作成します。以下のようなマニフェストファイルを作成しました。 { "@context": "http://iiif.io/api/presentation/2/context.json", "@id": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg", "@type": "sc:Manifest", "attribution": "sample", "description": "Manifest file of My first IIIF and IPFS", "label": "My first IIIF and IPFS", "metadata": [ { "label": "keyword", "value": "ipfs" } ], "sequences": [ { "@id": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg/sequence/normal", "@type": "sc:Sequence", "canvases": [ { "@id": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg/canvas/p1", "@type": "sc:Canvas", "height": 289, "images": [ { "@id": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg/annotation/p1-image", "@type": "oa:Annotation", "motivation": "sc:painting", "on": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg/canvas/p1", "resource": { "@id": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg", "@type": "dctypes:Image", "format": "image/jpeg", "height": 289, "width": 400 } } ], "label": "[1]", "thumbnail": { "@id": "https://ipfs.io/ipfs/QmbZekG5x834rwGKVZntBefkbNfL5auH171m4c26TZmCAo/kunshujo_400.jpg" }, "width": 400 } ] } ] } その結果、以下のURLでアクセスできるようになりました。 ...

2023年1月16日 · 1 分 · Nakamura

ExcelからTEI/XMLを作成するフローの一例を作成しました。

概要 Excelで作成したデータから、TEI/XMLを作成するフローの一例を作成しました。 以下のようなTEI/XMLファイルが出力されます。pbタグを使ったページ区切り、lbタグを使った行IDの指定、choice・orig・regタグを使った複数表記、noteタグを使った注釈、およびIIIF画像との関連づけ、などに対応します。 <?xml version="1.0" encoding="utf-8"?> <TEI xmlns="http://www.tei-c.org/ns/1.0"> <teiHeader> <fileDesc> <titleStmt> <title/> </titleStmt> <publicationStmt> <ab/> </publicationStmt> <sourceDesc> <ab/> </sourceDesc> </fileDesc> </teiHeader> <text> <body> <pb corresp="#page_22"/> <ab> <lb xml:id="page_22-b-1"/> <seg> いつれの御時にか女御更衣あまたさふらひ <choice> <orig> 給ける <note corresp="#page_22-b-1-20" type="校異"> 給けるーたまふ河 </note> </orig> <reg> たまふ </reg> </choice> なかにいとやむことなきゝは </seg> </ab> </body> </text> <facsimile source="https://dl.ndl.go.jp/api/iiif/3437686/manifest.json"> <surface source="https://dl.ndl.go.jp/api/iiif/3437686/canvas/22" xml:id="page_22"> <label> [22] </label> <zone lrx="1126" lry="1319" ulx="1044" uly="895" xml:id="page_22-b-1-20"/> </surface> <surface source="https://dl.ndl.go.jp/api/iiif/3437686/canvas/23" xml:id="page_23"> <label> [23] </label> </surface> </facsimile> </TEI> 上記のTEI/XMLデータの可視化の一例を以下に示します。画像、テキスト(original)、テキスト(Regularization)、注釈を同一画面上に表示しています。 なお注意点として、今回は校異源氏物語のテキストを用いていますが、校異情報を記述する際にはapp要素のほうが適切です。あくまでフローを説明するためのサンプルデータとしてご理解ください。 Excel 作成するExcelのサンプルデータは以下です。image, text, notesの3つのシートを持ちます。それぞれについて説明します。 ...

2023年1月10日 · 1 分 · Nakamura

TEIビューアでの利用を想定したCustom OpenSegDragon Viewerを作成しました。

概要 TEIビューアでの利用を想定したCustom OpenSegDragon Viewerを作成しました。 背景 以下のようなTEIとIIIFを対応させたビューア開発において、次に示す機能を持ったビューアが必要でした。 https://www.hi.u-tokyo.ac.jp/collection/digitalgallery/wakozukan/tei/ IIIFのマニフェストファイルを読み込むことができる。 ビューアコンポーネント側でのコマ送りを、コンポーネント外で把握することができる。 画像の部分領域をハイライトすることができる。 上記の要件を全てを満たす既存のIIIF対応ビューアを見つけることができなかったため、独自のビューアの開発を試みました。合わせて、npmパッケージとして公開することも試みました。 開発したビューア ドキュメンテーション等がまだ不十分ですが、以下のページで公開しています。このページで、ソースコードへのリンクも掲載しています。 https://www.npmjs.com/package/@nakamura196/osd-custom-viewer vue3とviteを使ったコンポーネントの開発およびnpmでの公開にあたっては、以下のサイトを参考にしました。 https://blog.egmond.dev/vue-component-to-npm-package 使用例 以下のページで導入例をご確認いただけます。 https://nakamura196.github.io/nuxt3-iiif-viewer/custom-osd コンポーネント内外からのコマ送りが可能です。これにより、例えばIIIF画像とTEIテキストの並列表示を行った際、TEIテキスト側からのコマ送りや、画像のコマ送りによる当該テキストへのスクロールなどを行うことができます。 またハイライト機能用いることで、あるテキスト行に対応した画像の部分領域をハイライトさせる、といったことが可能です。 使用例のソースコードは以下です。 https://github.com/nakamura196/nuxt3-iiif-viewer/blob/main/pages/custom-osd/index.vue ssrでの公開にあたり、pluginsフォルダに以下を追加しています。 https://github.com/nakamura196/nuxt3-iiif-viewer/blob/main/plugins/custom-osd.client.js まとめ ドキュメンテーションの充実や、IIIF v3への対応など、多くのTODOが残っていますが、参考になりましたら幸いです。

2022年12月26日 · 1 分 · Nakamura

Amazon LightsailでOmeka Sの初期設定を行うscript(Easy Adminモジュールの追加)

以下の記事で紹介した「Amazon LightsailでOmeka Sの初期設定を行うscript」に対して、テーマやモジュールを簡単に追加できる「Easy Admin」を追加し、また関連ディレクトリの権限を修正したスクリプトを作成しました。 参考になりましたら幸いです。 # 変数 OMEKA_PATH=/home/bitnami/htdocs/omeka-s ## ハイフンは含めない DBNAME=omeka_s VERSION=3.2.3 ############# set -e mkdir $OMEKA_PATH # Omekaのダウンロード wget https://github.com/omeka/omeka-s/releases/download/v$VERSION/omeka-s-$VERSION.zip unzip -q omeka-s-$VERSION.zip mv omeka-s/* $OMEKA_PATH # .htaccessの移動 mv omeka-s/.htaccess $OMEKA_PATH # 不要なフォルダの削除 rm -rf omeka-s rm omeka-s-$VERSION.zip # 元からあったindex.htmlを削除(もし存在すれば) if [ -e $OMEKA_PATH/index.html ]; then rm $OMEKA_PATH/index.html fi # データベースの作成 cat <<EOF > sql.cnf [client] user = root password = $(cat /home/bitnami/bitnami_application_password) host = localhost EOF mysql --defaults-extra-file=sql.cnf -e "create database $DBNAME"; # Omeka Sの設定 cat <<EOF > $OMEKA_PATH/config/database.ini user = root password = $(cat bitnami_application_password) dbname = $DBNAME host = localhost EOF sudo chown -R daemon:daemon $OMEKA_PATH/files sudo apt install imagemagick -y # Module cd $OMEKA_PATH/modules ## easy admin wget https://github.com/Daniel-KM/Omeka-S-module-EasyAdmin/releases/download/3.3.7/EasyAdmin-3.3.7.zip unzip EasyAdmin-3.3.7.zip rm EasyAdmin-3.3.7.zip sudo chown -R daemon:daemon $OMEKA_PATH/files sudo chown -R daemon:daemon $OMEKA_PATH/modules sudo chown -R daemon:daemon $OMEKA_PATH/themes

2022年12月24日 · 1 分 · Nakamura

【Omeka S モジュール開発】FixCjkSearch: Omeka Sの日本語による全文検索の不具合修正

Omeka Sの標準機能では、日本語による全文検索がうまくいきません。以下の記事で、不具合の内容を説明しています。 https://nakamura196.hatenablog.com/entry/2022/03/07/083004 上記記事で、いくつかの対応策を示しましたが、それらの対応策を包含したモジュールを作成しました。 https://github.com/nakamura196/Omeka-S-module-FixCjkSearch 根本的な解決はできていないのですが、Omeka Sで日本語資料を扱う際のお役に立てば幸いです。

2022年12月23日 · 1 分 · Nakamura

【Omeka S モジュール紹介】Folksonomy:ソーシャルタギング

概要 Omeka Sでソーシャルタギングを実現するためのモジュールとして、Folksonomyがあります。 https://omeka.org/s/modules/Folksonomy/ 本記事では、本モジュールの使い方について説明します。 インストール 他の一般的なモジュールと同様、標準的な方法でインストールできます。 設定 インストール後、以下のような設定画面が表示されます。特に、「Allow public to tag」を有効にすることで、訪問者によるタギングが可能になります。また、「Require approbation for public tags」を有効にすることで、管理者による承認のフローを導入することができます。 訪問者 アイテムの詳細画面に以下のようなタグの登録フォームが表示されます。 複数のタグを入力する場合、カンマで区切って入力します。 「terms of use」とライセンスに同意して、「Tag it!」を押します。すると、以下のようなアラートが表示されます。承認後に表示されます、と記載されています。 管理者 「Folksonomy」 > 「Taggings」のページから、タギングの一覧を閲覧できます。 「?」マークをクリックすることで、「承認」または「却下」を切り替えることができます。 承認されたタグは公開ページに表示され、却下されたタグは表示されていません。 まとめ Omeka Sでソーシャルタギングなどを行う際の参考になりましたら幸いです。また同様の機能を実装する際の参考にもなりましたら幸いです。

2022年12月20日 · 1 分 · Nakamura

Gatsby CETEIceanを試す

概要 Raffaele Vigliantiさんが作成されたGatsby CETEIceanを試してみました。 https://github.com/raffazizzi/gatsby-ceteicean-workshop 試作サイト 以下が試作したサイトです。MUIの追加や、縦書き表示、RDFデータへのリンクなど、いくつかのカスタマイズを加えています。 https://nakamura196.github.io/gatsby-ceteicean-workshop/ データとして、以下の「校異源氏物語テキストDB」のTEI/XMLファイルを使用しています。 https://kouigenjimonogatari.github.io/ ソースコード カスタマイズ内容を含むソースコードは以下でご確認いただけます。 https://github.com/nakamura196/gatsby-ceteicean-workshop まとめ Gatsby CETEIceanを用いることで、TEI/XMLファイルの公開環境を効率的に開発することができそうです。 参考になりましたら幸いです。

2022年12月20日 · 1 分 · Nakamura

ジャパンサーチのSPARQLエンドポイントをYasguiで使ってみる

概要 Yasgui(Yet Another Sparql GUI)は、SPARQLクエリおよびその結果を作成、共有、可視化するための様々な高度な機能を提供します。 https://github.com/TriplyDB/Yasgui 今回は、YasguiでジャパンサーチのSPARQLエンドポイントを使用して、各種可視化を試みます。 結果 テーブル表示 データセット別件数の可視化を行います。まずは、一般的なテーブル表示です。 結果 結果の絞り込みや並び替えなども可能です。 チャート 「チャート」タブを使用して、同結果のチャート表示を試みます。 結果 「Configure」から、使用するチャートの種類を変更できます。 ギャラリー 「ギャラリー」タブを使用して、歌麿の作品を表示します。 結果 以下の記述を参考に、?widgetなどの変数を用意します。 https://triply.cc/docs/yasgui#gallery マップ 「Geo」タブを使用して、経緯度をもつ場所を表示します。 結果 以下の記述を参考にします。GeoSPARQLセマンティクスを含むSPARQLの結果が必要とのことで、concat関数やbif:st_geomfromtext関数を使用しています。 https://triply.cc/docs/yasgui#geo ネットワーク 「Network」タブを使用して、クラス同士の関係を記述します。 結果 以下の記述を参考にし、constructクエリを使用します。 https://triply.cc/docs/yasgui#network タイムライン 「Timeline」タブを使用して、歌麿の作品(一部)をタイムラインに表示します。 結果 まとめ Yasguiを用いることで、さまざまな可視化を行うことができました。本記事が参考になりましたら幸いです。

2022年11月28日 · 1 分 · Nakamura

【Omkea S モジュール紹介】Mappingモジュール

概要 Omeka Sで地図と連携するためのモジュール「Mapping」の紹介です。 https://omeka.org/s/modules/Mapping/ インストール Omeka Sの一般的な方法で、本モジュールをインストールできます。 位置情報の付与 アイテムの編集画面で、「マッピング」タブから位置情報を付与します。 公開サイトで、地図を用いた検索や表示が可能です。

2022年11月25日 · 1 分 · Nakamura

【Omkea S モジュール紹介】Timelineモジュール

概要 Omeka Sでタイムラインを作成するモジュール「Timeline」の紹介です。 https://omeka.org/s/modules/Timeline/ インストール Omeka Sの一般的な方法で、本モジュールをインストールできます。以下、インストール方法の例です。 cd omeka-s/modules wget https://github.com/Daniel-KM/Omeka-s-module-Timeline/releases/download/3.4.16.3/Timeline-3.4.16.3.zip unzip Timeline-3.4.16.3.zip 使い方 本モジュールを使用するには、サイトでページを作成する必要があります。以下の例では、「Timeline」という名前のページを作成しています。 そして画面右部の「新規ブロックを追加」からTimelineを選択します。デフォルトでは、dcterms:dateに格納された値を対象に、年表へのマッピングを行います。 そこで、アイテムのdcterms:dateフィールドに日付の値を入れてみます。 その結果、以下のように、年表を用いたアイテムの検索が可能になります。 まとめ 年表を用いたアイテムの可視化の参考になりましたら幸いです。

2022年11月24日 · 1 分 · Nakamura