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

Sparql 在graphdb repo中为多个数据集使用上下文,sparql,graphdb,named-graphs,Sparql,Graphdb,Named Graphs,我正在从事一个研究项目,研究牙齿修复程序(即填充物)的成功。我们正在从一些牙科诊所收集数据,我们将把所有数据聚合到GraphDB三重存储中。我的问题是如何使用GraphDB上下文将所有数据存储在单个回购协议中,但仍然能够在需要时单独查询每个实践。我使用的是GraphDB的免费版本7.0.3和GraphDB工作台 当我在repo中导入数据时,它为我提供了指定上下文的选项。我的理解是,这本质上是整个RDF图的一个子图。对吗?但我有点不确定这与基本URI有何不同。在示例页面中,基本URI和上下文都是相

我正在从事一个研究项目,研究牙齿修复程序(即填充物)的成功。我们正在从一些牙科诊所收集数据,我们将把所有数据聚合到GraphDB三重存储中。我的问题是如何使用GraphDB上下文将所有数据存储在单个回购协议中,但仍然能够在需要时单独查询每个实践。我使用的是GraphDB的免费版本7.0.3和GraphDB工作台

当我在repo中导入数据时,它为我提供了指定上下文的选项。我的理解是,这本质上是整个RDF图的一个子图。对吗?但我有点不确定这与基本URI有何不同。在示例页面中,基本URI和上下文都是相同的

关于如何设置repo,我的一般想法是给它一个基本URI,并保持每个实践数据集的基本URI相同,但在加载每个实践时更改上下文。例如:

select ?patient from <practice-1> where { ?patient rdf:type :Patient }
  • 加载练习1数据:
    基本URI:www.example.com/dental-practices/
    上下文:www.example.com/dental-practices/practices-1

  • 加载练习2数据:
    基本URI:www.example.com/dental-practices/
    上下文:www.example.com/dental-practices/practices-2

  • 加载练习3数据:
    基本URI:www.example.com/dental-practices/
    上下文:www.example.com/dental-practices/practices-3

。。。等等

为了查询所有数据的集合(我想),我将使用不指定图形的SPARQL查询。例如,要查找所有患者:

select ?patient where { ?patient rdf:type :Patient }
但是,我如何质疑某一特定实践?我会指定一个图表还是使用“from”键。例如:

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

select?patient where{graph{?patient rdf:type:patient}

最后,有人知道哪里有一个页面/文档来解释如何有效地使用上下文吗?

您可以使用任何一种方法来查询特定的图形。在本例中,
GRAPH
关键字和
FROM
关键字的作用大致相同。但是,使用
FROM
-变量可能更快,因为为查询计划器优化此变量会更容易一些

一些背景:在SPARQL中,
FROM
(和
FROM NAMED
)子句指定了查询范围所在的数据集,而
GRAPH
关键字只是“放大”了当前查询数据集的子集。如果省略了
FROM
子句,则查询将在数据库的默认数据集上进行计算。在GraphDB中,默认的SPARQL数据集包括数据库中可用的所有命名图——这就是为什么在本例中使用GRAPH关键字和FROM关键字执行相同的操作。请注意,这是特定于存储的:其他数据库可以也确实选择以不同的方式定义默认数据集

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


为了进一步阅读,我推荐。在中还有一节是关于命名图的-GraphDB与RDF4J API密切相关,因此它遵循其大多数约定

除了ot Jeen的回答之外,我还要补充一点,基本URL是存储库的默认名称空间。默认情况下,该值为空,但最好使用非空的基本URL,因为这样可以保证匿名(空白)节点出现时的唯一性

谢谢,您的回答非常有用!我在回购协议中添加了许多上下文。但是,我无法检索结果。例如,如果要检索执行的牙齿修复的数量,可以这样做:PREFIX rdf:PREFIX rdfs:select distinct(count(?i)as?total_procedures),其中{i rdf:type.#restoration procedures?i rdfs:label?s.}->696,但是,如果指定上下文,我不会得到任何结果:@Bill如果您有新问题,请把它作为一个新问题,而不是一个评论发布。如果这个问题有助于提供上下文,请添加一个指向该问题的链接。比尔,不要忘记打开上下文索引,因为你是按上下文查询的。你能详细说明一下吗?我不知道基本URL与空白节点标识符有任何关系。。。