我需要在RDF中代表electronic health records。这种数据是时间相关的。因此,我想将它们表示为事件。我想使用类似于Datomic数据库的东西。 Datomic使用三元组并添加了交易字段。此额外字段带有时间戳,可以包含用户定义的元数据。 我想使用命名图来记录交易/时间数据。
例如,在下面的查询中,我仅从在特定日期创建的特定编辑器中搜索三倍的图形:
SELECT ?name ?mbox ?date
WHERE {
?g dc:publisher ?name ;
dc:date ?date .
GRAPH ?g
{ ?person foaf:name ?name ; foaf:mbox ?mbox }
}
这样的查询可以解决我的问题。我担心的是:
答案 0 :(得分:0)
我最终将获得数百万个命名图。他们会使SPARQL查询太慢吗?
通常来说,不一定非要至少在一个命名图中添加数百万个三元组。但这实际上取决于您的三元组,以及在命名图上建立索引的良好程度。
我正在使用的三元存储Blazegraph支持推理(必要条件),但指出:“ Bigdata不支持开箱即用的Quads模式。哪些三元组存储支持使用四元组(命名图)的推理?
StackOverflow并不是真正适合要求工具推荐的平台-我建议您用Google搜索一下,而不是查看各种可用的Triplestore的功能列表。
我还怀疑在您需要的规模上,推理性能可能会让您失望(再次取决于课程的实施)。您确定需要推理吗?并不是说您绝对不应该这样做,而是根据您所需推理的表达能力,通常有一些方法可以使查询变得更具创意。
是否存在更好的方法来表示RDF中的此类数据?某种最佳做法指南?
对我来说,这似乎是明智的选择。如果不进一步了解使用数据的方式,规模(三元组的数量)等,很难判断另一种方法是否更好。至于最佳实践:此W3C note on N-Ary relations in RDF是很好的资源。另外:How can I express additional information (time, probability) about a relation in RDF?。