如何在使用 LIMIT 时查询 DBPEDIA SPARQL 以包含所需的值
How to query DBPEDIA SPARQL to include the desired values while using LIMIT
我正在尝试用 10 本随机书籍填充我的本地 ontology。我想在列表中包括 2 本已知书籍以进行测试 purpose.i。e 在 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
of
- 其他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
的多个值,因此此查询可能 return 重复书籍。为了克服这个问题,你必须使用 GROUP BY
+ SAMPLE
(或 GROUP_CONCAT
)
实际上,我认为此查询的更紧凑版本也应该有效,但 return 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 } }
}
我正在尝试用 10 本随机书籍填充我的本地 ontology。我想在列表中包括 2 本已知书籍以进行测试 purpose.i。e 在 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
of
- 其他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
的多个值,因此此查询可能 return 重复书籍。为了克服这个问题,你必须使用 GROUP BY
+ SAMPLE
(或 GROUP_CONCAT
)
实际上,我认为此查询的更紧凑版本也应该有效,但 return 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 } }
}