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

What is a 'dataset' in the context of a SPARQL query?

SPARQL specification 提到 FROM 子句可用于指定数据集。

A SPARQL query may specify the dataset to be used for matching by using the FROM clause and the FROM NAMED clause to describe the RDF dataset.

SPARQL 上下文中的 "dataset" 是什么?一般来说,我非常熟悉数据库,并且我原则上理解,然后针对数据集执行以 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 dataset'

不过。如果我省略 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 与常规数据集的标识不同(FROM vs FROM NAMED
  2. 前缀的 URI 实际上在 FROM 语句中重复使用。前缀和 FROM 子句有什么区别?

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

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

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

数据集

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

数据集就是这样一个概念。通常图形数据库允许你创建一个 repository 相当于 SQL 世界中的数据库。在这个三元组中存储,这些三元组可以分组在命名图中。 GRAPH 构造可以帮助您设置要查看的 select。

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

很少有数据库支持查询不在同一数据库中的 datasets/repositories。出于非常明显的原因。

SPARQL

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

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

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

一个RDF Dataset是一组图表。它有一个默认的未命名图和零个或多个命名图。

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

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

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

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

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