什么是SPARQL查询上下文中的'dataset'?



SPARQL规范提到FROM子句可以用于指定数据集。

SPARQL查询可以通过使用FROM子句和FROM NAMED子句来描述RDF数据集来指定要用于匹配的数据集。

什么是SPARQL上下文中的"数据集"?一般来说,我对数据库非常熟悉,原则上我理解,对SQL等语言表达的数据的查询会针对数据集执行,以解析该数据集的某个子集。

我试图理解以下查询:

prefix cpmeta: <...some_domain>
select distinct
?uri
?label
?stationId
from <...some_domain>
from <...some_domain>
from <...some_domain>
from <...some_domain>
from named <...some_domain>
where {
{ ?uri rdfs:label ?label }
UNION
{ ?uri cpmeta:hasName ?label }
UNION 
{
graph <...some_domain> {
?uri a cpmeta:Station .
?uri cpmeta:hasName ?label .
}
}
?uri cpmeta:hasStationId ?stationId
}
limit 100

因此,从规范文件中,我原则上理解

  1. 指定了4个数据集,并且(我认为(
  2. 定义了一个"RDF数据集">

但是。如果我省略了FROMFROM NAMED子句,那么查询实际上会执行(但结果略有不同(:

prefix cpmeta: <...some_domain>
select distinct
?uri
?label
?stationId
where {
{ ?uri rdfs:label ?label }
UNION
{ ?uri cpmeta:hasName ?label }
UNION 
{
graph <...some_domain> {
?uri a cpmeta:Station .
?uri cpmeta:hasName ?label .
}
}
?uri cpmeta:hasStationId ?stationId
}
limit 100

这么清楚???已经指定了一个数据集。是通过prefix吗?

问题:

  1. 为什么RDF dataset与常规数据集的识别不同(FROMFROM NAMED(
  2. 前缀的URI实际上在FROM语句中被重用。前缀和FROM子句之间有什么区别

这个问题-在SPARQL查询中指定数据集-展示了如何指定数据集,但没有解释这在SPARQL询问的上下文中以及在SPARQL质询被解析为实际数据的上下文中意味着什么。

这个问题——SPARQL查询中的FROM子句——提到了一个没有FROM子句的SPARQL查询是针对默认数据集执行的。但是,为什么省略所有数据集仍然会导致查询返回数据呢?

将SPARQL查询的执行与SQL查询进行比较有点棘手。SPARQL级别更高。

数据集

端点(例如,像Virtuoso、GraphDB这样的数据库(有一些实现SPARQL概念的自由。

数据集就是这样一个概念。通常,图形数据库允许您创建存储库,该存储库相当于SQL世界中的数据库。存储在这个三元组内部,这些三元组可以分组在命名图中。GRAPH构造可帮助您选择要查找的集合。

存储库是您所指的数据集。

很少有数据库支持查询不在同一数据库中托管的数据集/存储库。原因很明显。

SPARQL

您的查询越不精确,匹配的数据就越多。使用GRAPH <...> {}可以缩小集以匹配一些三元组,而无需指定完整的子查询

不要将数据集与命名空间混淆。RDF世界中的ID总是URI。URI的第一部分通常提到发明ID的组织。但它们仍然只是ID。使用前缀会使ID看起来更短。

您可以将每个三元组放在一个单独的图中,这将把图的名称变成三元组的标识符。这不是故意的,但也不是禁止使用。

RDF数据集是一组图形。它有一个默认的未命名图和零个或多个命名图。

SPARQL端点有一个要查询的数据集。如果您不做任何其他操作,那么查询将针对您将查询发送到的任何端点执行,该端点将作为其RDF数据集。

这就是OP查询返回结果的原因。端点已具有要查询的RDF数据集。

一些(少数,而不是所有(端点允许查询使用FROMFROM NAMED更改查询的RDF数据集。这两个子句描述了所需的RDF数据集。URI可能指的是网络上的图,也可能指默认数据集中的图,具体取决于实现(根据我的经验,默认数据集中的图更常见(。

用于查询的SPARQL协议也是可选的default-graph-urinamed-graph-uri参数,其功能类似于FROMFROM NAMED。同样,并非所有端点都尊重这些参数。

在查询执行期间访问命名图的正确方法是使用GRAPH,而不是FROM

相关内容

  • 没有找到相关文章

最新更新