Sparql 如何检索DBpedia资源的摘要?

Sparql 如何检索DBpedia资源的摘要?,sparql,dbpedia,Sparql,Dbpedia,我需要找到所有DBpedia类别和文章,它们的摘要包含一个特定的单词。 我知道如何编写SPARQL查询来查询标签,如下所示: SELECT ?uri ?txt WHERE { ?uri rdfs:label ?txt . ?txt bif:contains "Machine" . } 但我还没有弄清楚如何搜索摘要。 我试过以下方法,但似乎不正确 SELECT ?uri ?txt WHERE { ?uri owl:abstract ?txt . ?txt bif:contai

我需要找到所有DBpedia类别和文章,它们的摘要包含一个特定的单词。 我知道如何编写SPARQL查询来查询标签,如下所示:

SELECT ?uri ?txt  WHERE {
  ?uri rdfs:label ?txt .
  ?txt bif:contains "Machine" .
}
但我还没有弄清楚如何搜索摘要。 我试过以下方法,但似乎不正确

SELECT ?uri ?txt  WHERE {
  ?uri owl:abstract ?txt .
  ?txt bif:contains "Machine" .
}

如何检索摘要以查询其文本?

既然您已经知道如何在字符串中搜索文本内容,这个问题实际上是关于如何获取摘要。如果在web浏览器中检索任何DBpedia资源,例如(将重定向到),您可以看到它是主语或谓语的三元组。在本例中,您将看到属性是
dbpediaowl:abstract
。这样你就可以做这样的事情

select * where { 
  ?s dbpedia-owl:abstract ?abstract .
  ?abstract bif:contains "Monadnock" .
  filter langMatches(lang(?abstract),"en")
}
limit 10

您可以简单地检索主题的所有三元组,并查看哪些三元组与主题摘要相关,而不是访问非端点支持的资源页面。既然您知道抽象是一个文本,您甚至可以将其限制为三元组,其中对象是一个文本,并且可能使用您想要的语言。例如:

select ?p ?o where { 
  dbpedia:Mount_Monadnock ?p ?o .
  filter ( isLiteral(?o) && langMatches(lang(?o),'en') )
}


这也清楚地表明,你想要的财产是。当您有一个实时查询界面,可以使用它来下拉任意数据时,很容易找到您想要的数据部分。一开始只需做比您想要的更多的工作,然后再进行优化,以得到您想要的。

非常感谢,这两种解决方案都能满足我的需求。但是,既然您似乎已经对它进行了彻底的调查,我想问您更多的问题……我不理解您的短语“哪些不是端点将支持”。。你想澄清一下吗?我是个新手,我想我可以直接用Jena for java询问DBpedia。我还没有下载任何数据集。我的方法合适吗?谢谢。还有一个问题:如果您熟悉Jena框架,我将使用QueryFactory创建第一个查询,但返回一个错误“未解析的前缀名称:dbpedia owl:abstract”。你知道为什么会这样吗?(我可能会就此提出一个新问题)。是的,您需要在查询中使用
前缀dbpedia owl:
定义前缀。web界面为方便您预定义了一些,但严格来说,它们需要包含在查询中。您需要最后的
/
(我在评论中遗漏了它):
前缀dbpedia owl:
。之后,属性为
http://dbpedia.org/ontology/abstract
,而不是
http://dbpedia.org/ontologyabstract
。web界面上列出的所有前缀。转到并查看顶部的链接。这些都是使用web界面时自动使用的前缀。但是,从编程查询中,您需要包括您使用的任何一个。@svarog是的,DBpedia更改了默认前缀集,因此一些旧查询需要更新前缀。