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供您使用。我仅将其包括在内以将其限制为有用的示例)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...