2017-03-14 2 views
0

特定の2つのムービーとそのimdbページをlinkedmdbでクエリしようとしましたが、解析エラーが発生します。linkedmdbでフィルタを使用中に解析エラーが発生するSPARQL

以下の行を削除すると、すべてのムービーのリストが表示されます。特定のセットのリンクを取得するにはどうしたらいいですか?

FILTER (str(?title) IN ("The Magician","Royal Flash")) 

ここは私のコードです。

SELECT ?title ?imdbID 
WHERE { 
    ?film foaf:page ?imdbID . 
    ?film dc:title ?title . 

    FILTER(regex(str(?imdbID), "www.imdb.com")) 
    FILTER (str(?title) IN ("The Magician","Royal Flash")) 
} 
+0

ある

FILTER (str(?title) = "The Magician" || str(?title) = "Royal Flash")

と同じです。スペック:https://www.w3.org/TR/sparql11-query/#alternatives – AKSW

答えて

0

あなたは代わりにすべての一致を取得し、所望の値をフィルタリングのVALUESを通じてマッチングを試みることができる:

SELECT ?title ?imdbID 
WHERE { 
    ?film foaf:page ?imdbID . 
    VALUES ?title {"The Magician" "Royal Flash"} . 
    ?film dc:title ?title 
} 
+0

を参照してください。私は以下のエンドポイントを使用しています。http://www.linkedmdb.org/snorql/ – VKB

+0

** SPARQL 1.1をサポートしていないので、SPARQL UNIONを使用する必要があります。次回は、事前にSPARQLサービスのURLを表示することをお勧めします。 – AKSW

1

SPARQL 1.1仕様はIN

https://www.w3.org/TR/sparql11-query/#func-in

の等価性を示しso

FILTER (str(?title) IN ("The Magician","Royal Flash"))

は、それは** **サポートSPARQL 1.1は、このように、SPARQLは `UNION`があり、使用するしないSPARQL 1.0

+0

私はINを使う前にそれを試しました。問題は、すべてのムービーまたは1つだけを取り出すときに、これらのバリエーションがすべて機能することです。私が2人に制限しようとすると、彼らは働きません。あなたが使用した同等物は「魔術師」にしか与えられません。 「魔術師」と「ロイヤルフラッシュ」の両方の詳細が欲しい。 – VKB

+0

これはフィルタとは関係ありません。タイトルが「ロイヤルフラッシュ」と一致するものはまったくありません。知識ベースにあるデータのみを照会できます。 LinkedMDBはかなり古く、IMDBに同期したライブデータセットはありません。 IBDMページはhttp://www.imdb.com/title/tt0073639/で、SPARQLを介して 'foaf:page'の値としてURLを持つリソースはないことを確認できます – AKSW

関連する問題