Моя проблема похожа на проблему, заданную по этому вопросу: Есть ли разница между запросами CONSTRUCT, отправленными на виртуальную конечную точку, и запросами, отправленными на Йенскую?
Я использую открытый исходный код Virtuoso в качестве своего хранилища графов и использую поставщика jena для доступа к данным в этом хранилище графов. Я делаю несколько запросов, и все работает нормально (за исключением удивительного количества памяти и времени, которое требует каждого вывода с виртуозом, но это должно быть в другом вопросе ...).
Проблема возникла, когда я попытался создать модель с помощью конструктивного запроса. Я попытался использовать VirtuosoQueryExecutionFactory
и запрос в виде строки и QueryExecutionFactory
по умолчанию с фабрикой запросов:
qexec = VirtuosoQueryExecutionFactory.create(queryString,inputModel);
model = qexec.execConstruct();
И
Query query = QueryFactory.create(queryString);
qexec = QueryExecutionFactory.create(query,inputModel);
model = qexec.execConstruct();
Запрос дает ожидаемый результат в конечной точке sparql, но пустую модель при запросе в коде.
LOGGER.info("The model is: {}", model);
LOGGER.info("The size is: {}", model.size());
Дает следующий результат:
The model is: <ModelCom {} | >
The size is: 0
Модель, в которой я выполняю запросы, не пуста, и я сделал тот же запрос из конечной точки sparql, как я уже сказал, получив заданные результаты.
Кто-нибудь знает, где может быть ошибка?
Спасибо.
Даниэль.
РЕДАКТИРОВАТЬ: вот запрос, который я пытаюсь выполнить.
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl:<http://www.w3.org/2002/07/owl#>
PREFIX xsd:<http://www.w3.org/2001/XMLSchema#>
PREFIX spatiaCore:<http://www.cedint.upm.es/residentialontology.owl#>
PREFIX test:<http://test.url#>
PREFIX spatiaCore: <http://www.cedint.upm.es/residentialontology.owl#>
CONSTRUCT {
?u ?p ?o1.
?o1 ?p2 ?o2.
?o2 ?p3 ?o3.
?o3 ?p4 ?o4.
?o4 ?p5 ?o5.
?o6 ?p6 ?u.
?o7 ?p7 ?o6
}
WHERE {
?u rdf:type spatiaCore:User.
?u spatiaCore:id "0000000003B3B474"^^<http://www.w3.org/2001/XMLSchema#string>.
?u ?p ?o1.
OPTIONAL {
?o1 ?p2 ?o2.
OPTIONAL {
?o2 ?p3 ?o3.
OPTIONAL {
?o3 ?p4 ?o4.
OPTIONAL {
?o4 ?p5 ?o5.
}
}
}
}
OPTIONAL {
?o6 ?p6 ?u.
OPTIONAL {
?o7 ?p7 ?o6
}
}
}
Как видите, запрос пытается построить граф со всеми узлами, с которыми связан пользователь, с глубиной максимум пяти отношений и узлами, которые связаны с пользователем, с глубиной максимум двух отношений.
com.hp.hpl.jena.rdf.model
, собирающего данные из хранилища графов. @JoshuaTaylor Как я уже сказал в вопросе, данные и запрос не имеют отношения к делу, посколькуLOGGER.info("The model is: {}", inputModel);
показывает все данные правильно, а тот же запрос, выполненный на конечной точке sparql, возвращает ожидаемую модель в качестве результатов (которая не пуста). Если все еще слишком сложно понять вопрос, я могу попробовать сделать минимальный рабочий пример, воспроизводящий ту же ошибку. - person Koalk   schedule 20.03.2014