2016-05-29 63 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)。

相關問題