2016-05-29 6 views
0

dbpediaデータセットでSqarqlを使用して要約を取得しようとしています。 私は私が南インドの観光スポットである「Gokarnaのは、」、私はすべてのデータを取得しておりませんと言って名前を変更しかし場合は、結果を取得していますヴィルトゥオーゾ、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(http://dbpedia.org/page/Gokarna,_India)用のdbpediaのリソースページをオンラインで見ています。私は間違って何をしていますか?私は800人近くのインド人のために同様のデータを取得する必要があります。

答えて

3

valuesを使用すると、文字列と完全に一致するもののみを取得できます。 Gokarnaの場合、これは@de、@it、@frでは動作しますが、@enでは動作しません。なぜなら、前の応答からもわかるように、ラベルが異なっているからです。

私の代わりにvaluesの、containsを使用することをお勧め:

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"です。これはあまりにも他のGokarnasを返しますけれども

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 

:Gokarnaの、ネパール、Gokarnaの、バングラデシュ、Gokarnaの(映画を)これは、あなたがあなたのクエリを変更する必要がありますを意味します。これらを削除する場合は、別のフィルタ(おそらくdbo:country dbr:India)を見つけなければなりません。

関連する問題