から: http://www.semanticoverflow.com/questions/453/how-to-implement-semantic-data-versioning/748#748
個人的には、Freebase が採用している実用的なアプローチが非常に気に入っています。
人間用のビューを参照および編集します。
- http://www.freebase.com/view/guid/9202a8c04000641f80000000041ecebd
- http://www.freebase.com/edit/topic/guid/9202a8c04000641f80000000041ecebd
ここで公開されているデータ モデル:
- http://www.freebase.com/tools/explore/guid/9202a8c04000641f80000000041ecebd
厳密に言えば、これは RDF ではありません (おそらくそのスーパーセットです) が、その一部は RDF として公開できます。
- http://rdf.freebase.com/rdf/guid.9202a8c04000641f80000000041ecebd
これはコミュニティ主導の Web サイトであるため、誰がいつ何を言ったかを追跡する必要があるだけでなく、おそらく履歴も保持しています (何も削除しないでください)。
- http://www.freebase.com/history/view/guid/9202a8c04000641f80000000041ecebd
結論として、私があなたの問題に取り組む方法は非常に似ていて実用的です. 私の知る限り、すぐに使えるソリューションは見つかりません。ただし、「タプル」ストアを使用することもできます (3 つまたは 4 つでは、履歴を最も細かい粒度 (つまり、トリプル | クワッド) で保持するには不十分です)。
TDB コードをライブラリとして使用し (B+Tree と必要な多くの便利なものを提供するため)、データ モデルを使用して、クワッドのカウント、クワッドへの所有権の割り当て、タイムスタンプ、および利用可能な場合、前/次のクワッド:
[ id | g | s | p | o | user | timestamp | prev | next ]
どこ:
id - long (unique identifier, same (g,s,p,o) will have different id...
a lot of space, but you can count quads... and when you have a
community driven website (like this one) counting things it's
important.
g - URI (or blank node?|absent (i.e. default graph))
s - URI|blank node
p - URI
o - URI|blank node|literal
user - URI
タイムスタンプ - クワッドが作成されたとき prev - 前のクワッドの ID (存在する場合) next - 次のクワッドの ID (存在する場合)
次に、必要なインデックスを検討する必要があります。これは、データを公開してアクセスする方法によって異なります。
すべての内部構造/インデックスを外部ユーザー/人/アプリケーションに公開する必要はありません。そして、バージョン管理などを表すための RDF ボキャブラリーやオントロジーが登場するとき (およびその場合)、それらを使用してデータをすばやく公開することができます (必要に応じて)。
これは一般的な方法ではないことに注意してください。「セマンティック Web メガネ」で見ると、おそらく間違っている、悪いなどの可能性があります。あなたの質問に(クアッドストアよりも遅くなり、より多くのスペースを使用します)、その一部はRDF / LinkedDataとしてセマンティックWebに公開できます。
私の2(異端)セント。