2017-03-22 2 views
0

私は自分のオントロジにMultiPetsOwnerクラスを持っています。現在の設定では、2つのインスタンスが検出されます(HarryとAlex)。クラスクエリがProtégéOWLの対応するインスタンスを検出していない

しかし、DLクエリ「hasPet min 2 Animal」を実行すると、対応するインスタンスはありません。

同時に、DLクエリ「hasPet some Animal」が動作しているように見えます。これは私が期待したPetOwnerクラスのインスタンスを提供します。

私は間違っていますか? 「hasPet min 2 Animal」クエリが正しくない場合、代わりにすべてのMultiPetsOwnerを取得するために使用する必要があります?私.owlファイルの

内容はここで見つけることができます:http://pastebin.com/5xcriLRE

+0

あなたのデータを共有したことはありがたいですが、クエリを共有することもできますか?それとも、あなたが推理家を動かすのですか? –

+0

@IvoVelitchkov私のクエリは "hasPet min 2 Animal"です - MultiPetsOwnerのインスタンスを取得しようとしています – 0lesya

+0

これは有効なSPARQLクエリではありません。 –

答えて

2

OWLは、オープン・ワールド仮定に取り組んでいます。あなたの場合、それは個人が異なるとはみなされないことを意味します。明示的にそれを主張する必要があります。プロテジェでは、これはすべての個体が選択されたとき、すべての動物で、そして編集 - >「すべての個体を異なるものにする」のときに実行されます。

hasPet min 2 Animalを実行すると、予期した結果が得られますが、推論されたクラスMultiPetsOwnerのインスタンスで推論を実行した後に、それらの結果が表示されます。

2

OWLには、異なるURIを持つ2人の個人が必ずしも異なるわけではないというユニークな名前推定(UNA)はありません。これは、DLクエリに使用されている標準のOWLリスナは、オントロジに情報を持たずにクエリに答えることができないことを意味します。 2匹の動物abは同じ個人ではありません(フクロウ経由:differentFrom):クエリーとして使用SPARQL:

あなたのオントロジー:追加OWL公理

hasPet(x, a), Animal(a) 
hasPet(x, b), Animal(b) 
a ≠ b 

-> Q: hasPet min 2 Animal? 
-> A: x 

別の方法で

hasPet(x, a), Animal(a) 
hasPet(x, b), Animal(b) 

-> Q: hasPet min 2 Animal? 
-> A: NO RESULT 

言語

SELECT ?x WHERE { 
    ?x :hasPet ?pet . 
    ?pet a :Animal 
} GROUP BY ?x 
    HAVING(COUNT(?pet) >= 2) 

注:このquerおそらく必要な推論を考慮に入れないかもしれない。

関連する問題