我正在运行以下查询LinkedMDB SPARQL 端点它有效。有了它,我可以获得有关 id 72 的电影导演的所有信息,即Titanic,所以我得到了关于詹姆斯·卡梅隆的信息。
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).
}
对于具有较高 ID 的电影,例如ID 44396 的《星际迷航》,如果我将 72 替换为 44396,则查询不会返回任何结果。入口不过,显然有一个目录、id 和名称。为什么更改后的查询不起作用?
SPARQL 让您可以编写72
作为文字的简写"72"^^xsd:integer
。如您所见,您可以使用 ID 检索影片"72"^^xsd:integer
没有问题。但是,您要查找的另一部电影的 ID 为"44396"^^xsd:int
(注意数据类型是xsd:int
, not xsd:integer
)。我不知道why数据类型不同,但足以帮助我们检索我们想要的内容:
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 结果(无)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)