0

誰かが私にこの現象を説明してくれますか? SPARQL クエリでエンドポイントhttp://www.linkedmdb.org/snorqlにクエリを実行しています: Get the list Actors who have starred in a British Movie Q1:

SELECT * WHERE {
?Film <http://data.linkedmdb.org/resource/movie/country> <http://data.linkedmdb.org/resource/country/GB> .
?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor.
}

Q2 のクエリを実行すると、奇妙なことに、結果の中に ID 11764 のアクターが含まれています。

SELECT * WHERE {
   ?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor.
}

第 2 四半期は第 1 四半期よりも選択性が低くなりますが、アクター番号 11764 はもはや結果に含まれていません。Q1 の最初のトリプル パターンを削除して Q2 を取得していることに注意してください (制約が少ない)。

4

1 に答える 1

1

これは、linkedmdb.org エンドポイントでの SPARQL エンジンのバグのようです。これらの結果は明らかに矛盾しています。

クエリ結果のサイズに上限がある可能性を排除するために、元のクエリのバリエーションをいくつか試しました。

このクエリ:

SELECT * WHERE {
    ?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor . 
    FILTER (?actor = <http://data.linkedmdb.org/resource/actor/11764> )
}

期待どおりの結果が得られました (2 つの結果で、どちらも期待するアクターで満たされています)。

ただし、このクエリ:

 SELECT * WHERE {
    ?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor . 
    FILTER (REGEX(STR(?actor), "11764"))
 }

このクエリでは、結果はゼロでした:

 SELECT * WHERE {
    ?Film <http://data.linkedmdb.org/resource/movie/country> <http://data.linkedmdb.org/resource/country/GB> .
    ?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor . 
    FILTER (REGEX(STR(?actor), "11764"))
 }

予想どおり、正確に 1 つの結果 (この俳優の 1 つの GB フィルム) が返されます。

つまり、要約すると、SPARQL クエリに問題はありません。SPARQL エンジンのバグに遭遇したようです。この情報を連絡してください。

于 2015-07-08T23:41:32.463 に答える