はじめに#
本記事では、GakuNin RDM(Research Data Management)とDydra RDFデータベースを連携させた、研究データのメタデータ管理システムの開発について解説します。このシステムは、研究プロジェクトのファイル管理とDublin Coreメタデータの登録・検索を統合的に扱うことができます。
システム概要#
アーキテクチャ#
主要技術スタック:
- Next.js 14 (App Router)
- NextAuth.js (OAuth 2.0認証)
- Dydra (RDFデータベース)
- GakuNin RDM API
- SPARQL (クエリ言語)
1. GakuNin RDMとの連携#
1.1 OAuth 2.0認証の実装#
GakuNin RDMはOAuth 2.0による認証をサポートしています。NextAuth.jsを使用してこれを実装しました。
1.2 トークンの自動リフレッシュ#
長時間のセッションを維持するため、アクセストークンの自動リフレッシュ機能を実装しました。
1.3 プロジェクトとファイルの取得#
GakuNin RDM APIを通じて、ユーザーのプロジェクト一覧とファイルを取得します。
2. Dydra RDFデータベースの活用#
2.1 非公開データの管理#
Dydraは本来公開RDFデータベースですが、APIトークンを使用することで非公開データの管理が可能です。
環境変数の設定:
APIトークンを使用したクエリ:
2.2 Named Graphによるデータ分離#
Named Graphを使用することで、プロジェクトごとにデータを論理的に分離します。
Named Graphの設計:
GakuNin RDM APIから得られるリソースURIをそのままNamed Graph URIとして使用することで、データの出所とグラフの対応を明確にしています。
プロジェクトに関連するすべてのデータ(メタデータ、SKOS主題、プロファイル)を単一のNamed Graphに統合することで、以下のメリットがあります:
- シンプルなクエリ : 複数グラフをUNIONで結合する必要がない
- 効率的な検索 : メタデータとSKOS主題の横断検索が容易
- データの一貫性 : すべてのデータが同じグラフ内で管理される
- 外部システムとの相互運用性 : RDMのリソースURIとRDFグラフの直接的な対応
- 管理の簡素化 : グラフURIの統一による運用負荷の軽減
例えば、メタデータのdc:subjectでSKOS概念を参照している場合、同一グラフ内なので直接JOINして主題ラベルを取得できます:
メタデータ登録時のNamed Graph指定:
プロジェクト単位での検索:
2.3 Dublin Coreメタデータスキーマ#
Dublin Core 15要素を完全にサポートしています。
0
3. メタデータの登録と検索#
3.1 メタデータ登録フロー#
1
登録API実装:
2
3.2 高度な検索機能#
複数のDublin Coreフィールドを横断したキーワード検索を実装しています。
3
4. SKOS主題階層管理#
4.1 SKOS概念スキーマの実装#
主題の階層構造を管理するため、SKOS(Simple Knowledge Organization System)を採用しました。
4
SKOS登録のSPARQLクエリ:
5
4.2 階層構造の取得と主題ラベルの活用#
統合グラフにより、メタデータと主題の関連を簡単にクエリできます:
6
5. プロジェクトRDFエクスポート機能#
5.1 プロジェクト全体のRDFデータ取得#
統合グラフにより、すべてのデータ(メタデータ、SKOS主題、プロファイル)を単一のCONSTRUCTクエリでエクスポートできます。
7
6. UIコンポーネントの設計#
6.1 メタデータエディタ#
Dublin Core 15要素すべてを編集可能なフォームコンポーネントを実装しています。
8
6.2 検索インターフェース#
キーワード検索とフィールド別検索の両方をサポートしています。
9
7. セキュリティとパフォーマンス#
7.1 認証とアクセス制御#
- すべてのAPIエンドポイントでセッション検証
- アクセストークンの自動リフレッシュ
- Named Graphによるプロジェクト単位のデータ分離
7.2 パフォーマンス最適化#
- Next.js App Routerによるサーバーサイドレンダリング
- SPARQL クエリの最適化(OPTIONAL句の活用)
- トークンリフレッシュの先行実行(有効期限5分前)
8. デプロイとインフラ#
8.1 Vercelへのデプロイ#
0
8.2 GakuNin RDM OAuth設定#
リダイレクトURIの登録:
1
まとめ#
本システムでは、以下の技術的課題を解決しました:
- OAuth 2.0認証の実装 - GakuNin RDMとの安全な連携
- トークン自動リフレッシュ - 長時間セッションの維持
- Named Graphによるデータ分離 - プロジェクト単位の管理
- 非公開RDFデータの管理 - APIトークンによるアクセス制御
- Dublin Core完全対応 - 標準メタデータスキーマの実装
- SKOS主題階層管理 - 構造化された主題分類
- SPARQL検索 - 柔軟なメタデータ検索
このシステムは、研究データ管理における実用的なソリューションとして、オープンサイエンスの推進に貢献します。
参考リンク#
ソースコード#
完全なソースコードは以下のリポジトリで公開しています:
https://github.com/nakamura196/next-dydra