【问题标题】:How to get Dbpedia resource details using Jena?如何使用 Jena 获取 Dbpedia 资源详细信息?
【发布时间】:2013-03-30 21:26:41
【问题描述】:

通过 Sparql 端点 查询 dbpedia 后,我得到的结果为 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 查询吗?

标签: sparql semantic-web jena dbpedia arq


【解决方案1】:

如果您想获得有关资源的更多详细信息,您可能需要进行后续 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 来获取所需的信息。

【讨论】:

  • 首先使用CONSTRUCT 查询不是更有效吗?
  • 可能是的,OP 没有显示他的初始查询,所以我们不知道他是否带回了大量资源或单个资源,或者他是否选择了足够的信息以使 CONSTRUCT 可行因为您必须确保选择以后可能要查看的所有三元组
【解决方案2】:

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

看起来 RDFOutput 符合您的预期:将 SPARQL 查询 ResultSet 转换为 RDF Model

【讨论】:

  • RDFOutput 在这里无济于事,它只是将ResultSet 转换为上述ResultSet 的RDF 编码,因此getPropertyResourceValue() 仍然可能不会返回任何内容
  • 我没用过,但是RDFOutput.toModel()不会把属性连接到Resources吗?无论如何,我刚刚意识到birthDate 值可能是一个字面量,但getPropertyResourceValue 返回(如果我正确理解文档)一个由给定属性连接的资源 - 并且只有当有一个时。 listProperties(Property)getProperty(Property) 在这里更有意义,不是吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 2018-11-17
  • 2020-03-23
  • 2019-04-30
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多