我正在研究正在研究牙齿修复程序(即填充物)成功的研究项目。我们正在收集来自多个牙科诊所的数据,我们将把所有数据汇总到GraphDB三重存储中。我的问题与如何使用GraphDB上下文有关,以便将所有数据存储在单个仓库中,但仍然能够在需要时单独查询每个实践。我使用的是免费版的GraphDB,版本7.0.3和GraphDB工作台。
当我在repo中导入数据时,它为我提供了指定上下文的选项。我的理解是,这基本上是整个RDF图的子图。对?但我不确定它与基URI的区别。在示例页面中,基URI和上下文都是相同的。
我对如何设置repo的一般想法是给它一个基本URI,并保持每个练习数据集的基本URI相同,但在加载每个练习时更改上下文。例如:
加载练习1数据:
基本URI:www.example.com/dental-practices/
上下文:www.example.com/dental-practices/practice-1
加载练习2数据:
基本URI:www.example.com/dental-practices/
上下文:www.example.com/dental-practices/practice-2
加载练习3数据:
基本URI:www.example.com/dental-practices/
上下文:www.example.com/dental-practices/practice-3
......等等......
要查询所有数据的聚合(我猜),我会使用一个没有指定图形的SPARQL查询。例如,找到所有患者:
select ?patient where { ?patient rdf:type :Patient }
但是,我如何查询特定的练习?我会指定图表还是使用"来自" keywork。例如:
select ?patient from <practice-1> where { ?patient rdf:type :Patient }
或
select ?patient where { graph <practice-1> { ?patient rdf:type :Patient } }
最后,有没有人知道哪里有解释如何有效使用上下文的页面/文档?
答案 0 :(得分:1)
您可以使用任一方法查询特定图表。在这种情况下,GRAPH
关键字和FROM
关键字都大致相同。但是,使用FROM
- 变体可能更快,因为为查询规划器优化此变体更容易一些。
一些背景知识:在SPARQL中,FROM
(和FROM NAMED
)子句指定查询范围的数据集,而GRAPH
关键字只是& #34;放大&#34;在当前查询的数据集的子集上。如果省略FROM
子句,则通过数据库的默认数据集评估查询。在GraphDB中,默认的SPARQL数据集包括数据库中可用的所有命名图 - 这就是为什么在这种情况下使用GRAPH关键字和FROM关键字执行相同的操作。请注意,这是特定于商店的:其他数据库可以并且确实选择以不同方式定义默认数据集。
顺便说一下:没有一个任何与基URI有关。基URI只是在解析输入数据中的相对URI引用时使用的语法机制。像GraphDB这样的RDF数据库实际上并不存储相对URI,因此解析器使用基URI将数据中的任何相对URI转换为绝对URI,然后再将其添加到数据库中。
如需进一步阅读,我建议GraphDB's own documentation about query behaviour。还有一个关于RDF4J Programming documentation中的命名图的部分 - GraphDB与RDF4J API紧密相关,因此它遵循大多数惯例。
答案 1 :(得分:0)
除了Jeen的回答,我还要补充一点,base-URL是存储库的默认命名空间。默认情况下,value为空,但使用非空的基本URL是一个好主意,因为如果它们出现,它将保证匿名(空白)节点的唯一性