来自: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
由于它是一个社区驱动的网站,他们不仅需要跟踪谁说了什么,什么时候……而且他们可能还会保留历史记录(从不删除任何内容):
- http://www.freebase.com/history/view/guid/9202a8c04000641f80000000041ecebd
总而言之,我解决您问题的方式非常相似且务实。AFAIK,您将找不到开箱即用的解决方案。但是,您可以使用“元组”存储(3 或 4 不足以将历史记录保持在最精细的粒度(即三元组|四元组))。
我会将 TDB 代码用作库(因为它为您提供了 B+Trees 和许多您需要的有用的东西)并且我将使用一个数据模型,它允许我:计算四边形、为四边形分配所有权、时间戳和上一个/下一个四边形(如果有):
[ 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 词汇表或本体时,您可以使用它们快速公开您的数据(如果您愿意的话)。
请注意,这不是常见的做法,如果你用你的“语义网络眼镜”看它,它可能是错误的、不好的等等。但是,我正在分享这个想法,因为我相信它没有害处,它可以提供一个解决方案对于您的问题(它会比四元存储更慢并且使用更多空间),其中一部分可以作为 RDF / LinkedData 暴露给语义网络。
我的 2(异端)美分。