1

オントロジーを検索するためにJenajavaapiを使用しており、コマンドを使用します

Property predicate=model.getProperty("propertyURL"); NodeIterator objects = model.listObjectsOfProperty(predicate);

特定のプロパティのすべてのインスタンスを検索しますmodel。ここで、はオントロジーファイルがロードされるOntModelです。

ここで、これらのインスタンスが属する親ノード/クラスを見つける必要があります。オブジェクトはRDFNodeであるため、メソッドを試しましたRDFNode.getClass()が、返されるだけで class com.hp.hpl.jena.rdf.model.impl.ResourceImpl、必要なものではありません。

と似たようなものが必要ですIndividual.getOntClass()。また、RDFNodeオブジェクトをIndividualsに変換してからこの関数を使用しようとしましたが、この場合、クラスは#Thingクラス(とりわけ1つ)を返すため、この変換中に保存されないようです。

オブジェクトのクラスを取得する方法について何かアイデアはありますか?

前もって感謝します!

4

1 に答える 1

1

これがデータを見ずにあなたの質問に答えるかどうかを知るのは少し難しいですが、簡単な説明があるかもしれません。

OWLおよびRDFでは、クラスは単にリソースのセットであり(たとえば:Cat、すべての猫:Tabbyのセットであり、ぶちの色が付いたすべてのもののセットです)、リソースは多くのセットのメンバーになることができます(ぶち猫はこれらのサンプルセットの両方のメンバー)。これが実際に意味することは、リソースが複数ある可能性があり、実際には通常複数あるということrdf:typeです。このメソッドOntResource.getRDFType()は、クラスを示す単一のリソースのみを返すため、複数のタイプのリソースの場合、getRDFType最初に見つけたものを選択します。プログラマーとして、どちらを選択するかを制御することはできず、毎回同じものを取得する保証はありません(簡単な技術的説明:使用しているトリプルストアのインデックスの動作によって異なります)時間)。ただし、任意のクラスだけでなく、リソースが属するすべてのクラスを知りたい場合は、を使用してください。これにより、すべてのクラスをOntResource.listRDFTypes()反復処理できます。

于 2013-01-11T10:01:46.303 に答える