Как я должен сделать, чтобы получить желаемый результат от LinkedIn?
Кто-нибудь объяснит мне это явление? Я запрашиваю конечную точку http://www.linkedmdb.org/snorql с помощью запроса SPARQL: получите список актеров, которые снялись в британском фильме 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.
}
Среди результатов у нас есть актер с идентификатором 11764 Как ни странно, когда я запускаю запрос Q2:
SELECT * WHERE {
?Film <http://data.linkedmdb.org/resource/movie/actor> ?actor.
}
Хотя Q2 менее избирателен, чем актер Q1, номер 11764 больше не находится в результате. Обратите внимание, что мы получаем Q2, удаляя первый тройной паттерн Q1 (меньше ограничений)
1 ответ
Похоже, что это ошибка в движке SPARQL на конечной точке connectedmdb.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"))
}
дает мне ровно один результат (один фильм ГБ с этим актером), как и ожидалось.
Итак, в заключение: ничего плохого в ваших SPARQL-запросах. Вы, кажется, наткнулись на ошибку в их движке SPARQL - возможно, вы захотите связаться с ними с этой информацией.