Что вам нужно сделать, так это написать более осмысленный (или, по крайней мере, более ограниченный) запрос. Ваш запрос просто выбирает все возможные тройки, что, по-видимому, создает большую нагрузку на конечную точку factforge (которая содержит около 3 миллиардов троек). Причина, по которой ваш запрос «не выполняется» (что, вероятно, означает, что вы просто вечно ждете, пока запрос вернет результат), заключается в том, что конечной точке SPARQL требуется очень много времени, чтобы вернуть свой ответ.
LIMIT 100
, который вы помещаете в запрос, за пределами области действия предложения SERVICE
и, следовательно, фактически не передается удаленной конечной точке, которую вы запрашиваете. Хотя в этом конкретном случае оптимизатор Sesame мог бы добавить это (поскольку в вашем запросе нет дополнительных ограничений, выходящих за рамки предложения SERVICE), к сожалению, в настоящее время это не так умно, поэтому запрос, отправленный на factforge, не содержит limit, а фактическое ограничение применяется только после получения обратно результата (что, в случае вашего запроса "дайте мне все ваши тройки", естественно, занимает некоторое время).
Однако очевидно, что предложение SERVICE
действительно работает для FactForge при использовании из Sesame, потому что если вы попробуете немного более ограниченный запрос, например запрос, выбирающий все компании:
PREFIX dbp-ont: <http://dbpedia.org/ontology/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
select *
where{
SERVICE <http://factforge.net/sparql>{
?s a dbp-ont:Company
}
} LIMIT 100
это работает нормально, и вы получаете ответ.
В более общем плане я должен рекомендовать, чтобы, если вы хотите выполнять запросы, относящиеся конкретно к конкретной конечной точке SPARQL, вы должны использовать прокси-сервер конечной точки SPARQL (который является одним из типов репозиториев, доступных в Sesame) вместо использования предложения SERVICE
. SERVICE
действительно полезен только при попытке объединить данные из вашего локального репозитория с данными удаленной конечной точки в одном запросе. Использование прокси-сервера конечной точки SPARQL позволяет убедиться, что предложения LIMIT действительно передаются конечной точке, и, как правило, обеспечивает более высокую производительность, чем запрос SERVICE.
person
Jeen Broekstra
schedule
22.07.2015