1

少し奇妙なクエリがあり、私を悩ませています。サブコンセプト (owl:subClassOf) をオンザフライで生成し、それらをデータセットに格納して、個人を動的にインスタンス化できるようにする必要があるアプリケーションがあります。次のスニペットは、別のオントロジー概念の subClassOf である「Arduino」と呼ばれる新しい概念を生成します。

datafeed:Arduino rdfs:subClassOf ssn:System.

JENA を使用して、これを TDB データストアに挿入しようとしました。エラーは発生しませんが、これが正しいかどうかはわかりません。サブクラスをデータストアに挿入できますか、それともデータストアは個体 (クラスのインスタンス) のみを含むことができますか? この問題について頭の中をぐるぐる回っているようです。さまざまな SPARQL クエリを試しましたが、上記のトリプルがデータセットに格納されているかどうかはわかりません。次のクエリを実行して、コンセプトがデータセットに保存されているかどうかを確認しましたが、結果が返されませんでした。

SELECT ?concept
WHERE {
    ?concept a owl:Class.
}

結果は個人に対してのみ返され、クラス定義では返されないと信じるようになったのはどれですか...?

それは私の頭の中で少しごちゃ混ぜです。誰かが私の理解を正すことができれば、それは素晴らしいことです.

よろしくお願いします

4

1 に答える 1

3

Jena (または実際に私が知っているトリプルストア) は、追加したすべてのトリプルを保存します。トリプルにrdfs:subClassOfリレーションが含まれているかどうかは関係ありません。

保存するデータに対して何らかの推論を実行するかどうかは別の問題です。これは、使用するツールと選択した構成によって異なります。あなたが行うクエリは、何らかの形式の推論が行われたことを前提としています:推論が有効になっている場合、トリプルの挿入の結果としてdatafeed:Arduinoのみ になります (そして、デフォルトでは、それが のインスタンスであると推論するだけであり、 ではありません)必然的にの)。owl:Classrdfs:subClassOfrdfs:Classowl:Class

トリプルが挿入されたことを推論に依存せずにテストする確実な方法は、次のように、暗黙の結果ではなく、特定のトリプルを実際にクエリすることです。

SELECT ?concept
WHERE { ?concept rdfs:subClassOf ssn:System . }

これは、のサブクラスであるすべての概念を返しssn:Systemます。トリプルが適切に挿入されていればdatafeed:Arduino、結果に含まれます。

または、おそらくさらに単純です:

ASK WHERE { datafeed:Arduino rdfs:subClassOf ssn:System . } 

これはtrue、トリプルがストアに存在する場合に返され、falseそうでない場合に返されます。

于 2013-10-22T12:10:20.367 に答える