2016-05-29 37 views
0

我正在尝试使用sqqql与dbpedia数据集进行抽象。 当我运行在炫技下面的查询,无法获得Sparql的印度城市摘要

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个印度地方的类似数据。

回答

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 
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

如果你通过了Gokarna,印度,你链接到页面DBpedia中,你会发现,它的rdfs:label是“Gokarna,印度”。但其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)。

相关问题