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

标签 sparql named-graphs

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 上下文中的“数据集”是什么?一般来说,我对数据库非常熟悉,并且原则上我理解用 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

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

问题:

  1. 为什么 RDF 数据集 的标识与常规数据集不同(FROMFROM NAMED)<
  2. 前缀的 URI 实际上在 FROM 语句中重复使用。前缀和 FROM 子句有什么区别?

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

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

最佳答案

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

数据集

端点(例如 Virtuoso、GraphDB 等数据库)有一定的自由(或没有)实现 SPARQL 概念。

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

存储库是您引用的数据集。

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

SPARQL

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

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

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

关于sparql - SPARQL 查询上下文中的 'dataset' 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60338958/

相关文章:

Java SPARQL 选择查询

sparql - 如何在 Apache Jena Fuseki 服务器中查询命名图

java - 将我的 rdf 文件转换为命名图形文件

sparql - SELECT FROM DEFAULT 实际上做了什么?

java - Sparql 查询是否重复我不明白

semantics - SPARQL:如何获取本体的实例,类层次结构的深度未知?

sparql - 在 Amazon Neptune 中使用 SPARQL 查询进行全文搜索

Sparql 结果不包含结果中包含的指定属性

graphdb - 使用预加载或loadrdf工具将数据加载到graphdb时如何指定 'named graph'?

sparql - MarkLogic 中的命名图支持