正如所写,您的查询实际上不是合法的 SPARQL。投影变量之间不应有逗号。 DBpedia 的端点 Virtuoso 因允许一些非标准语法而臭名昭著。这尤其令人沮丧,因为如果您的 client 必须首先解析您的查询,那么您直接在 DBpedia Web 服务中尝试的某些操作可能无法与您的客户端库一起使用。您可以通过sparql.org's query validator查看查询。
在 SPARQL 中,您可以选择未出现在查询中的变量,它们应该具有某种空值。也就是说,您应该能够做到:
SELECT ?museum ?artwork ?abstract ?thumbnail ?personal_element_code WHERE {
但是,这实际上在 DBpedia 端点上不起作用(再次,一个 Virtuoso 怪事)。例如,如果您尝试以下查询,则会收到以下错误:
select ?person ?x where {
?person a dbpedia-owl:Person
}
limit 10
Virtuoso 37000 错误 SP031:SPARQL 编译器:变量“x”用于查询结果集中但未分配
但是,您可以轻松解决此问题。只需在查询正文中使用 values ?x { undef }。例如:
select ?person ?x where {
values ?x { undef }
?person a dbpedia-owl:Person
}
limit 10
SPARQL results
如果您为此请求 CSV,您将返回以下内容,其中包含您要查找的空列:
"person","x"
"http://dbpedia.org/resource/%C3%81ngel_Gim%C3%A9nez",
"http://dbpedia.org/resource/Aaron_Lines",
"http://dbpedia.org/resource/Abel_Lafleur",
"http://dbpedia.org/resource/Ada_Maimon",
"http://dbpedia.org/resource/Adam_Krikorian",
"http://dbpedia.org/resource/Albert_Constable",
"http://dbpedia.org/resource/Alex_Reid_(actress)",
"http://dbpedia.org/resource/Alex_Reid_(art_dealer)",
"http://dbpedia.org/resource/Alex_Reid_(fighter)",
"http://dbpedia.org/resource/Alex_Reid_(footballer)",
如果您实际上只想要字符串 null,这一切都容易得多。你可以('null' as ?x)。例如:
select ?person ('null' as ?x) where {
values ?x { undef }
?person a dbpedia-owl:Person
}
limit 10
SPARQL results
"person","x"
"http://dbpedia.org/resource/%C3%81ngel_Gim%C3%A9nez","null"
"http://dbpedia.org/resource/Aaron_Lines","null"
"http://dbpedia.org/resource/Abel_Lafleur","null"
"http://dbpedia.org/resource/Ada_Maimon","null"
"http://dbpedia.org/resource/Adam_Krikorian","null"
"http://dbpedia.org/resource/Albert_Constable","null"
"http://dbpedia.org/resource/Alex_Reid_(actress)","null"
"http://dbpedia.org/resource/Alex_Reid_(art_dealer)","null"
"http://dbpedia.org/resource/Alex_Reid_(fighter)","null"
"http://dbpedia.org/resource/Alex_Reid_(footballer)","null"