SPARQLを使用してLinkedMDBから高いIDを持つムービーを取得できません
-
21-12-2019 - |
質問
linkedMDB Sparql Endpoint で、次のクエリを実行しています。これにより、ムービーのディレクタについて必要とするすべての情報がID 72であり、これは Titanic であるので、James Cameronに関する情報を入手します。
PREFIX mdb: <http://data.linkedmdb.org/resource/movie/>
SELECT ?director?nombre_director?id_director WHERE {
?pelicula mdb:filmid ?id .
?pelicula <http://data.linkedmdb.org/resource/movie/director> ?director .
?director <http://data.linkedmdb.org/resource/movie/director_name> ?nombre_director .
?director <http://data.linkedmdb.org/resource/movie/director_directorid> ?id_director .
FILTER (?id = 72).
}
.
映画が高い映画、例(例)、例 star trek <44396 72を44396に置き換えると、クエリは結果を返します。 entry は、ディレクトリ、ID、および名前を明確にしています。さまざまなクエリワークではないのはなぜですか?
解決
SPARQLは、リテラル72
の代わりに"72"^^xsd:integer
を書き込むことができます。あなたが見たように、あなたは問題なくID "72"^^xsd:integer
を使ってフィルムを取得することができます。ただし、あなたが探している他のフィルムにはID "44396"^^xsd:int
があります(データ型はxsd:int
、 Not xsd:integer
です)。 の理由のデータ型が異なるのですが、欲しいものを取得するのに十分です。
PREFIX mdb: <http://data.linkedmdb.org/resource/movie/>
SELECT ?director?nombre_director?id_director WHERE {
?pelicula mdb:filmid "44396"^^xsd:int .
?pelicula <http://data.linkedmdb.org/resource/movie/director> ?director .
?director <http://data.linkedmdb.org/resource/movie/director_name> ?nombre_director .
?director <http://data.linkedmdb.org/resource/movie/director_directorid> ?id_director .
}
.
director nombre_director id_director
----------------------------------------------
db:director/9025 "J.J. Abrams" 9025
.
filter
ingではなく、実際の希望の値をクエリパターンに入れます。これは少し単純化されていると思います。クエリエンジンが最適化されていない場合は、パフォーマンスが優れている可能性があります(大きな結果セットを構築していないため、物事をフィルタリングする)。実際、クエリが返される可能性がある結果の数に制限がある場合は、変数を使用する意味的に同等のクエリが結果を返す理由を説明するかもしれません。 (ただしこれは純粋な憶測です。)いずれにせよ、次のクエリは機能しませんが、それはそれがあるべきだと思います:
PREFIX mdb: <http://data.linkedmdb.org/resource/movie/>
SELECT ?director?nombre_director?id_director WHERE {
?pelicula mdb:filmid ?id .
?pelicula <http://data.linkedmdb.org/resource/movie/director> ?director .
?director <http://data.linkedmdb.org/resource/movie/director_name> ?nombre_director .
?director <http://data.linkedmdb.org/resource/movie/director_directorid> ?id_director .
filter ( ?id = "44396"^^xsd:int )
}
.