2015-07-08 2 views
0

Кто-нибудь объяснит мне это явление? Я запрашивая конечную точку http://www.linkedmdb.org/snorql с запросом SPARQL: Получить список актеров, которые снимались в британском фильме Q1:Как мне сделать, чтобы получить желаемый результат из связанногоmdb?

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 (меньше ограничений)

+0

Были какие-то опечатки в ваших запросах SPARQL (пробелы между именами '?' И именами фактических переменных), но я предполагаю, что это не вызвало вашу проблему, поэтому я ее отредактировал. –

ответ

1

Это, кажется, ошибка в двигателе SPARQL на конечной точке linkedmdb.org, так как эти результаты явно противоречивы.

Чтобы исключить возможность ограничения верхнего предела размера запроса, я попробовал пару вариантов исходного запроса.

Этот запрос:

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

дал мне ожидаемый результат (два результата, оба fillms с актером мы ожидаем).

Однако этот запрос:

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 - вы можете связаться с ними с этой информацией.

+0

Я не знаю, что это ошибка, так как они ограничивают количество результатов. См., Например, [Как разрешить лимиты выполнения в Linkedmdb] (http://stackoverflow.com/q/25141247/1281433), [Результаты LinkedMDB SPARQL с меньшим количеством результатов, чем ожидалось?] (Http://stackoverflow.com/ q/24283012/1281433) и комментарии по запросу [LinkedMDB SPARQL Query] (http://stackoverflow.com/q/18783869/1281433). Тем не менее, я не думаю, что [Не удается получить фильмы с высокими идентификаторами из LinkedMDB с SPARQL] (http://stackoverflow.com/q/22021040/1281433). –

+0

@JoshuaTaylor Я тоже так думал, но если бы это было ограничение количества результатов, мои более ограниченные запросы (с условиями фильтра) должны были давать согласованные (непустые) ответы. –

+0

Хорошая точка. (Я не читал ваш ответ так близко, но вы на самом деле обращались с большинством из них. LinkedMDB причудливый, и я не трачу слишком много времени на его отладку.) –

Смежные вопросы