7

我试图发现模型中是否有特定资源。为此,我正在使用:

model.getResource("example")

检查文档,此方法的行为与 createResource 完全相同。然后,即使它不在模型中,我也会得到一个新的资源。

我如何检查我是否拥有避免创建资源的资源?

提前致谢!

4

2 回答 2

12

在耶拿,Resource对象本身不在模型中该模型只包含三元组——Statement包含主语、谓语和宾语的宾语(通常缩写为 SPO)。S、P 或 O 中的任何一个都可以是资源(注意 a是Jena 和 RDF 标准中Property的子类型)。Resource因此,您需要将您的问题从“此模型是否包含此资源”细化为:

  • 模型 M 是否包含资源 R 作为主题?

  • 模型 M 是否包含资源 R 作为主语、谓语或宾语?

这可以通过以下方式实现:

Resource r = ... ;
Model m = ... ;

// does m contain r as a subject?
if (m.contains( r, null, (RDFNode) null )) {
  ..
}

// does m contain r as s, p or o?
if (m.containsResource( r )) {
  ..
}

顺便说一句,在您的代码示例中,您有

model.getResource("example")

这将返回一个Resource对应于给定 URI 的对象,但不会对模型中的三元组产生副作用。这就是Model同时具有getResourcecreateResource- get 的原因可能稍微更有效,因为它重用资源对象,但语义基本相同。但是,您传递给getResourceor的参数createResource 应该是 URI。如果您开始使用令牌"example"代替完整的 URI,那么您正在从未来借用麻烦,所以我建议您在适应它之前停止这个坏习惯!

于 2013-03-14T10:12:24.163 回答
3

经过一番研究,我找到了下一个方法。我不知道这是否真的是实现它的最佳方法,但有效:

Resource toSearch = ResourceFactory.createResource("example");
if(!model.containsResource(toSearch))...;
于 2013-03-13T22:55:10.483 回答