首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个SPARQL查询不适用于Prolog?

为什么这个SPARQL查询不适用于Prolog?
EN

Stack Overflow用户
提问于 2013-05-28 15:04:29
回答 1查看 714关注 0票数 1

我正在尝试将SPARQL查询集成到Prolog程序中(我正在使用SWI)

为了测试它,我执行以下操作:

  1. 在SWI-Prolog shell中,我执行以下命令:加载sparql客户端库的use_module(library(semweb/sparql_client)).
  2. 然后,在SWI shell中,执行以下SPARQL查询: ?- sparql_query(‘选择计数(*)其中{ ?person a http://dbpedia.org/ontology/Person .?person http://it.dbpedia.org/property/nome ?name.filter regex(?name,"Leonardo") }',Row,host('dbpedia.org'),path(’/sparql/‘)。Row =row(文字(键入(‘http://www.w3.org/2001/XMLSchema#integer’,‘0’)。

我不太了解SPARQL,但我认为这很简单,而且工作方式是这样的:

这个查询询问被称为dbpedia的RDF本体上被认为是人名的对象的实例数,传递输入参数"Leonardo“。

如您所见,问题似乎找不到这种类型的任何实例(我也尝试过使用其他人的个人名称)

为什么?我少了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-28 16:10:52

您的查询不返回您希望它返回的内容。您可以与DBpedia SPARQL端点交互地使用SPARQL。我建议您使用它来调试查询,并确保它首先返回您想要的内容,然后将其复制到您的Prolog程序中。你可以把它分成几个部分,以确保它能给出适当的结果。例如,从以下内容开始:

代码语言:javascript
复制
select * where {
  ?person a <http://dbpedia.org/ontology/Person> .
}
LIMIT 10

SPARQL结果

然后一片一片地展开:

代码语言:javascript
复制
select * where {
  ?person a <http://dbpedia.org/ontology/Person> .
  ?person <http://it.dbpedia.org/property/nome> ?name .
}
LIMIT 10

SPARQL结果

此查询不返回任何内容,因此最好在继续进行筛选或计数之前对其进行调试。

在使用端点一段时间之后,使用REGEX似乎会比较昂贵,其他字符串操作也是如此。如果您可以直接查询您想要的字符串,您可能会更好。不幸的是,您也需要开始使用语言标记。例如,这里有一个查询,它使用给定的名称或姓氏"Leonardo"对人进行计数。

代码语言:javascript
复制
select COUNT(?person) where {
  ?person a dbpedia-owl:Person .
  { ?person foaf:givenName "Leonardo" }
  UNION 
  { ?person foaf:surname "Leonardo" }
}

SPARQL结果

它返回0。但是,如果在这些字符串中添加(英语)语言标记,则会得到不同的结果(133):

代码语言:javascript
复制
select COUNT(?person) where {
  ?person a dbpedia-owl:Person .
  { ?person foaf:givenName "Leonardo"@en }
  UNION 
  { ?person foaf:surname "Leonardo"@en }
}

SPARQL结果

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16795386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档