SPARQL クライアントを Apache Jena Fuseki に対応させるときにハマった 3 つのこと

Virtuoso / Dydra 向けに作られた SPARQL Explorer「Snorql」を Apache Jena Fuseki でも動くようにしました。SPARQL は W3C 標準ですが、エンドポイント実装ごとの挙動差は意外と大きいです。Fuseki 対応で直面した 3 つの問題と、その解決方法を記録します。 開発環境 Docker で Fuseki を起動し、ローカルで検証しました。 # s e o d r f l f o v u u u c i s i c p e m s k c e m o o n o e e e e k a n r - v - - l - s k r s i g t t i u : i - : : e a s " r A F m f - c : i : 3 o D U e u d o n 0 n M S s s a m s e 3 m I E : e t p t r 0 e N K k a o a _ : n _ I i : s i n 3 t P _ - e n a 0 : A D d . / m 3 S A a y j e 0 S T t m e : " W A a l n O S : a f R E / - u D T f f s = _ u u e a 1 s s k d = e e i m t k k i e i i n s t d # c o u c テ r - k ス l H - e ト d r デ - ' a ー X C t c タ o a o 投 P n - m 入 O t b p S e i o T n n s t a e ' - r h T y u t y p t p @ p e t - : : e d / s / t t l e d o x a c t t a / a l t . h u t o r t s t l t l : e 3 ' 0 3 0 / t e s t / d a t a ' 1. DESCRIBE のレスポンス形式が違う 症状 Fuseki に DESCRIBE クエリを投げると、結果が画面に表示されません。コンソールには JSON パースエラーが出ていました。 ...

2026年2月8日 · 14 分 · Nakamura

Snorql — 複数の SPARQL エンドポイントを手軽に探索できるブラウザ UI を公開しました

Snorql — A Browser-Based UI for Exploring Multiple SPARQL Endpoints https://nakamura196.github.io/snorql/ はじめに / Introduction SPARQL エンドポイントを手軽に試せるツールが欲しい ── そう思ったことはありませんか? Have you ever wanted a quick, easy way to try out SPARQL endpoints? SPARQL は Linked Open Data (LOD) を検索するための標準クエリ言語ですが、エンドポイントごとに UI が異なったり、そもそも UI が用意されていなかったりします。そこで、1 つの統一的な UI から複数のエンドポイントを切り替えて使える ツールとして Snorql を公開しました。 SPARQL is the standard query language for searching Linked Open Data (LOD), but each endpoint often has a different UI — or none at all. To solve this, I published Snorql, a tool that lets you switch between multiple endpoints from a single, unified UI. ...

2026年2月8日 · 10 分 · Nakamura

Dydra JSON-LDシリアライゼーションの挙動と回避策

概要 Dydraは優れたクラウドベースのRDFトリプルストアですが、JSON-LDシリアライゼーションにおいて、一部のケースで期待と異なる出力が得られることがあります。このブログでは、その挙動と、我々が実装した回避策について解説します。 確認された挙動 期待される出力 JSON-LD仕様では、URI参照は以下のようにオブジェクト形式で出力されることが一般的です: { } " " " } " } @ @ p , p i t r " r " d y o @ o @ " p v i v i : e : d : d " w " w " " : a : a : h s s t [ A " G " t " t h e h p p t t n t s r r t e t : i p r p b s a s / : u : t : e E t / e / x n e / d / a t d s B s m i T e y e p t o p " p l y " o : o e " : l l . ] i { i c , { a a o . . m e e / t t i h h t e e e r r m s s / c c 1 a a " n n , . . i i o o / / a t d x d / r 0 e x s a s b / c 0 d x . 1 . 2 . 3 " 4 . . . " Dydraで確認された出力 DydraのJSON-LDエンドポイントでは、一部のURI参照が単なる文字列として出力されるケースが確認されました: ...

2025年12月29日 · 13 分 · Nakamura

Odeuropa Visualization: SKOS語彙とSPARQLを活用した香りデータの可視化プラットフォーム

はじめに Odeuropaは、ヨーロッパの香りの歴史を研究するプロジェクトで、絵画、文学、その他の歴史的資料に描かれた香りの表現を収集・分析しています。本記事では、OdeuropaのSPARQLエンドポイントを活用し、SKOS(Simple Knowledge Organization System)語彙体系に基づいた香りデータの可視化Webアプリケーションの実装について紹介します。 https://odeuropa-seven.vercel.app/ja/ プロジェクト概要 技術スタック フロントエンド : Next.js 15 (App Router) UI : Material-UI v5 国際化 : next-intl データ取得 : SPARQLクエリ (Odeuropa SPARQLエンドポイント) 言語 : TypeScript ホスティング : 静的サイト生成(SSG) 主な機能 1. 香り検索 (/odeuropa-sources) アプリケーションの中核となる機能で、Odeuropaプロジェクトが収集した香りの知覚イベント(smell perception events)を検索・閲覧できます。 主な特徴: 複雑なSPARQLクエリによるデータ取得 香り放出イベント(emission)、香りオブジェクト、ソース(絵画・文学作品など)、テキスト断片を結合 CRMベースのオントロジー(ecrm:P67_refers_to, od:F1_generatedなど)を活用 多軸フィルタリング SKOS語彙による香りの源でフィルタ(?xパラメータ) ソースタイプフィルタ(視覚的アイテム E36_Visual_Item / 言語オブジェクト E33_Linguistic_Object) リッチな情報表示 香りのラベル、ソース情報(タイトル、画像、URI) テキスト断片の引用 嗅覚体験の質的情報(Olfactory Experience) ページネーション - 20件ずつの効率的な表示 SPARQLクエリ例: S W } E H L E E R C E ? ? # { } } T e e { m m ソ U D i i ー N I s s ス ? ? ? I ? S s s と f f s O s T i i の r r o N o I o o 関 a a u u N n n 連 g g r { r C ( m m c c T o o フ e e e e d d ラ n n ? ? : : グ t t e e s e F F メ c c o m 3 1 ン e r r r u i _ _ ト c d m m r s h g 経 r f : : c s a e 由 m : P P e i d n ま : v 1 6 o _ e た P a 6 7 ? n s r は 6 l 5 _ s o a 直 7 u _ r o ? u t 接 _ e i e u s r e ) r n f r m c d e ? c e c e e f f o r e l ? e r r s _ l ? s r a p _ t x m s g o t i ? e _ m r o t s . l t e a l m l o n t ? e e t e e l . ? _ s m ? l e v i f _ m a ? s r l i l f s a a s u r i g b s e a o m e i g n e l o . m n n e . t ? n s . t ? o f u . r r a c g e m _ e i n m t a _ g v e a l u e 2. 香り詳細ページ (/odeuropa-sources/item) 個別の香りに関する詳細情報を表示するページです。 ...

