【问题标题】:How should I do, for getting the desired result from linkedmdb?我应该怎么做才能从linkedmdb获得所需的结果?
【发布时间】:2015-07-08 17:08:32
【问题描述】:

有人能解释一下这个现象吗? 我正在使用 SPARQL 查询查询端点 http://www.linkedmdb.org/snorql: 获取出演过英国电影的演员名单 Q1:

SELECT * WHERE {
?Film <http://data.linkedmdb.org/resource/movie/country> <http://data.linkedmdb.org/resource/country/GB> .
?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor.
}

在结果中,我们有一个 id 为 11764 的演员 奇怪的是,当我运行查询 Q2:

SELECT * WHERE {
   ?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor.
}

尽管 Q2 的选择性不如 Q1,但演员编号 11764 不再出现在结果中。请注意,我们通过删除 Q1 的第一个三元组模式(较少约束)得到 Q2

【问题讨论】:

  • 您的 SPARQL 查询中有一些拼写错误(? 和实际变量名称之间的空格),但我认为这不是导致您的问题的原因,所以我对其进行了编辑。

标签: rdf sparql endpoint linkedmdb


【解决方案1】:

这似乎是linkedmdb.org 端点的SPARQL 引擎中的一个错误,因为这些结果显然不一致。

为了排除查询结果大小上限的可能性,我尝试了您原始查询的几种变体。

这个查询:

SELECT * WHERE {
    ?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor . 
    FILTER (?actor = <http://data.linkedmdb.org/resource/actor/11764> )
}

给了我预期的结果(两个结果,都是我们预期的演员)。

但是,这个查询:

 SELECT * WHERE {
    ?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor . 
    FILTER (REGEX(STR(?actor), "11764"))
 }

给了我零个结果,而这个查询:

 SELECT * WHERE {
    ?Film <http://data.linkedmdb.org/resource/movie/country> <http://data.linkedmdb.org/resource/country/GB> .
    ?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor . 
    FILTER (REGEX(STR(?actor), "11764"))
 }

正如预期的那样,只给了我一个结果(该演员的一部 GB 电影)。

因此,总而言之:您的 SPARQL 查询没有任何问题。您似乎偶然发现了他们的 SPARQL 引擎中的一个错误 - 您可能希望与他们联系并提供此信息。

【讨论】:

猜你喜欢
  • 2018-05-15
  • 1970-01-01
  • 2023-01-28
  • 2013-04-18
  • 2016-05-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-03
  • 2021-08-23
相关资源
最近更新 更多