Что вам нужно сделать, это написать более содержательный (или, по крайней мере, более ограниченный) запрос. Ваш запрос просто выбирает все возможные тройки, что, по-видимому, вызывает большой стресс на конечной точке factforge (которая содержит около 3 миллиардов троек). Причина, по которой ваш запрос «не выполняется» (что, вероятно, означает, что вы просто ожидаете, когда запрос вернет результат), заключается в том, что конечная точка SPARQL занимает очень много времени, чтобы вернуть ответ.
LIMIT 100
вы положили на запросе вне, сфера применения пункта SERVICE
, и, следовательно, на самом деле не передается в удаленную конечную точку вы запросов. Хотя в этом конкретном случае оптимизатор Sesame мог бы добавить это (поскольку в вашем запросе нет дополнительных ограничений вне сферы действия предложения SERVICE), к сожалению, в настоящее время это не так умно, поэтому запрос, отправленный на factforge, не имеет лимит, а фактический предел применяется только после, вы возвращаете результат (который, в случае вашего запроса «дайте мне все ваши тройки», естественно, занимает некоторое время).
Однако очевидно оговорка SERVICE
делает работу FactForge при использовании от Сезам, потому что если вы пытаетесь немного более ограниченный запрос, например, запрос выбора всех компаний:
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.
Благодарим вас за продуманный ответ. Я использую SERVICE для объединения локальных и глобальных данных. Я пытался использовать вышеупомянутое, чтобы убедиться, что конечная точка работает, когда я получал ошибки с подробным запросом. – kurious