3

Sparql 有一个“默认图”的概念,当没有指定图上下文时查询它,并且它(取决于三重存储)可能是存储库中可用的适当图的联合,或者它可能是一个单独的“空图形”; 到目前为止,一切都很好。

但是 sparql 也有一个可以指定的关键字来代替图名,如DEFAULT

SELECT *
FROM DEFAULT
WHERE { ... }

这个命令有什么作用?我只能将其解释为一种明确的方式来请求在根本没有 FROM 子句时会发生的相同事情。但这是正确的吗?我找不到有关它的文档。那么在更新查询中使用它,或者使用CLEAR,COPY等呢?谁能指出这个关键字的含义和预期用途的文档,或者至少阐明它为什么存在?

4

2 回答 2

2

FROM DEFAULT是已为未来工作sparql-1.2/issues/43提出的功能。

该语法涵盖了 SPARQL 查询和 SPARQL 更新,因为它们共享相当多的语法。它们有不同的入口点(QueryUnitUpdateUnit)。

DEFAULT关键字出现在GraphOrDefaultGraphRefAll。两者都只在 SPARQL 更新中使用。

ADD, MOVE,CODE使用GraphOrDefault; CLEARDROP使用GraphRefAll.

FROM后跟一个iri, 或NAMED iri.

省略FROM表示隐式默认图。

于 2021-05-10T11:34:13.333 回答
2

如果查询中有一个或多个FROMorFROM NAMED语句,则查询的数据集仅由这些图形组成。根据SPARQL 1.1 查询规范第 13.2 节

FROM 和 FROM NAMED 关键字允许查询通过引用指定 RDF 数据集;他们指出,数据集应包括从给定 IRI 标识的资源表示中获得的图表(即给定 IRI 引用的绝对形式)。由许多 FROM 和 FROM NAMED 子句产生的数据集是:

  • 由 FROM 子句中引用的图的 RDF 合并组成的默认图,以及
  • 一组 (IRI, graph) 对,每个 FROM NAMED 子句中的一个。

如果没有 FROM 子句,但有一个或多个 FROM NAMED 子句,则数据集包含一个空图作为默认图。

因此,基本上这些子句的存在会创建一个查询数据集,该数据集可能隐藏底层数据集中的一些/所有图形。您的查询在此查询数据集上运行。

正如Andy 的回答 FROM DEFAULT中所指出的,SPARQL 语言的未来扩展建议将允许明确引用数据集默认图(无论可能是什么)。目前没有标准化的方法来执行此操作,因此只有省略任何FROM子句的查询才能访问默认图,除非您的服务提供了一些非标准的方式来引用它,例如用于引用默认图的自定义 URI。

对于您的特定示例查询:

SELECT *
FROM DEFAULT
WHERE { ... }

GRAPH ?g { }这将具有使用服务默认值和没有可见的命名图即任何子句在此查询中不匹配的默认图形成查询数据集的效果

于 2021-05-10T13:38:36.533 回答