SPARQL限制特定变量的结果数

问题描述

假设我要寻找柏林的一些一级邻居。我问以下查询

select ?s ?p where {
  ?s ?p dbr:Berlin.
}

是否可以对返回结果进行限制,使得每个?p的唯一值最多有5个结果?

解决方法

我对子查询的尝试都超时了...

但是,可能有用的GROUP_CONCATMAX / MINSAMPLE作为潜在的有用的解决方案,如果不是完全完美的解决方案?

SELECT 
    ?writer (GROUP_CONCAT(?namestring; SEPARATOR = " ") AS ?namestrings) 
    (MIN(?namestring) AS ?min_name) 
    (MAX(?namestring) AS ?max_name) 
    (SAMPLE(?namestring) AS ?random_name) 
    (SAMPLE(?namestring) AS ?another_random_name_that_may_unfortunately_be_the_same_again) 
WHERE {
     ?writer wdt:P31 wd:Q5;
             wdt:P166 wd:Q37922;
             wdt:P735 ?firstname.
  ?firstname wdt:P1705 ?namestring.
}
GROUP BY ?writer
HAVING ((COUNT(?writer)) > 2 )
LIMIT 20

here直播。

而且,如您所见,SAMPLE显然只被评估一次,因此重复使用它不会使您接近五个(不同的)样本。

(您可以省略HAVING供您使用。我仅将其包括在内以将其限制为有用的示例)