2025年10月24日 · 32 分 · Nakamura

RDFSとSHACLの使い分け:rangeとpropertyShapeの関係を理解する

はじめに RDF(Resource Description Framework)でデータを扱う際、「RDFS(RDF Schema)」と「SHACL(Shapes Constraint Language)」という2つの仕組みが出てきます。どちらもプロパティやクラスの制約を定義できますが、目的も動作も全く異なります 。 この記事では、特に混乱しやすい以下の疑問に答えます: rdfs:domain / rdfs:range と SHACL の sh:class / sh:datatype は何が違うのか? RDFS の range と異なる SHACL 制約を設定してもいいのか? range がクラス(foaf:Person)なのに SHACL でデータ型(xsd:string)を指定するのは問題ないか? 1. RDFSとSHACLの根本的な違い RDFS:推論(Inference)のため RDFS は**「もしこのプロパティが使われたら、こういう知識が導き出せる」**という宣言です。 # e x R : D a F u S t h ス o キ r ー マ r r 定 d d 義 f f s s : : d r o a m n a g i e n e e x x : : P B e o r o s k o n ; . 意味 : ...

2025年10月15日 · 14 分 · Nakamura

GakuNin RDMとDydraを連携したRDFメタデータ管理システムの開発

はじめに 本記事では、GakuNin RDM(Research Data Management)とDydra RDFデータベースを連携させた、研究データのメタデータ管理システムの開発について解説します。このシステムは、研究プロジェクトのファイル管理とDublin Coreメタデータの登録・検索を統合的に扱うことができます。 システム概要 アーキテクチャ ┌ │ │ └ ┌ │ │ │ └ ─ ─ ─ G ─ ─ ─ ─ a ─ ─ ─ ─ k R A ─ ─ N ( ─ ┌ │ ▼ u D P ─ ─ e A ─ ─ ─ N M I ─ ─ x p ─ ─ ─ i ─ ─ t p ─ ─ ─ n ─ ─ . ─ ─ ┐ │ │ │ ┘ ─ j R ┬ │ ┴ ─ s o ─ ─ ┌ │ │ │ └ ─ u ─ ─ ─ ─ ─ 1 t ─ ─ ─ D ─ ─ 4 e ─ ─ ▼ y R ─ ─ r ─ ┐ │ ─ d D D ─ ─ ) ─ ─ r F B ─ ─ ─ ─ a ─ ─ ─ ─ ─ ┐ │ │ ┘ ─ ─ ┐ │ │ │ ┘ 主要技術スタック: ...

2025年10月14日 · 43 分 · Nakamura

Odeuropa Explorer の語彙階層構造を調査する

