我应该怎么做,才能从 linkedmdb 获得所需的结果?
How should I do, for getting the desired result from linkedmdb?
谁能给我解释一下这个现象?
我正在使用 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 引擎在 linkedmdb.org 端点的错误,因为这些结果显然不一致。
为了排除查询结果大小上限的可能性,我尝试了您的原始查询的几个变体。
这个查询:
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 引擎中的一个错误 - 您可能想与他们联系并提供此信息。
谁能给我解释一下这个现象? 我正在使用 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 引擎在 linkedmdb.org 端点的错误,因为这些结果显然不一致。
为了排除查询结果大小上限的可能性,我尝试了您的原始查询的几个变体。
这个查询:
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 引擎中的一个错误 - 您可能想与他们联系并提供此信息。