Dydraは優れたクラウドベースのRDFトリプルストアですが、JSON-LDシリアライゼーションにおいて、一部のケースで期待と異なる出力が得られることがあります。このブログでは、その挙動と、我々が実装した回避策について解説します。
確認された挙動#
期待される出力#
JSON-LD仕様では、URI参照は以下のようにオブジェクト形式で出力されることが一般的です:
Dydraで確認された出力#
DydraのJSON-LDエンドポイントでは、一部のURI参照が単なる文字列として出力されるケースが確認されました:
注意 : この挙動は全てのプロパティで発生するわけではなく、@contextの定義やプロパティの種類によって異なる場合があります。
挙動の違いによる影響#
| 形式 | JSON-LDパーサーの解釈 |
|---|
{ "@id": "..." } | URI参照(他ノードへのリンク) |
"..." | リテラル文字列 |
この違いにより、以下の影響が生じる可能性があります:
- グラフ構造のトラバーサルに影響
- 一部のSPARQLクエリ結果に影響
- JSON-LDフレーミング処理に影響
型付きリテラルについて#
同様に、xsd:dateTime などの型付きリテラルでも型情報が省略されるケースがあります。
期待される出力 :
確認された出力 :
回避策#
アプローチ:TTL形式で取得してJSON-LDを構築#
DydraはTurtle (TTL) 形式では正確にシリアライズするため、以下の戦略を採用しました:
使用例#
依存ライブラリ#
この回避策には n3 ライブラリが必要です:
まとめ#
| 項目 | 内容 |
|---|
| 確認された挙動 | 一部のURI参照が { "@id": "..." } ではなく文字列になる |
| 発生条件 | 全てのケースではなく、コンテキストやプロパティにより異なる |
| 回避策 | TTL形式で取得し、n3でパースしてJSON-LD構築 |
| 追加依存 | n3 |
Dydraを使用する際、JSON-LDの出力形式が期待と異なる場合は、TTL形式で取得してクライアント側で変換する方法が有効です。
参考リンク#
Last updated: 2025-12-29