我正試圖發現模型中是否有特定的資源。對於我使用: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