在耶拿,有没有办法通过对象查询主题?

In Jena, is there a way query subject via object?

我有一个这样的海龟文件:

<http://rdf.freebase.com/ns/m.05h40wd>  <http://rdf.freebase.com/key/wikipedia.en_id>   "21537998"  .
<http://rdf.freebase.com/ns/m.05h40xf>  <http://rdf.freebase.com/key/wikipedia.en_id>   "21557390"  .
<http://rdf.freebase.com/ns/m.05h4251>  <http://rdf.freebase.com/key/wikipedia.en_id>   "21550418"  .
<http://rdf.freebase.com/ns/m.05h4__1>  <http://rdf.freebase.com/key/wikipedia.en_id>   "21495513"  .

我现在只有对象(id),但我想得到主题。有办法吗?这是我的代码。

  public static void main(String[] args) throws FileNotFoundException {
      Model model=ModelFactory.createDefaultModel();
        model.read(new FileInputStream("RDFTest.ttl"),null,"TTL");
        Resource topic = model.getResource("http://rdf.freebase.com/ns/" + "m.05h4251");
          Property labelProperty = model.getProperty("http://rdf.freebase.com/key/wikipedia.en_id");
          System.out.println(topic.getProperty(labelProperty));
  }

结果是:

[http://rdf.freebase.com/ns/m.05h4251, http://rdf.freebase.com/key/wikipedia.en_id, "21550418"]

如果我反其道而行之,我将得到 null。

您可以使用 Model#listResourcesWithProperty(Property p, RDFNode o)。如果您不关心 属性 是什么,只需传递 null 作为 属性 作为通配符。这为您提供了一个关于主题的 ResIterator,因为可能有多个(就像对于给定主题的 属性 可能有多个对象一样;您使用的方法是 getProperty,只是 returns任意一个)。