在我查询dbpedia对其Sparql端点后,我得到结果作为Jena ResourceImpl
对象。那么我怎样才能得到这个资源的详细信息呢?例如,如果这个资源是一个人;我怎样才能得到他/她的birthDate
?
我试过这个;但是它总是返回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查询。例如,
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来获得您想要的信息。
假设您的SPARQL查询是一个SELECT ...
,那么ResultSet
是一个表,每个QuerySolution
是该表中的一行。当你从这样的行Resource
中get
时,你只有Resource
;属性不会自动附加。因此,获取Resource
的属性值将返回null
。
RDFOutput看起来像您所期望的那样:将SPARQL查询ResultSet
转换为RDF Model
。