当前位置: 首页 > 知识库问答 >
问题:

为什么这个SPARQL查询在Prolog中不起作用?

苏昂雄
2023-03-14

>

  • 在SWI-Prolog shell中,我执行以下命令:use_module(library(semweb/sparql_client))。加载sparql客户端库的

    然后,在SWI-Prolog shell中,我执行以下SPARQL查询:

    ?-sparql_query('select count(*)where{?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=行(文字(类型('http://www.w3.org/2001/XMLSchema#integer','0')))。

    我不太了解SPARQL,但我认为这很简单,工作方式如下:

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

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

  • 共有1个答案

    曹浩
    2023-03-14

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

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

    SPARQL结果

    然后一块块展开:

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

    在玩了一段时间的endpoint之后,使用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 }
    }
    
     类似资料:
    • 问题内容: 我正在尝试通过以下方式将日期范围划分为各个日期: 而且我不知道为什么不起作用,因为日期仍然相同,所以循环变得无限。 问题答案: plusDays不会改变原始的,您必须分配结果:

    • 问题内容: 嗨,我只是想创建一个简单的golang应用程序,它使用以下命令在identi.ca上发布新的凹痕 到目前为止,这是我的代码,恕我直言,这应该起作用,但实际上它不起作用,有人知道如何解决此问题吗? 编辑: 不:我没有收到任何错误消息:/ 问题答案: 不会将整个命令行作为单个参数。您需要将其称为: 您怎么知道是否遇到错误?您无需检查的返回值。 您实际上应该将命令创建与运行分开。这样,您可以

    • 导致上述语句中问题的代码

    • 在这里测试一下。 然而,我想匹配一对字符后的字符,所以我想我可以简单地把它放在后面: 不幸的是,这与任何东西都不匹配。

    • 问题内容: 码: 上面的代码不起作用。当我单击#clicker时,它不会发出警报,也不会隐藏。我检查了控制台,没有任何错误。我还检查了JQuery是否正在加载,实际上是否正在加载。所以不确定是什么问题。我还执行了带有警报的文档就绪功能,并且该功能正常工作,因此不确定我在做什么错。请帮忙。谢谢! 问题答案: 您应该在一个块中添加javascript代码。 即 正如jQuery文档指出的那样:“在文档

    • 问题内容: 在styles.css中,我正在使用媒体查询,这两个查询都使用以下变体: 当我缩小窗口时,这些网站的大小会调整为我希望在常规浏览器(Safari,Firefox)中使用的布局,但是,手机上的移动布局根本无法显示。相反,我只是看到默认的CSS。 谁能指出我正确的方向? 问题答案: 所有这三个都是有用的提示,但看来我需要添加一个元标记: 现在它似乎可以同时在Android(2.2)和iPh