无法从 Sparql 中抽象出印度城市

Not able to get Indian cities abstract from Sparql

我正在尝试使用 Sqarql 和 dbpedia 数据集来获取摘要。 当我 运行 在 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 上看到了 Gokarna(http://dbpedia.org/page/Gokarna,_India) 的在线资源页面。我究竟做错了什么?我需要获取近 800 个印度地方的类似数据。

我没有使用 Sparql 的经验,但我在您的代码中看到了很多,并使用 dbpedia 库进行了检查... 不仅仅是戈卡纳。它是 "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

如果您查看链接到的印度 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

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

当您使用 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