Sparql 如何使用Jena获取Dbpedia资源详细信息?
在我查询了dbpedia的Sparql端点之后,我得到的结果是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
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
可行,因为您必须确保选择所有您以后可能要查看的三元组