Jenaデータストアに継続的に保存されているデータを定期的に処理する必要があります。データを挿入するときにRDFレコードの挿入時間を保存する方法はありますか?
1 に答える
RDF の興味深い便利な機能の 1 つは、データとメタデータがすべて同じレベル、つまり基本的には 1 つのグラフに格納されることです (ただし、これに関する注意事項については以下を参照してください)。そのため、データベース テーブルに添付されたメタデータなど、別の場所に更新時間などを記録するのではなく、RDF ではその情報をトリプルとして、データ自体と一緒に配置します。
example:Book
トリプル ストアにリソースを追加するとします。リソース自体にプロパティを追加するだけdcTerms:modified
で、変更日をエンコードできます。
example:eloquent_ruby
a example:Book ;
dcTerms:title "Eloquent Ruby"@en ;
dcTerms:modified "2012-12-07T08:00:00"^^xsd:dateTime.
考えられる落とし穴の 1 つは、そうする際に、そのストアを使用するすべてのアプリケーションが、modified
トリプルが書籍自体の最終更新ではなく、リソースの更新時刻を表すことを理解していることを確認する必要があるということです。example:PatientRecord
このパターンは、リソース タイプがモノそのものではなく、モノの説明をより明確に示す場合 (たとえば、サブジェクト リソースがではなく であった場合) にうまく機能しexample:Book
ます。
サブジェクト リソースの更新イベントを明示的に記録することで、更新時間が曖昧になるリスクを軽減できます。
example:eloquent_ruby
a example:Book ;
dcTerms:title "Eloquent Ruby"@en ;
dcTerms:identifier "0-321-58410-4".
<urn:uuid:6ba3f8ea-4048-11e2-82bc-ab86fea9a379>
a example:UpdateEvent ;
example:about example:eloquent_ruby ;
dcTerms:modified "2012-12-07T08:00:00"^^xsd:dateTime ;
example:changed dcTerms:identifier , dcTerms:title.
注: 変更レコードのサブジェクトとして UUID を使用する必要はありません。別の合成された ID または bNode でさえ使用できます。個人的には、UI で名前付きリソースを操作する方が簡単だからという理由だけで、最近は bNode をあまり使用しません。
アプリケーションで、コンテンツ データと来歴メタデータを同じ RDF グラフに配置したくない場合は、更新レコードを別の名前のグラフに配置できます。これは、使用するすべての SPARQL クエリでグラフ名を使用することを覚えておく必要があることを意味します (Jena TDB のユニオン デフォルト グラフ機能に依存しない限り) が、コンテンツ データとメタデータを個別に管理し、それを非表示にすることができます。必要に応じて一部のユーザーから。