Как получить информацию о ресурсах Dbpedia с помощью Jena?

После запроса dbpedia через его конечную точку Sparql я получаю результаты в виде Jena ResourceImpl объектов. Тогда как я могу получить подробную информацию об этом ресурсе? Например, если этот ресурс является человеком; как я могу получить его/ее birthDate?

Я попробовал это; но он всегда возвращает ноль.

QuerySolution querySolution = resultSet.next();
RDFNode x = querySolution.get("x");
ResourceImpl resource = (ResourceImpl) x;
Property property = new PropertyImpl("http://dbpedia.org/property/birthDate");
Resource propertyResourceValue = resource.getPropertyResourceValue(property); // NULL

person talha06    schedule 30.03.2013    source источник
comment
Не могли бы вы добавить запрос SPARQL?   -  person Ben Companjen    schedule 06.04.2013


Ответы (2)


Скорее всего, вам потребуется сделать последующий запрос SPARQL, если вы хотите получить дополнительные сведения о ресурсе. Например.,

String nextQuery = "DESCRIBE " + FmtUtils.stringForNode(resource.asNode(), (SerializationContext)null);
Query describeQuery = QueryFactory.create(nextQuery);
QueryExecution exec = QueryExecutionFactory.sparqlService("http://endpoint", describeQuery);
Model m = exec.execDescribe();

После этого вы сможете использовать API ресурсов в полученной модели для получения нужной информации.

person RobV    schedule 09.04.2013
comment
Разве запрос CONSTRUCT не был бы более эффективным? - person Ben Companjen; 10.04.2013
comment
Потенциально да, ОП не показал свой первоначальный запрос, поэтому мы понятия не имеем, возвращает ли он много ресурсов или один ресурс, или он выбирает достаточно информации, чтобы сделать CONSTRUCT жизнеспособным, поскольку вам нужно будет обязательно выберите все тройки, которые вы, возможно, позже захотите посмотреть - person RobV; 10.04.2013

Предположим, что ваш запрос SPARQL — это SELECT ..., ResultSet — это таблица, а каждый QuerySolution — это строка в этой таблице. Когда вы get Resource из такой строки, у вас есть только Resource; свойства не присоединяются автоматически. Следовательно, получение значения свойства в Resource возвращает null.

Это выглядит как RDFOutput делает то, что вы ожидали: преобразовывает запрос SPARQL ResultSet в RDF Model.

person Ben Companjen    schedule 06.04.2013
comment
RDFOutput здесь не поможет, он просто переводит ResultSet в кодировку RDF указанного ResultSet, поэтому getPropertyResourceValue() все равно ничего не вернет - person RobV; 09.04.2013
comment
Я не использовал его, но RDFOutput.toModel() не свяжет свойства с Resources? Во всяком случае, я только что понял, что значениеbirthDate, вероятно, является литералом, но getPropertyResourceValue возвращает (если я правильно понимаю документы) ресурс, связанный с данным свойством, и только тогда, когда он есть. listProperties(Property) или getProperty(Property) здесь было бы больше смысла, не так ли? - person Ben Companjen; 10.04.2013