SPARQL 允许您编写72
为文字的速记"72"^^xsd:integer
。如您所见,您可以"72"^^xsd:integer
毫无问题地使用 ID 检索电影。但是,您要查找的另一部电影具有 id "44396"^^xsd:int
(请注意,数据类型是xsd:int
,而不是 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 .
}
SPARQL 结果(一)
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 )
}
SPARQL 结果(无)