[英]How to query DBPEDIA SPARQL to include the desired values while using LIMIT
我试图用10本随机书籍填充本地本体。 我想在列表中包括两本已知的书以进行测试。即,在10本书中,我想指定2本书的名称,其余8本书可以是随机的。
我不知道如何将FILTER和LIMIT结合在一起。
我想要查询中的2本书以及8本书。
FILTER (str(?name) IN ("Panther in the Basement", "Endless Night"))
我的密码
SELECT ?book ?date
WHERE {
?book rdf:type dbo:Book .
?book foaf:name ?name .
?book dbp:releaseDate ?date .
}
limit 10
尚不清楚为什么要执行此操作,但是可以通过更复杂的查询(即UNION
来完成
SELECT DISTINCT ?book ?date
WHERE
{ { SELECT DISTINCT ?book ?date
WHERE
{ ?book rdf:type dbo:Book ;
foaf:name ?name ;
dbp:releaseDate ?date
FILTER ( ?book NOT IN (dbr:Panther_in_the_Basement, dbr:Endless_Night) )
}
LIMIT 8
}
UNION
{ VALUES ?book { dbr:Panther_in_the_Basement dbr:Endless_Night }
?book rdf:type dbo:Book ;
foaf:name ?name ;
dbp:releaseDate ?date
}
}
注意,由于DBpedia数据集不是那么干净,并且有些书的releaseDate
具有多个值,因此该查询可能返回重复的书。 为了克服这个问题,您必须使用GROUP BY
+ SAMPLE
(或GROUP_CONCAT
)
实际上,我认为该查询的更紧凑版本也应该起作用,但它不会在DBpedia上返回任何结果:
SELECT DISTINCT ?book ?date
WHERE
{ ?book foaf:name ?name ;
dbp:releaseDate ?date
{ { SELECT ?book
WHERE
{ ?book rdf:type dbo:Book }
LIMIT 8
}
}
UNION
{ VALUES ?book { dbr:Panther_in_the_Basement dbr:Endless_Night } }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.