Невозможно использовать SPARQL SERVICE с FactForge

Я пытаюсь получить доступ к FactForge из тройного магазина Sesame. Это запрос:

select * 

where{
SERVICE <http://factforge.net/sparql>{
?s ?p ?o
}

}
LIMIT 100

Запрос не выполняется. Та же структура работает с DBpedia. Конечная точка FactForge SPARQL в Интернете работает. Что мне нужно сделать, чтобы успешно получить доступ к конечной точке из Sesame?


person kurious    schedule 22.07.2015    source источник


Ответы (1)


Что вам нужно сделать, так это написать более осмысленный (или, по крайней мере, более ограниченный) запрос. Ваш запрос просто выбирает все возможные тройки, что, по-видимому, создает большую нагрузку на конечную точку 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
comment
Спасибо за развернутый ответ. Я использую SERVICE для объединения локальных и глобальных данных. Я пробовал вышеупомянутое только для того, чтобы убедиться, что конечная точка работает, поскольку я получал ошибки с подробным запросом. - person kurious; 23.07.2015