当前位置 : 主页 > 网络推广 > seo >

rdf – 无法使用SPARQL从LinkedMDB检索具有高ID的影片

来源:互联网 收集:自由互联 发布时间:2021-06-16
我在 LinkedMDB SPARQL endpoint运行以下查询,它的工作原理.有了它,我得到了关于电影导演的所有信息,其中id为72,即泰坦尼克号,所以我得到了关于詹姆斯卡梅隆的信息. PREFIX mdb: http://data.link
我在 LinkedMDB SPARQL endpoint运行以下查询,它的工作原理.有了它,我得到了关于电影导演的所有信息,其中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的电影,例如示例Star Trek with ID 44396,如果我用44396替换72,则查询不返回任何结果. The entry显然有一个目录,ID和名称.为什么修改后的查询不起作用?

SPARQL允许您将72写为文字“72”^^ xsd:integer的简写.如您所见,您可以使用ID“72”^^ xsd:整数检索影片而不会出现问题.但是,您正在寻找的另一部电影的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 results (one)

director          nombre_director  id_director
----------------------------------------------
db:director/9025  "J.J. Abrams"    9025

请注意,我只是将实际所需的值放入查询模式,而不是过滤.我发现这有点简单,如果查询引擎没有优化,它可能会更好地执行(因为它没有构建一个大的结果集,然后过滤掉了).实际上,这可能解释了为什么使用变量和过滤器的语义等效查询不返回结果,如果查询可以返回多少结果的限制. (但这是纯粹的推测.)无论如何,以下查询不起作用,但我认为它应该:

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 results (none)

网友评论