首页 文章

在 graphdb repo 中为多个数据集使用上下文

提问于
浏览
3

我正在研究正在研究牙齿修复程序成功的研究项目(i.e.,填充物)。我们正在收集来自多个牙科诊所的数据,我们将把所有数据汇总到 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 } }

最后,有谁知道哪里有 page/documentation 解释如何有效地使用上下文?

2 回答

  • 1

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

    一些背景知识:在 SPARQL 中,FROM(和FROM NAMED)子句指定查询范围的数据集,而GRAPH关键字只是“放大”当前查询数据集的子集。如果省略FROM子句,则通过数据库的默认数据集评估查询。在 GraphDB 中,默认的 SPARQL 数据集包括数据库中可用的所有命名图 - 这就是为什么在这种情况下使用 GRAPH 关键字和 FROM 关键字执行相同的操作。请注意,这是 store-specific:其他数据库可以并且确实选择以不同方式定义默认数据集。

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

    为了进一步阅读,我建议GraphDB 自己的关于查询行为的文档。还有一个关于RDF4J 编程文档中的命名图的部分 - GraphDB 与 RDF4J API 紧密相关,因此它遵循大多数惯例。

  • 0

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

相关问题