我试图用10本随机书籍来填充我的本本本体。我想在列表中包含2本已知书籍以进行测试目的。我想指定2本书的名称,其余8本可以是随机的。
我不知道如何将过滤器结合在一起。
我想要查询中的两本书以及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
- 其他8本书的数据
- 两本书的数据
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 } }
}