我正在LinkedMDB SPARQL端点上运行下面的查询,它可以工作。有了它,我就能得到所有我需要的关于id 72的导演的信息,也就是泰坦尼克号,所以我得到了詹姆斯·卡梅隆的信息。
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的星际迷航,如果我用44396替换72,则查询不返回结果。但是,分录显然有一个目录、id和名称。为什么修改后的查询不能工作?
发布于 2014-02-25 18:40:52
SPARQL允许您编写72作为文字"72"^^xsd:integer的缩写。正如您所看到的,您可以使用ID "72"^^xsd:integer检索胶片,而不会出现问题。但是,您要寻找的另一部影片有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注意,我只是将实际所需的值放入查询模式,而不是filtering。我发现这有点简单,如果查询引擎没有优化,它的性能可能会更好(因为它没有构建一个大的结果集,然后过滤掉)。事实上,这可能解释了为什么使用变量和过滤器的语义等价的查询不返回结果,如果查询返回多少个结果是有限制的。(但这纯粹是猜测。)无论如何,下面的查询不起作用,但我认为它应该:
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结果(无)
https://stackoverflow.com/questions/22021040
复制相似问题