我正在尝试将SPARQL查询集成到Prolog程序中(我正在使用SWI)
为了测试它,我执行以下操作:
我不太了解SPARQL,但我认为这很简单,而且工作方式是这样的:
这个查询询问被称为dbpedia的RDF本体上被认为是人名的对象的实例数,传递输入参数"Leonardo“。
如您所见,问题似乎找不到这种类型的任何实例(我也尝试过使用其他人的个人名称)
为什么?我少了什么?
发布于 2013-05-28 16:10:52
您的查询不返回您希望它返回的内容。您可以与DBpedia SPARQL端点交互地使用SPARQL。我建议您使用它来调试查询,并确保它首先返回您想要的内容,然后将其复制到您的Prolog程序中。你可以把它分成几个部分,以确保它能给出适当的结果。例如,从以下内容开始:
select * where {
?person a <http://dbpedia.org/ontology/Person> .
}
LIMIT 10SPARQL结果
然后一片一片地展开:
select * where {
?person a <http://dbpedia.org/ontology/Person> .
?person <http://it.dbpedia.org/property/nome> ?name .
}
LIMIT 10SPARQL结果
此查询不返回任何内容,因此最好在继续进行筛选或计数之前对其进行调试。
在使用端点一段时间之后,使用REGEX似乎会比较昂贵,其他字符串操作也是如此。如果您可以直接查询您想要的字符串,您可能会更好。不幸的是,您也需要开始使用语言标记。例如,这里有一个查询,它使用给定的名称或姓氏"Leonardo"对人进行计数。
select COUNT(?person) where {
?person a dbpedia-owl:Person .
{ ?person foaf:givenName "Leonardo" }
UNION
{ ?person foaf:surname "Leonardo" }
}SPARQL结果
它返回0。但是,如果在这些字符串中添加(英语)语言标记,则会得到不同的结果(133):
select COUNT(?person) where {
?person a dbpedia-owl:Person .
{ ?person foaf:givenName "Leonardo"@en }
UNION
{ ?person foaf:surname "Leonardo"@en }
}SPARQL结果
https://stackoverflow.com/questions/16795386
复制相似问题