3

我正在从事研究牙齿修复程序(即填充物)成功的研究项目。我们正在从多家牙科诊所收集数据,并将所有数据汇总到 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 }

但是,我将如何查询特定的做法?我会指定一个图表还是使用“来自”键。例如:

select ?patient from <practice-1> where { ?patient rdf:type :Patient }

或者

select ?patient where { graph <practice-1> { ?patient rdf:type :Patient } }

最后,有谁知道哪里有解释如何有效使用上下文的页面/文档?

4

2 回答 2

1

您可以使用任一方法来查询特定图表。在这种情况下,GRAPH关键字和FROM关键字的作用大致相同。但是,使用FROM-variant 可能更快,因为为查询计划器优化此变体更容易一些。

一些背景知识:在 SPARQL 中,FROM(and FROM NAMED) 子句指定查询范围的数据集,而GRAPH关键字只是“放大”当前查询数据集的子集。如果FROM忽略该子句,则将在数据库的默认数据集上评估查询。在 GraphDB 中,默认的 SPARQL 数据集包括数据库中所有可用的命名图——这就是为什么在这种情况下使用 GRAPH 关键字和 FROM 关键字可以做同样的事情。请注意,这是特定于商店的:其他数据库可以并且确实选择以不同方式定义默认数据集。

顺便说一句:这些都与基本URI无关。基本 URI 只是在解析输入数据中的相对 URI 引用时使用的一种语法机制。像 GraphDB 这样的 RDF 数据库实际上并不存储相对 URI,因此解析器使用基本 URI 将数据中的任何相对 URI 转换为绝对 URI,然后再将其添加到数据库中。

为了进一步阅读,我推荐GraphDB 自己的关于查询行为的文档在RDF4J 编程文档中还有一个关于命名图的部分- GraphDB 与 RDF4J API 密切相关,因此它遵循其大部分约定。

于 2017-01-02T00:06:10.670 回答
0

除了 ot Jeen 的回答,我还要补充一点,base-URL 是存储库的默认命名空间。默认情况下,值为空,但使用非空基本 URL 是个好主意,因为如果匿名(空白)节点出现,它将保证它们的唯一性

于 2017-01-03T15:11:48.993 回答