SPARQL specification提到 FROM
子句可用于指定数据集。
A SPARQL query may specify the dataset to be used for matching by using the
FROM
clause and theFROM 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
所以从规范文档中我原则上理解
- 指定了 4 个数据集,并且(我认为)
- 定义了一个“RDF 数据集”
但是。如果我省略 FROM
和 FROM 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
这么清楚???已经指定了一个数据集。是通过前缀
吗?
问题:
- 为什么
RDF 数据集
的标识与常规数据集不同(FROM
与FROM NAMED
)< - 前缀的 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/