Sparql 如何使用Jena获取Dbpedia资源详细信息?

Sparql 如何使用Jena获取Dbpedia资源详细信息?,sparql,semantic-web,jena,dbpedia,arq,Sparql,Semantic Web,Jena,Dbpedia,Arq,在我查询了dbpedia的Sparql端点之后,我得到的结果是Jena ResourceImpl对象。那么,我如何才能获得此资源的详细信息?例如,如果该资源是个人;我怎样才能得到他/她的生日 我试过这个;但它总是返回null QuerySolution querySolution = resultSet.next(); RDFNode x = querySolution.get("x"); ResourceImpl resource = (ResourceImpl) x; Property pr

在我查询了dbpedia的Sparql端点之后,我得到的结果是
Jena ResourceImpl
对象。那么,我如何才能获得此资源的详细信息?例如,如果该资源是个人;我怎样才能得到他/她的
生日

我试过这个;但它总是返回null

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

假设SPARQL查询是一个
SELECT…
ResultSet
是一个表,每个
QuerySolution
都是该表中的一行。当您从这样一行
获取
资源
时,您只有一个
资源
;属性不会自动附加。因此,在
资源
上获取属性值将返回
null


它看起来像您所期望的那样:将SPARQL查询
ResultSet
转换为RDF
模型

如果您想获得有关资源的更多详细信息,可能需要进行后续SPARQL查询。例如:

String nextQuery=“descripe”+FmtUtils.stringForNode(resource.asNode(),(SerializationContext)null);
Query descripeQuery=QueryFactory.create(nextQuery);
QueryExecution exec=QueryExecutionFactory.sparqlService(“http://endpoint“,描述查询);
模型m=exec.execdescripe();

然后,您应该能够在结果模型上使用资源API来获取所需的信息。

您可以添加SPARQL查询吗?
RDFOutput
在这里没有帮助,它只是将
ResultSet
转换为所述
ResultSet
的RDF编码,因此
getPropertyResourceValue()
仍可能不会返回任何我没有使用过的内容,但将
RDFOutput.toModel()
不将属性连接到
资源
s?无论如何,我刚刚意识到birthDate值可能是一个文本,但是
getPropertyResourceValue
返回(如果我正确理解文档的话)一个由给定属性连接的资源-并且只有当存在一个时才返回
listProperties(Property)
getProperty(Property)
在这里更有意义,不是吗?
首先构造
查询不是更有效吗?可能是的,OP没有显示他的初始查询,所以我们不知道他是带回了大量资源还是单个资源,或者他是否选择了足够的信息使
CONSTRUCT
可行,因为您必须确保选择所有您以后可能要查看的三元组