有人能解释一下这个现象吗?我使用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.
}在这些结果中,当我运行查询Q2时,有一个id 11764的参与者奇怪地:
SELECT * WHERE {
?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor.
}虽然Q2没有Q1演员那么有选择性,但结果中的数字11764已不再具有选择性。注意,我们通过删除Q2的第一个三重模式(较少的约束)来获得Q1。
发布于 2015-07-08 23:41:32
这似乎是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引擎中偶然发现了一个bug --你可能想用这个信息联系他们。
https://stackoverflow.com/questions/31299213
复制相似问题