2013-05-28 35 views
1

我想SPARQL查询融入Prolog程序(我使用SWI-Prolog的)为什么这个SPARQL查询不能用于Prolog?

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

  1. 进入SWI-Prolog的壳我执行此命令:use_module(库(semweb/sparql_client))。时装载SPARQL客户端库

  2. 然后,在SWI-Prolog的壳,我执行以下SPARQL查询:

    - sparql_query(“SELECT COUNT(*),其中{人一个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(literal(type('http://www.w3.org/2001/XMLSchema#integer','0')))。

我不知道还有SPARQL,但我认为这是非常简单,这样的工作:

该查询询问那些在RDF认为是个人的名字对象的实例数本体称为dbpedia,通过输入参数“Leonardo”。

正如你所看到的问题似乎没有发现这种类型的任何实例(我也试图与其他个人姓名)

为什么?我错过了什么?

回答

5

您的查询不会返回您希望它返回的内容。您可以使用DBpedia SPARQL endpoint以交互方式使用SPARQL。我建议你使用它来调试你的查询,并确保它返回你想要的,然后将它复制到你的Prolog程序中。你可以把它建立起来,以确保它给出合适的结果。例如,开始像下面这样:

select * where { 
    ?person a <http://dbpedia.org/ontology/Person> . 
} 
LIMIT 10 

SPARQL results

然后展开它一块一块:

select * where { 
    ?person a <http://dbpedia.org/ontology/Person> . 
    ?person <http://it.dbpedia.org/property/nome> ?name . 
} 
LIMIT 10 

SPARQL results

此查询不返回任何东西,所以最好在继续进行FILTER或COUNT之前进行调试。

在与终端玩了一段时间后,似乎使用REGEX会像其他字符串操作一样昂贵。如果你可以直接查询你想要的字符串,你可能会更好。不幸的是,你也需要开始使用语言标签。例如,下面是一个用给定名称或姓氏"Leonardo"计数人的查询。

select COUNT(?person) where { 
    ?person a dbpedia-owl:Person . 
    { ?person foaf:givenName "Leonardo" } 
    UNION 
    { ?person foaf:surname "Leonardo" } 
} 

SPARQL results

它返回0。然而,如果我们增加(英文)语言标记这些字符串,我们得到不同的结果(133):

select COUNT(?person) where { 
    ?person a dbpedia-owl:Person . 
    { ?person foaf:givenName "Leonardo"@en } 
    UNION 
    { ?person foaf:surname "Leonardo"@en } 
} 

SPARQL results

+0

OK,TNX这么多,但我仍然有问题,运行这个新查询到SWI- Prolog外壳 – AndreaNobili

+0

是否有错误?数字与你期望的不同吗? ...没有更多的细节,很难给出任何更多的建议... –

+0

啊没有okok ...我刚刚进入sparql_query swi prolog谓词,并很好地工作 – AndreaNobili

相关问题