モデルに特定のリソースがあるかどうかを調べようとしています。そのために私は使用しています:
model.getResource("example")
ドキュメントを確認すると、このメソッドは createResource とまったく同じように動作します。すると、モデルになくても、新しいリソースを取得します。
そうでない場合に、リソースが作成を回避していることを確認するにはどうすればよいですか?
前もって感謝します!
Jena では、Resource
オブジェクト自体はモデルに含まれません。モデルには、主語、述語、および目的語 (通常は SPO と略される) を含むオブジェクトであるトリプルのみが含まれます。Statement
S、P、または O のいずれかをリソースにすることができます ( Jena および RDF 標準では、aProperty
は のサブタイプであることに注意してください)。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
orに渡す引数createResource
は URI である必要があります。完全な URI の代わりにトークンを使用し始めると、将来から問題を借りること"example"
になるため、慣れる前にこの悪い習慣をやめることをお勧めします。
少し調べたところ、次の方法を見つけました。これが本当にそれを達成するための最良の方法であるかどうかはわかりませんが、機能します:
Resource toSearch = ResourceFactory.createResource("example");
if(!model.containsResource(toSearch))...;