我正试图发现模型中是否有特定的资源。对于我使用:Jena - 如何知道某个特定资源是否在模型中?
model.getResource("example")
检查文档,这种方法准确地表现为createResource。然后,即使它不在模型中,我也会得到一个新的资源。
如何检查我是否有资源避免其创建?
在此先感谢!
我正试图发现模型中是否有特定的资源。对于我使用:Jena - 如何知道某个特定资源是否在模型中?
model.getResource("example")
检查文档,这种方法准确地表现为createResource。然后,即使它不在模型中,我也会得到一个新的资源。
如何检查我是否有资源避免其创建?
在此先感谢!
在耶拿,Resource
对象本身并不在模型。该模型仅包含三元组 - Statement
包含主题,谓词和对象(通常缩写为SPO)的对象。 S,P或O中的任何一个都可以是资源(注意Property
是Jena和RDF标准中的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")
这将返回对应于给定的URI Resource
对象,但不侧 - 影响模型中的三元组。这就是Model
同时具有getResource
和createResource
的原因 - get可能会稍微更有效,因为它重用资源对象,但语义本质上是相同的。但是,您传递给getResource
或createResource
的论据应该是URI。如果你开始使用像"example"
这样的令牌来代替完整的URI,那么你就会从未来借鉴麻烦,所以我建议在你习惯之前停止这种坏习惯!
非常感谢。这绝对是解决方案。关于坏习惯,别担心,在我的开发中,我使用真正的URI。我只是用“例子”,因为这次没关系。 – jevora 2013-03-14 11:47:14
检查解决方案:有几个包含哪些符合r,null,null的包含。我宁愿建议: model.contains(resource,null,(RDFNode)null) – jevora 2013-03-14 11:54:40
好的。是的,'contains()'的方法签名非常自由,需要对'object'进行强制转换,这是一个很痛苦的过程,但这是一个很早以前在Jena早期的历史中做出的设计决策,并且会过分破坏现在改变。 – 2013-03-14 20:39:21
经过一番研究,我找到了下一条路。我不知道这是不是真的达到它的最佳方式,但工程:
Resource toSearch = ResourceFactory.createResource("example");
if(!model.containsResource(toSearch))...;
这是一个正确的答案,但我必须等待2天才能标记为正确 – jevora 2013-03-13 22:56:28
也许这个链接[Interface Model](http://jena.apache.org/documentation/javadoc/jena/com/hp/hpl/jena/rdf/model/Model.html)很有用。 – 2013-03-13 13:43:47
经过一番研究,我找到了下一个方法。我不知道这是否是实现它的最好方法,但是可以工作: Resource toSearch = ResourceFactory.createResource(“example”);如果(!model.containsResource(toSearch))...; – jevora 2013-03-13 13:53:58
如果它解决了,然后发布答案并接受它,所以具有相同问题的下一个人将找到答案,你也会得到一个徽章! :) – Boaz 2013-03-13 13:57:17