はじめに Odeuropa Explorer は、ヨーロッパの嗅覚遺産をデジタル化した興味深いプロジェクトです。EU の Horizon 2020 研究プログラムの助成を受け、歴史的な匂いの体験を横断的に検索・探索できるプラットフォームを提供しています。 このプロジェクトでは、匂いに関連する情報を以下の3つの主要なカテゴリで分類しています: Smell sources : 匂いを発する物体や物質 Fragrant Spaces : 匂いに関連する場所や空間 Gestures and Allegories : 匂いに関する身振りや寓意的表現 本記事では、これらの語彙がどのような階層構造を持っているのか、Odeuropa vocabularies リポジトリで公開されている SKOS(Simple Knowledge Organization System)形式のデータを調査した結果を報告します。 調査方法 SKOS階層の可視化スクリプト 語彙の階層構造を理解するために、Node.js で SKOS Turtle ファイルを解析するスクリプトを作成しました。 i i c a } m m o s p p n y c c $ c c c c f } f } c f } t o o s n o o r o o o o o u o o o r r t c n n d n $ S n n n r c c i } c i } n i v c c c c } n r i } p t t s s f G s r K B s s s o o f o f P c f i o o o h ) F s f L S f t t . e t d O u t t t ( n n c n c b i } n r t s n n n i c c p ; i t ( t e $ f K u p t f S i c s G s ( o G s ( o r f a i i i s s s l o o r n c ( o v r s O n s d a c . ( l b n c o t e t l n e t b n o n r n o v t t t o d n n i d t o ! p e d S c t a r a o s ' d r a o n t a c t r s a ( a r t n i e l r s s n o n b L l f f t o t s l n y C o r n s s l b e b o t d ! r o s d l c e e t t t a p s r e C r = i r a e l c m o m a r c t u p a e p b r a e n r w h p i . a h . n H n L t o v o f o o e ( e ( n a d o e b r b l t r o d b r a o e i r t a b i l . i p i d e a e n r m $ n = d c p ' c p e w p c j e e s L o a e r M r w r e i e d e l o f s r e v c d l c o r = a o t h e s r e t o e f l . a a d r o a r e M r n d d l d g o L e r d e o e C e m ' d v f t n s t p M r L n c L s l b d e s a p o r a a t . ( r ( r a f a i l n r o p f f i $ s a c t t f a M a c t a e e e r . d . w M p r H h c = e ` E s i r s C c M n t ' s . s r . , e = p ' o p a b e b = n l r s l e s e a . c i a o n $ a t x c p o e a c s r ' N u d r p : ) r p e p = e g s e r e r p g h e s n c { c h l n p p e . d ; a a f e s t s / ) = l t l s t . c = n t M . e y r ( c o = i h = = y a c t . p f f m l . a t s t ; b = s c t h s o g = ( a s t a c e n n ( ( y e h t o l e i g d o w r n o o o e n s t s p e ( r r o p c n d ( i i c p o a s r i s z r F r r w o e n = f n r > t c t h b u . t b e c n t e a e c n s h t t f s . E b p e a i e e w a w e c e ( e o r b h ( r c h c U p r n h d L i o s ( p a ' a H p l , . . d w n c e . 0 s p r > o j a b o u y e r t r t i e a l p c c u c ; c i h e m w e M e o p m ) u t e a e s r a r ( p i L o } l x s d - = o o s h e e ( S ' a 3 r a M w n t a b s . 0 d c ( o d s c t ) a w $ d t , l n n h ( ( r ) y h t . / p a c . t { j m ) e t b a e i o U ; b e { , = e [ c c ( c ' a ; n t c o n ( p M e s c e a r . r d r v n r e r l = ? i v ] e e c o h r c t h r a ) ( a p u h c t { s v o e ) e c i l M a i = n e ; p p o n t c ( p ( g r ; ) p t b ( t c [ a a r . l e ) s a b n ' d l t t n c t h t : n / r ; ( s j s . h 0 l d , p y p ) . p e d c └ e s . c e p y t / u 1 o ) ) e u v ( ] u e u t g . l e h ─ n c ) s e p : ( l / l 9 w ; c b a s . e r [ s U r e g } x i ─ t o u p t / t F e l 9 e { t j l u o , ) ] h r e t e ` ) l n { b t / t i x , 9 r ; e u b b ) ) ( i t ( t ) d ' + c j . = w l l a / c e j j b ; s , u c ( ; = r e e s > w F e m 0 r t , e e r { u r o c > e : p p c u w i , p 2 e , c c o b i n n o n r t t b p . l l / l l t t a j n ; c n { . ' e s . j r w e ' e 2 a S a , . d e d e c l ├ f v e i 3 ) u . 2 t K b v e c e p e e ─ i a c n . t o - i O e S a r t n t p n ─ x l t t o { f r r o S l K l ) . t U t g , u . H r 8 g d n ( s O u ; v r U t ' e v i g ' / f s ' [ S e a = i r h ; n ) a e / ) ' - h p 0 ( ; l ) i e ) l r 2 ; , s i r ] ' u ; ) - w u a 0 y p e . b e ' { e r 0 ' n s f o r ) , 1 S ) c 4 t t L b o ; ; e ; h / e a a j a v t y 0 x x b e d i [ ( ( 2 t - e c e s ] v c / / n l t r i ; i o s t s ' . ' t s n k u # ) v ) e i c o r t , a , d t e s t y l e p / l p n u n = d t c e e u e u ) ) o ' ' l ) l n ) ) r ) ) l ; l e ; ; e ; , ) ) w # ; ; ' S ) e ; t ( ) ) { このスクリプトの主要な処理: ...

2025年10月13日 · 36 分 · Nakamura

DydraへのAPI経由でのRDFデータ登録ガイド

はじめに Dydraは、クラウドベースのRDFデータベースサービスで、SPARQL endpointとREST APIを提供しています。本記事では、Dydra APIを使用してプログラマティックにRDFデータを登録する方法を解説します。 前提条件 Dydraアカウント APIキー Node.js環境(v16以上推奨、Node.js使用時) 注意: 本記事のコード例では、サンプルとして以下を使用しています: アカウント名: your-account リポジトリ名: your-repository APIキー: your_api_key_here 実際に使用する際は、ご自身のDydraアカウント情報に置き換えてください。 APIの基本情報 エンドポイント構成 ベ 例 S S S ー : P P t ス A A a U h R R t R t Q Q e L t L L m : p e s Q U n h : u p t t / e d s t / r a : p d y t s y : e / : d : s / r / t / a s / a d . p s t y c a p e d o r a m r m q r e a / l q n . y l t c o ( s o u G ( m r E P ( / - T O P { a ) S O a c T S c c ) T c o / o u G u n E n t T t / / } y D / o E { u L r r E e - T p r E o e ) s p i o t s o i r t y o } r y 認証 DydraではBearerトークン認証を使用します: ...

2025年10月10日 · 11 分 · Nakamura

Odeuropa:歴史的文献から匂いを抽出するLinked Dataの世界

はじめに Odeuropa(オデウロパ)は、ヨーロッパの歴史的文献から「匂い」に関する記述を抽出し、Linked Dataとして構造化したユニークなプロジェクトです。本記事では、SPARQLエンドポイントを通じて実際のデータを探索し、その構造と設計思想を明らかにしていきます。 Odeuropaとは プロジェクト名 : Odeuropa(Odeurs d’Europe = ヨーロッパの匂い) データベースURL : https://data.odeuropa.eu/ SPARQLエンドポイント : https://data.odeuropa.eu/repositories/odeuropa Webインターフェース : https://explorer.odeuropa.eu/ データモデルの全体像 OdeuropaはCIDOC-CRM(文化遺産のための概念参照モデル)をベースに、匂いに特化した拡張オントロジーを使用しています。 主要な概念と関係性 S F o r u ↓ a ↓ ├ │ │ ├ └ r g ─ ─ ─ c P m P e 1 e 6 E S E 0 n 7 m m x ( 6 t _ i ├ └ e p └ 文 _ r s ─ ─ l e ─ 献 i ( e s l r ) s テ f i F F i F _ キ e o 3 1 ( e 2 c ス r n _ _ 匂 n _ o ト s h g い c p m 断 _ ( a e ) e e p 片 t 放 d n r o ) o 出 _ e ( c s イ s r 体 e e ベ o a 験 i d ン u t イ v _ ト r e ベ e o ) c d ン d f e ト ← → ) → ─ → ─ S S O m m 中 b e e 心 j l l 的 e l l な c ハ t ( ( ブ 匂 匂 ( い い 発 ) ) 生 源 ) 重要なポイント: ...

2025年10月4日 · 14 分 · Nakamura

Omeka SにPROV-Oオントロジーを登録する方法

はじめに Omeka Sでデジタルアーカイブを構築する際、メタデータの記述に標準的な語彙を使用することで、データの相互運用性が向上します。今回は、W3Cが策定したPROV-O(PROV Ontology)をOmeka Sに登録する手順を解説します。 PROV-Oは、データやデジタルオブジェクトの来歴(プロヴェナンス)情報を記述するためのオントロジーで、「誰が」「いつ」「どのように」データを作成・変更したかを構造化して記録できます。 前提条件 Omeka S(バージョン3.0以降)がインストール済み 管理者権限でログイン可能 インターネット接続環境(外部URLからのインポートに必要) 登録手順 1. 語彙管理画面へのアクセス Omeka S管理画面にログイン 左側メニューから「語彙の一覧」をクリック 右上の「新しい語彙を追加」ボタンをクリック 2. 基本情報の入力 語彙の基本情報を以下のように入力します: 項目 入力値 ラベル PROV-Oオントロジー コメント W3C PROV-O (PROV Ontology) - データの来歴情報を記述するための標準オントロジー 名前空間URI http://www.w3.org/ns/prov# 名前空間の接頭語 prov 重要 : 名前空間URIの末尾に#(ハッシュ)が必要です。これを忘れるとプロパティが正しく認識されません。 3. ファイルのインポート設定 Import typeの選択 「URL」を選択します(デフォルトで選択されているはずです)。 File URLの入力 以下のURLを入力します: h t t p s : / / w w w . w 3 . o r g / n s / p r o v - o このURLは内容交渉(Content Negotiation)に対応しており、Omeka Sが自動的に適切な形式(Turtle)で取得します。 ...

2025年8月27日 · 3 分 · Nakamura

Recogitoを用いたテキストアノテーションを試す

概要 Recogitoを用いたテキストアノテーションを試す機会がありましたので、備忘録です。 Recogitoは以下です。 https://recogito.pelagios.org/ 以下のように説明されています。 Semantic Annotation without the pointy brackets. Recogito is an annotation tool for texts and images - not just for Digital Humanities scholars. (機械翻訳)タグを使わないセマンティックアノテーション。デジタル人文学の研究者だけでなく、誰でも使えるテキストと画像のアノテーションツール サンプルデータ 国立国会図書館が公開する以下を例とします。 https://dl.ndl.go.jp/pid/2585164/1/1 使い方 Recogitoにアクセスし、画面右上の「ログイン」ボタンからログインします。 ログイン後、画面左部の「New」ボタンを押し、「From IIIF manifest」を選択します。 今回、サンプルデータとして使用する以下のマニフェストファイルを入力します。 https://dl.ndl.go.jp/api/iiif/2585164/manifest.json 以下のように、編集画面に遷移します。 その後、矩形を作成し、「Transcribe…」の箇所にテキストを入力します。 ダウンロード 画面上部のダウンロードアイコンから、各種フォーマットでエクスポートすることができます。 JSON-LDフォーマットでダウンロードした結果は以下です。Open Annotationに形式でエクスポートされました。 [ ] { } { } , " " " " } " " ] " } " " " " } " " ] " } @ i t g , g b , t @ i t g , g b , t c d y e " " " " e o { } a " " " " ] c d y e " " " " e o { } a " " " " ] o " p n i t n h n d r s t l s o " p n i t n h n d r s t l s n : e e d y a o e y " " " " " g o y a e { } n : e e d y a o e y " " " " " g o y a e { } t " r " p m m r " t v c m p e u p b l t " r " p m m r " t v c m p e u p b l e " : a : e e e a : y a r o u t r e e e " " " e " : a : e e e a : y a r o u t r e e e " " " x h t " " p t p l e d r " c " l c t c v x h t " " p t p l e d r " c " l c t c v t t " o " : : a e [ e u a i p : e : " t y o a t t " o " : : a e [ e u a i p : e : " t y o a " t A r h g d " e t f o " : o p n l " t A r h g d " e t f o " : o p n l : p n " t " " e " : " o i s { : " r e f u : p n " t " " e " : " o i s { : " r e f u s n : t S R " : : r e e I " " " o e s n : t S R " : : r e e I " " " o e " : p o e : " " d " " m 5 : : r " " : p o e : " " d " " m 5 : : r " h t { s f c " T " : " : h a " m : h t { s f c " T " : " : h a " m : t / a : t o " 2 e 御 : t g , [ " s t / a : t o " 2 e 一 : t g , [ " s t r t / w g h 0 x 座 " " t e F T " t r t / w g h 0 x 筆 " " t e F T " p e i / a i t 2 t 候 h " t p " r o x p e i / a i t 2 t 啓 h " t p " r o x : c o r r t t 5 u 処 t 2 r s , a " y : c o r r t t 5 u 上 t 2 r s , a " y / n e e o p - a 貴 t 0 a : g : w / n e e o p - a 仕 t 0 a : g : w g " c " " s 0 l 地 p 2 n / m h g " c " " s 0 l 候 p 2 n / m h w i , o , , : 7 B 御 s 5 s / e " = w i , o , , : 7 B 寒 s 5 s / e " = w t g / - o 揃 : - c d n h p w t g / - o 湿 : - c d n h p w o i / 2 d 奉 / 0 r l t t i w o i / 2 d 不 / 0 r l t t i . . t r 3 y 仕 / 7 i . S t x . . t r 3 y 順 / 7 i . S t x w p o e T " 請 r - b n e p e w p o e T " 之 r - b n e p e 3 e . c 0 , 覚 e 2 i d l : l 3 e . c 0 , 気 e 2 i d l : l . l p o 6 重 c 3 n l e / : . l p o 6 儘 c 3 n l e / : o a e g : 候 o T g . c / 4 o a e g : ニ o T g . c / 4 r g l i 2 時 g 0 " g t w 1 r g l i 2 " g 0 " g t w 3 g i a t 3 御 i 6 o o w 0 g i a t 3 , i 6 o o w 1 / o g o : 座 t : . r w 3 / o g o : t : . r w 9 n s i . 5 候 o 1 j " . , n s i . 5 o 1 j " . , s . o p 9 " . 5 p , w 8 s . o p 9 . 2 p , w 9 o s e + , p : / 3 8 o s e + p : / 3 0 a r . l 0 e 0 a . 3 a r . l 0 e 4 a . 1 n g o a 0 l 1 p o , n g o a 0 l 5 p o , n r g : a + i r 3 n r g : a + i r 3 a g i 0 g 0 / g 4 a g i 0 g 0 / g 6 . n / o 0 i 0 i / 1 . n / o 0 i 0 i / 0 j n " s " o : i T , j n " s " o : i T , s o , . , s 0 i R 2 s o , . , s 0 i R 2 o t o . 0 f / 3 o t o . 0 f / 3 n a r o " / m 8 n a r o " / m 7 l t g r , 2 e 5 l t g r , 2 e 7 d i / g 5 d " d i / g 5 d " " o " / 8 i " o " / 8 i , n s 5 a , n s 5 a / a 1 - / a 1 - 8 t 6 f c t 6 f 2 o 4 r a o 4 r b r / a a r / a e u R g a u R g 9 1 0 s 6 1 0 s a 9 0 / 7 9 0 / 9 6 0 " 1 6 0 " 3 " 0 , f " 0 , - , 0 - , 0 3 0 7 0 3 5 9 5 2 " d " b , a , - - 4 4 7 a 3 1 1 9 - - a b 9 c a 9 4 3 - - 5 4 d 2 f a 8 5 3 5 5 0 9 2 e b b 4 1 e 9 f 7 a " " , , まとめ Recogitoを用いたテキストアノテーションにあたり、参考になりましたら幸いです。 ...

2025年7月24日 · 7 分 · Nakamura

grlc (git repository linked data API constructor)を試す

概要 grlcのGitHubリポジトリは以下です。 https://github.com/CLARIAH/grlc 以下のように説明されています。 grlc, the git repository linked data API constructor, automatically builds Web APIs using shared SPARQL queries. (機械翻訳)grlc(git repository linked data API constructor)は、共有されたSPARQLクエリを使用して自動的にWeb APIを構築するツールです。 このツールを試してみましたので、備忘録です。 ジャパンサーチのSPARQL Endpointを対象に作成したAPIエンドポイントは以下です。 https://grlc.io/api-git/nakamura196/grlc-jps 背景 Odeuropaを調査する過程で、以下のページで本ツールについて言及されていることを見つけました。 https://odeuropa.eu/nosebooks/ 使い方 以下が今回のAPI用に作成したGitHubリポジトリです。 https://github.com/nakamura196/grlc-jps 例えば、以下はタイプの一覧を取得するAPI用のSPARQLクエリです。 # # # # # # P S } O + + + + + + R E ? R E L c j G D e s d t F E h p R E n u e a I C o s O R d m s g - - X T : U p m c s a s P B o a r : タ メ j ? o Y i r i イ タ p t ? u B n y p プ デ s y t r Y D t : t 一 ー : p y c E : i 覧 タ e p e ? S 利 o < e I t C h 用 n h ( n y ( t 可 : t C ; f p ? t 能 t O o e c p な J p U o s 文 a s N ? u : 化 p : T s n / 財 a / ( o t / タ n / ? u ) j イ j c r p プ S p h c s 一 e s o e e 覧 a e ) a r a . r c r a c h c s h で h . 利 . ? g 用 g c o 可 o o . 能 . u j な j n p 文 p t / 化 / ) r 財 t d タ e W f イ r H / プ m E s の / R p 一 p E a 覧 r r を o { q 取 p l 得 e / し r ま t す y # > デコレータ構文を使用することで、swagger-uiに表示・設定する値を指定できるようでした。 ...

2025年7月24日 · 2 分 · Nakamura

Ontotext GraphDBのデスクトップ版を使用した際の空きディスク容量不足への対処

概要 Ontotext GraphDBのデスクトップ版を使用した際、 https://www.ontotext.com/products/graphdb/ 空きディスク容量不足により、データのインポートなどができないことがありました。 File not loaded; Insufficient disk space to start a transaction for repository ‘xxx’ due to: The repository ‘abc’ is critically low on free disk space with 4.6% (xxx GB) free left 本記事では、この問題への一時的な対処方法の一例を紹介します。 マニュアル 以下に記載がありました。 https://graphdb.ontotext.com/documentation/11.0/low-disk-space-health-checks.html Claudeによる回答は以下でした。 GraphDB 11.0では新しいヘルスチェック機構が追加されており、これが従来の設定を上書きしています: Fatal状態: 5%または1GB以下で発動 現在の状況: 4.6%なのでFatal状態 結果: 新しいトランザクションが完全に阻止される 対応 以下のようなgraphdb.propertiesを新規に作成して、ヘルスチェック機構を無効化するオプションを追加しました。 # g g r r G a a r p p a h h p d d h b b D . . B h h e e 1 a a 1 l l . t t 0 h h . . の m m 新 i i し n n い i i ヘ m m ル a a ス l l チ . . ェ f f ッ r r ク e e 機 e e 構 . . を s s 無 t t 効 o o 化 r r a a g g e e . . e a n s a y b n l c e C d h = e f c a k l = s f e a l s e そして、GraphDBを再起動します。結果、System Informationに設定が反映され、冒頭のエラーが解消しました。 ...

2025年7月16日 · 1 分 · Nakamura

AllegroGraphを使ってみる

概要 AllegroGraphを使ってみる機会がありましたので、備忘録です。 https://allegrograph.com/ 使い方 いくつかのセットアップ方法があるようですが、以下のクラウド版を利用してみます。 https://allegrograph.cloud/ セットアップ後、以下のように表示されます。 ログイン後、複数のRepositoriesが表示されます。 匿名アクセスを可能にする 例えば、リポジトリ「actors」のSPARQLエンドポイントは以下です。 https://ag1edt2www58hzzy.allegrograph.cloud/repositories/actors/sparql デフォルトでは、Basic認証がかかります。 そこで、anonymousユーザを作成します。ユーザ名を「anonymous」にすることで、パスワードの入力をスキップできました。 公式の説明は以下に記載があります。 https://franz.com/agraph/support/documentation/managing-users.html#anonymous-access そして、「actors」リポジトリへのREADを許可します。 この設定により、指定したリポジトリへ認証なしでアクセスできるようになります。以下は、yasguiでアクセスした例です。 https://yasgui.org/#query=PREFIX+rdf%3A+<http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23> PREFIX+rdfs%3A+<http%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23> SELECT+*+WHERE+{ ++%3Fsub+%3Fpred+%3Fobj+. }+ LIMIT+10&contentTypeConstruct=text%2Fturtle&contentTypeSelect=application%2Fsparql-results%2Bjson&endpoint=https%3A%2F%2Fag1edt2www58hzzy.allegrograph.cloud%2Frepositories%2Factors%2Fsparql&requestMethod=POST&tabTitle=Query&headers={}&outputFormat=table リポジトリを追加してみる 「my_first_repository」というリポジトリを追加しました。RDFファイルを登録してみます。 校異源氏物語テキストDBで使用している以下のRDFファイルを登録してみます。 https://github.com/kouigenjimonogatari/kouigenjimonogatari.github.io/blob/master/files/rdf/item_sets.rdf 登録時に、Graph URIを任意項目として登録することができます。入力例にしたがって、以下のように入力しました。 エクスポートする 「Repository Control」の「Archiving」からエクスポートできます。 「N-Quads」を選択して、エクスポートした結果が以下です。トリプルに加えて、先ほど登録したGraph URIが出力されていることが確認できます。 < < < < h h h h t t t t t t t t p p p p s s s s : : : : / / w w w w 3 3 3 3 i i i i d d d d . . . . o o o o r r r r g g g g / / / / k k k k o o o o u u u u i i i i g g g g e e e e n n n n j j j j i i i i m m m m o o o o n n n n o o o o g g g g a a a a t t t t a a a a r r r r i i i i / / / / a a a a p p p p i i i i / / / / i i i i t t t t e e e e m m m m _ _ _ _ s s s s e e e e t t t t s s s s / / / / 3 3 3 3 1 1 1 1 . . . . j j j j s s s s o o o o n n n n > > > > < < < < h h h h t t t t t t t t p p p p : : s : / : / w p w w u w w w r 3 w . l i . w . d w 3 o . 3 . r o . o g r o r / g r g d / g / c k 1 / 2 9 t u 0 9 e i 0 9 r g 0 / m e / 0 s n 0 2 j 1 r i / 2 e m r 2 l o d - a n f r t o - d i g s f o a c - n t h s > a e y r m n < i a t h / # a t a l x t p a - p i b n s / e s : p l # / r > t / o y w p " p 3 e ま e i r き > d t は . y し < o / ら h r v " t g t l < p k > h s o t : u " t / i 3 p / g 1 : j e " / p n / s j e e i < x a m h a r o t m c n t p h o p l . g : e g a / . o t o . a w r j r w g p i w > / / . t t w e e 3 r i . m o 3 r t 1 g y . / p x 2 e m 0 / l 0 作 > 1 品 / > < X h M < t L h t S t p c t : h p / e : m e a / x # e a i x m n a p t m l e p e g l . e e o r . r > o g r > < g h > t t p : / / e x a m p l e . o r g > SHACL Shapesを管理する Generate SHACL Shapesボタンを押すと、SHACLファイルが作成されます。 ...

2025年7月16日 · 10 分 · Nakamura

「教科書の中の源氏物語LOD」を使ってみる

概要 「教科書の中の源氏物語LOD」を使ってみましたので、備忘録です。 https://linkdata.org/work/rdf1s10294i 以下のように説明されています。 教科書の中の源氏物語LODは、高等学校古典分野の戦後検定教科書における『源氏物語』掲載データをLOD化したものである。 「教科書の中の源氏物語LOD」を作成および公開してくださった関係者の皆様に感謝いたします。 SPARQLエンドポイントの作成 今回はDyDraを使用します。また、以下の記事を参考に、Pythonで登録しました。 D D Y Y D D R R A A _ _ E A N P D I P _ O K I E N Y T = = x h x t x t x p x s : / / d y d r a . c o m / u t - d i g i t a l - a r c h i v e s / g e n j i _ u / s p a r q l f e c # c # c r n l l l o d i g i g i m p e e e e e o n n n n n d i t j t j t y n i . i . d t = m i t i r , a m e m a D k p x p _ a y i o t o p p d _ r _ r y i r l t l t . _ a i _ i _ a k C s b s b p e l t y t y i y i の _ の _ e 登 f 登 f i = n 録 i 録 i m t l l p D ( e e o y e ( ( r d n " " t r d . . a p / / D C o d d y l i a a d i n t t r e t a a a n , / / C t g g l . a e e i l p n n e o i j j n a _ i i t d k m t _ e a e e y k x n ) i t v _ _ ( l l " i i . s s . t t / _ _ . t t e t t n l l v . . " t t ) x x t t " " , , " " t t u u r r t t l l e e " " ) ) 注意点として、RDF内のURIについて、http://linkdata.org/resource/rdf1s10294i#とhttps://linkdata.org/resource/rdf1s10294i#が一部混在しておりました。今回は、http://linkdata.org/resource/rdf1s10294i#に統一する置換処理を施したのち、SPARQLエンドポイントに登録しました。 ...

2024年12月15日 · 7 分 · Nakamura

Peripleoを試す

概要 「Peripleo」を使う方法を調べましたので、備忘録です。「Peripleo」は以下のように説明されています。 Peripleo is a browser-based tool for the mapping of things related to place. https://github.com/britishlibrary/peripleo 今回は以下の記事で紹介した「れきちず」と組み合わせて、使用する方法について紹介します。 成果物 以下のURLでお試しいただけます。 https://nakamura196.github.io/peripleo/ リポジトリは以下です。 https://github.com/nakamura196/peripleo 本ブログでは、以下の『東京帝國大學本部構内及農學部建物鳥瞰圖』(東京大学農学生命科学図書館所蔵)をサンプルデータとして使用します。 https://iiif.dl.itc.u-tokyo.ac.jp/repo/s/agriculture/document/187cc82d-11e6-9912-9dd4-b4cca9b10970 背景 以下の会議に参加し、「Peripleo」について教えていただきました。「Peripleo」を開発してくださっている関係者の皆様、会議を開催してくださった皆様、また使用方法を教えてくださったGethin Rees氏に感謝いたします。 http://codh.rois.ac.jp/conference/linked-pasts-10/ 基本的な使い方 以下に記載があります。 https://github.com/britishlibrary/peripleo?tab=readme-ov-file#installation-guide 今回は、『東京帝國大學本部構内及農學部建物鳥瞰圖』のデータを利用するにあたり、カスタマイズした点について紹介します。 データの準備 以下のようなスプレッドシートを用意します。 https://docs.google.com/spreadsheets/d/1ZZJZL0K4cBOc0EgMHNV9NQ56C_fcZm0eceBg_OPmxe4/edit?usp=sharing 灰色のセルは不要な列です。 データの準備ができたら、CSV形式でダウンロードします。 JSON形式への変換 Locolligoというツールを用いて、CSVのデータをJSON形式のデータに変換します。 https://github.com/docuracy/Locolligo まず、以下にアクセスします。 https://docuracy.github.io/Locolligo/ CSVファイルをアップロード後、「Assign CSV Columns」を押すと、以下が表示されます。 予約語をCSVのヘッダーに使用しておくと、手動でマッピングする必要がないようでした。うまくマッピングされなかった場合には、手動で設定します。 なお、予約語は以下で確認できました。 https://github.com/docuracy/Locolligo/blob/main/js/data-converter.js f u $ v ] n ( a [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ [ ; c ' r ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' t # ( @ p p g g g n l l d d d d t t { i a a i i r r e e e a i i e e e e y y c o s s g d o o o o o m n n p p s s p p u n s s n ' p p m m m e k k i i c c e e s i i o , e e e e e s s s c c r r s s t a g g r ' r r t t t [ [ [ t t i i [ [ o s n n e i t t r r r 0 0 0 i i p p 0 0 m s ' m ) d i i y y y ] ] ] o o t t ] ] } i ) e ' e e e . . . . . . n n i i . . ' g . n ] n s s c c c t t i s s o o i l ] n r t , t . . o o o o y d [ [ n n d a ( e O i t % o o o p p e 0 0 s s e b ) m p f i % r r r o e n ] ] [ [ n e { o t i t % d d d n ' t . . 0 0 t l v i e l ' i i i y ] i @ t ] ] i ' e o r e ] n n n m , f i i . . f ] C n ' , a a a ' i d t @ v i , l s u , t t t , e ' l i a e a u ' e e e ' r ] e d l r s = i t s s s t ' , ' ' u ' s d i ' [ [ o ] ] ] e ] ( [ | t , 0 1 p , , , ' , ' i l ' ] ] o ] t d e c ' ' n , h o , , y r @ n o ' ' m o i a r l l ' b d m d o a ] ' ' e i n t , ) ] | n g i ; , l a i t a t t u b e u d e s d e l | e | ' c | l ] o l a , o o t r n | d g n s | l r O n t S g h G | i B e n ' a g ] s | , t s i o n u g t | h w i e n s g t | i Y n ' g ] | , X ' ] , 結果をダウンロードすると、featuresに以下のようなアイテムが格納されたデータを取得できます。 ...

2024年12月13日 · 9 分 · Nakamura

ShExCとShExJの違い

概要 ShExC(ShEx Compact Syntax)とShExJ(ShEx JSON Syntax)の違いについて、ChatGPTによる回答です。誤っている点もあるかもしれませんが、参考になりましたら幸いです。 回答 ShExC(ShEx Compact Syntax)とShExJ(ShEx JSON Syntax)は、どちらもShEx(Shape Expressions)スキーマの表現形式ですが、表記形式や用途が異なります。以下にその違いを説明します。 1. 表記形式 ShExC(ShEx Compact Syntax) : テキストベース のシンタックスです。 人間が読み書きしやすいように設計されており、シンプルかつ簡潔にRDFデータの構造や制約を記述することができます。 主に手動で記述 したり、コード内に直接埋め込む ことを想定して設計されています。 例 : < } P e f f r o o s a a o f f n : : S n a h a g a m e p e e x > x s s d { d : : i s n t t r e i g n e g r ; ? * これは「Person」という形状が、`foaf:name` という必須の文字列プロパティと、`foaf:age` というオプションの整数プロパティを持つことを示しています。 ShExJ(ShEx JSON Syntax) : ...

2024年10月25日 · 3 分 · Nakamura

ShExとSHACLの違い

概要 ShEx(Shape Expressions)Schema と SHACL(Shapes Constraint Language)の違いに関するChatGPTによる回答です。間違っている点もあるかもしれませんが、参考になりましたら幸いです。 回答 ShEx(Shape Expressions)Schema と SHACL(Shapes Constraint Language)は、どちらもRDFデータに対する検証 や制約 を定義するための言語です。両者は同じ目的を持ちながらも、構文 やアプローチ に違いがあります。以下にその違いを説明します。 1. 目的と用途 ShEx(Shape Expressions) : ShExは、RDFデータが特定の形状(Shape)に従っているかどうかを 簡潔に定義し、検証するための言語です。 主に、柔軟で簡単なスキーマ定義 を目的として設計されており、特定の形状にデータが適合するかどうかの判定がしやすいです。 スキーマ検証 が主な用途で、特定のシェイプにデータが従っているかどうかをすばやく確認できます。 SHACL(Shapes Constraint Language) : SHACLは、RDFデータに対して複雑な制約 やルール を定義するために設計されたW3C標準の言語です。 より柔軟で強力な検証機能を持ち、スキーマ定義だけでなく、制約の論理的な定義 や高次の推論 を行うことができます。 例えば、条件付き制約や、プロパティの型、データの依存関係など、より複雑なルールを記述できます。 2. 構文と表現力 ShEx : シンプルでコンパクトな構文 を持ち、RDFデータの形状を定義する際に、簡単に読み書きできるよう設計されています。 直感的で短い記述 でシェイプを定義できるため、学習コストが低く、データ検証を行う際に適しています。 例(ShExC形式): < } P e f f r o o s a a o f f n : : S n a h a g a m e p e e x > x s s d { d : : i s n t t r e i g n e g r ; ? * これは、「`PersonShape`は、`foaf:name`として文字列型、`foaf:age`として整数型のオプションプロパティを持つ」という意味です。 SHACL : ...

2024年10月25日 · 2 分 · Nakamura

rico-converterを試す

概要 rico-converterを試す機会がありましたので、備忘録です。 https://github.com/ArchivesNationalesFR/rico-converter 以下のように説明されています。 A tool to convert EAC-CPF and EAD 2002 XML files to RDF datasets conforming to Records in Contexts Ontology (RiC-O) (機会翻訳)EAC-CPFやEAD 2002のXMLファイルを、Records in Contexts Ontology(RiC-O)に準拠したRDFデータセットに変換するためのツール 変換する 以下に説明があります。 https://archivesnationalesfr.github.io/rico-converter/en/GettingStarted.html まず、以下から最新のzipファイルをダウンロードして、展開します。 https://github.com/ArchivesNationalesFR/rico-converter/releases/latest サンプルデータとして、input-eacとinput-eadがあるので、これらをRDFに変換します。 input-eac 本フォルダ内にあるinput-eac/FRAN_NP_051151.xmlについて、ChatGPTによる解説は以下です。 ! このXMLファイルは、EAC-CPF(Encoded Archival Context for Corporate Bodies, Persons, and Families)という形式で記述されており、フランスの文化省(Ministère de la Culture)などの組織に関する情報を体系的に整理したものです。主な要素は次の通りです: • Controlセクション: レコードに関するメタデータを含んでいます。これには、レコードID、言語の宣言、更新履歴、使用した資料の出典などが含まれます。 • Identityセクション: 法人(ここではフランスの文化省)に関する基本的な情報が記載されています。文化省の名前が変遷してきたことを示す複数の名称や、各名称が使われていた期間も詳細に記述されています。 • Descriptionセクション: 文化省の存在期間、法的地位、主要な機能、任務、さらにその歴史的な変遷に関する詳細な説明が含まれています。たとえば、1959年に設立され、法令に基づいてどのように運営されてきたか、組織の構造がどのように変化したかが説明されています。 • Relationsセクション: 他の組織や人物との関係を示しています。ここには、フランス国内の関連機関や教育機関、さらには歴代の文化相との関係が詳細に記載されており、外部のリソース(アーカイブやオンラインの情報)へのリンクも含まれています。 このXMLは、アーカイブや組織に関する情報を標準化された形式で記述し、他のデータベースやシステムと連携することを目的としています。特に、組織の歴史や関係性を追跡する際に有用です。 以下を実行します。 s h r i c o c o n v e r t e r . s h デフォルトのまま実行すると、output-eac-20241005といったフォルダが作成され、その中にRDFファイルが出力されます。 ...

2024年10月5日 · 7 分 · Nakamura

Pythonを使ってRDFデータをDydraに登録する

概要 Pythonを使ってRDFデータをDydraに登録するライブラリを作成しました。 https://github.com/nakamura196/dydra-py 中途半端な実装が含まれますが、お役に立つ場面があれば幸いです。 工夫 インポートは以下で行なっています。 https://github.com/nakamura196/dydra-py/blob/main/dydra_py/api.py#L55 以下のように、SPARQLのINSERT DATA オペレーションを使用しています。 d e f i " I A " h } f p f m " m r " e i r o p " p g " a l i r o o s d e n r r : f f g e " " s t f # g g n i e i r i e t t i o r r A C ( i r r t f l f e f l _ s l r a s u o = " l R a a _ s s s b e m p t n N e D p p d g e v p r e y R _ a h = h t s u F h h a r q I { } " : q I G } } " e p o e p : p _ D p t _ o e e m i フ . t a u N n } " u N R } } " r r n s r r f F a u { r n l b n ァ = p a p e S t " e S A " b i s p i i i t ( r i t f e イ a h r E _ r E P o n e o n n l d h s i z - . r t ル r r = _ y R d y R H { s t n t t e a t a T _ q の d s u T a T n e ( = s ( ( ( t ( r ( t y c o d 読 f e g r = t = < t : q e " f s a s ) s i p h f m み l ( r i D a D { _ u r . D " e t : t o e u ( 込 i f a f A } f A g d e e s a E l f r r n " n c f み b i p i " T " T r a r q t t r f r ) T , " : k h i . l h s " A " A a t y u a a r , o : h : _ u l G e . " " p a ) e t o m e o " r n e r , s N { { h } s u s r f T p f a d k s a e o { { _ t s u : i a h f t " p f s ) p f r n u s _ c l e o i B p _ : : h o i e r . c c { e f r o e l f ( r a : i p o e r _ i p m n a i i " ) m l } o d s e p l a a a r c l , a i > s e s s a e t t l e a e t z t f p t h ) r t ( l = e { ( = u o h i o : i f e f ( { s = l n , n t f { o i n o f e l s t o U s n l ( r o l 2 y e f o t R e / e f m r f 0 . o t h I l s _ i a m . 0 i s r t h e f p p l t a e : n t m h e o . a a e ) t n s a a e R f a r t s = d e t t R D p q h ) ' p r u , D D F t i l , ) # n o t s y F h _ - t i e _ g d f e k u f フ ' n d c r r f i e p o ォ ) t . o a a i l g y d r ー , " d p l e r } a m マ ) e h s e a " t a ッ d } _ t ( p , e t ト a u o t e h " = は t { r r o . f フ a r i e g w o ァ = e = . i . h r イ q s N m , e m ル u p o p r a に e o n o ' e t 応 r n e r x ) じ y s , t m d て , e . l a 変 . v ' t 更 h t e , a e e r a x b ' w d t o n i e } s t l r " e ' l s ) = ) = F . b h a e e l a s i d e n e ) s r : e s r ) t e d . D e f a u l t s t o N o n e . 工夫 工夫した点として、サイズが大きいRDFファイルを一度にアップロードした際、プロセスが途中で止まってしまうケースがありました。 ...

2024年7月26日 · 9 分 · Nakamura