如果您有具体的值用于 for ?s
,那么您可以在 SPARQL 1.1 中使用VALUES 。如果您没有具体的值,那么如果您可以构造查询以便?s
由子查询生成,那么您仍然可以执行此操作。我将使用以下数据给出每个示例:
@prefix : <http://example.org/> .
:t :hasEss :s1, :s2, :s3 .
:s1 :value "larry" .
:s2 :value "curly" .
:s3 :value "moe" .
使用VALUES
VALUES
为一个或多个变量指定固定值。
prefix : <http://example.org/>
select * where {
values ?s { :s1 :s2 :s3 }
?s :value ?value
}
$ arq --data data.n3 --query values.query
-----------------
| s | value |
=================
| :s1 | "larry" |
| :s2 | "curly" |
| :s3 | "moe" |
-----------------
我们?s
这里只使用了一个(),但是语法也支持更多,所以以后如果你有需要,你也可以这样做
values (?x ?y) { (:x1 :y1) (:x2 :y2) ... }
使用子查询
您还可以编写一个子查询来查找 的值,?s
然后超级查询将使用这些结果。
prefix : <http://example.org/>
select * where {
{
select ?s where {
:t :hasEss ?s
}
}
?s :value ?value
}
$ arq --data data.n3 --query subquery.sparql
-----------------
| s | value |
=================
| :s3 | "moe" |
| :s2 | "curly" |
| :s1 | "larry" |
-----------------