2017-11-14 44 views
0

次のクエリで大文字小文字を区別しないようにする方法はありますか?SPARQLの大文字と小文字は区別されませんtriple

ASK { 
    VALUES (?r) { (dbr:Game_of_Thrones) } 
     { ?r ?p ?o } 
     UNION 
     { ?s ?r ?o } 
     UNION 
     { ?s ?p ?r } 
    } 

私はdbr:Game_of_Thronesdbr:game_of_thronesを使用する場合、それは関係なく、trueを返してはなりません。

私はLCASE()を使用しようとしましたが、トリプル内には許可されていません。別の方法がありますか? DBpedia SPARQLエンドポイント(https://dbpedia.org/sparql)を使用しています。

答えて

2

IRIは、理由があるため大文字と小文字が区別されます。あなたが本当にこれを回避したいなら、あなたは、各UNION句でFILTER(lcase(str(?tmp)) = lcase(str(?r)))を使用する必要があります。

ASK { 
    VALUES (?r) { (dbr:Game_of_Thrones) } 
     { ?tmp ?p ?o. FILTER(LCASE(STR(tmp)) = LCASE(STR(?r))) } 
     UNION 
     { ?s ?r ?o. FILTER(LCASE(STR(tmp)) = LCASE(STR(?r))) } 
     UNION 
     { ?s ?p ?r. FILTER(LCASE(STR(tmp)) = LCASE(STR(?r))) } 
    } 

注意、それはすべてのトリプルの上を走査し、文字列の比較を行う必要がありますで、これはパフォーマンスの低下につながることができます。

ファジー検索では、フルテキストインデックスについて考える必要があります。

また、おそらくスキーマエンティティではないリソースを探している限り、第2のUNION句を省略することをお勧めします。したがって、RDFトリプルの述語位置には決して出現しません。

+0

アドバイスをいただきありがとうございます!ケースを無視して文字列の比較を行うことは、私の使用例のために適切な方法ではないということは間違いありません。 – Peter

+0

あなたのユースケースは何ですか?たぶんもっと効率的な解決策を考えることができますか? – AKSW

+0

私は、単語の組み合わせ(例えば、「トロンのゲーム」)がDBpediaリソースに属しているかどうかチェックしたいと思います。私はこれを行う簡単な方法は、このようなDBpediaルックアップAPIを使用すると思います:http://lookup.dbpedia.org/api/search/PrefixSearch?QueryClass=&MaxHits=5&QueryString=game%20of%20thrones – Peter

関連する問題