无法从Sparql中获取印度城市的摘要

时间:2016-05-29 12:19:54

标签: sparql dbpedia

我正在尝试使用带有dbpedia数据集的Sqarql来获取抽象。 当我在Virtuoso上运行以下查询时,

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE { 
   [ rdfs:label ?name
  ; dbpedia-owl:abstract ?abstract
  ] .
  FILTER langMatches(lang(?abstract),"en")
  VALUES ?name { "London"@en }
}
LIMIT 10

我得到了结果,但如果我修改名称说'Gokarna'这是一个南印度旅游景点,我没有得到任何数据。但是我确实在dbpedia for Gokarna(http://dbpedia.org/page/Gokarna,_India)上看到了资源页面。我究竟做错了什么?我需要获得近800个印度地方的类似数据。

3 个答案:

答案 0 :(得分:3)

当您使用values时,您只会获得与您的字符串完全匹配的内容。对于Gokarna,这适用于@ de,@ it,@ fr,但不适用于@en,因为标签不同,正如您在上一个答案中所看到的那样。

我建议使用contains,而不是values

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE { 
   [ rdfs:label ?name
  ; dbpedia-owl:abstract ?abstract
  ] .
  FILTER langMatches(lang(?abstract),"en")
  FILTER langMatches(lang(?name),"en")
  FILTER CONTAINS (?name, "Gokarna" )
}
LIMIT 10

答案 1 :(得分:2)

我不是使用Sqarql的经验,但我可以在您的代码中看到并使用dbpedia库检查... 它不仅仅是Gokarna。它是“Gokarna,_India”。

这应该有用..

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE { 
   [ rdfs:label ?name
  ; dbpedia-owl:abstract ?abstract
  ] .
  FILTER langMatches(lang(?abstract),"en")
  VALUES ?name { "Gokarna,_India"@en }
}
LIMIT 10

答案 2 :(得分:2)

如果您浏览一下您链接到的印度Gokarna的DBpedia页面,您会注意到它的rdfs:label是“Gokarna,India”。但它的foaf:name只是“Gokarna”。这意味着您应该将查询修改为:

PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?abstract WHERE { 
   [ foaf:name ?name
  ; dbpedia-owl:abstract ?abstract
  ] .
  FILTER langMatches(lang(?abstract),"en")
  VALUES ?name { "Gokarna"@en }
}
LIMIT 10

虽然这也会让其他Gokarnas回归:Gokarna,尼泊尔,Gokarna,孟加拉国和Gokarna(电影)。如果你想删除这些,你必须找出另一个过滤器(可能是dbo:country dbr:India)。