2017-03-05 16 views
0

推論を使用して特定のデータ/オブジェクトプロパティのOWLドメイン/範囲を推論するにはどうすればよいですか?OWL推論を使用してドメイン/範囲を推測する

たとえば、私は2つのクラスRat,BirdおよびデータプロパティhasNameを持っています。手動

Set<OWLClass> inferedDomains = hermitReasoner 
          .getDataPropertyDomains(hasNameProperty, false) 
          .getFlattened(); 

私がすることができます:私は、ドメインを推測する隠者の推論を使用する場合、私はRatBirdowl:Thingクラスを持って、そしてない

<Declaration><Class IRI="#Rat"/></Declaration> 
<Declaration><Class IRI="#Bird"/></Declaration> 
<Declaration><DataProperty IRI="#hasName"/></Declaration> 
<DataPropertyDomain> 
    <DataProperty IRI="#hasName"/> 
    <ObjectUnionOf> 
     <Class IRI="#Rat"/> 
     <Class IRI="#Bird"/> 
    </ObjectUnionOf> 
</DataPropertyDomain> 

:私は、これらのクラスはhasNameのもっぱらのドメインになりたいですowl-apiを使用してドメインを抽出し、DataPropertyDomainAxiomshasNameとし、Rat,Birdのクラスを取得します。しかし、私は他の推測可能なクラスを得ることができません(例えば、Ratには等価クラスMouseがあります)。

だから私のような、結果を推論する推論エンジンを使用したい:

  • 推論:隠者、実際++、...
  • SQWRLルールエンジン:Droolsの、...

このような結果を得るためのアプローチはありますか?

答えて

2

ドメインとして定義したクラスは匿名のクラス(2つの名前付きクラスの和集合)であるため、OWLReasonerの実装では返すことはできません。

この制限を回避するには、プロパティのアサートされたドメインのサブクラスを検索できます。OWLOntology::getDataPropertyDomainAxioms(OWLDataProperty)を使用すると、ルートオントロジからユニオンを取得します。 OWLReasoner::getSubClasses(OWLClassExpression, false)を使用すると、論理和のサブクラスを含むすべてのノードを取得できます。各ノードには同等のクラスのセットが含まれます。あなたのケースでは、私は{Rat, Mouse}を含むノードと{Bird}を含むノードを見たいと思うでしょう。

編集:コメントに回答する例を追加しました。

OWLOntology o = ... //root ontology for the reasoner 
OWLReasoner r = ... 
OWLDataProperty p = ... 
for (OWLDataPropertyDomainAxiom ax: o.getDataPropertyDomainAxioms(p)) { 
    OWLClassExpression c = ax.getDomain(); 
    NodeSet<OWLClass> allSubClasses = r.getSubClasses(c, false); 
    // allSubClasses contains all named subclasses of the domain 
} 

コメントで@AKSWによって示唆されるように、OWLReasonerは、そのメソッドのいずれかで匿名の式を返さない理由は、これらの方法では、匿名式が無限にあるという事実によるものである:例えば、任意のクラス与えられましたこのクラスの無限の匿名サブクラスが存在します。証明は長すぎてここに複製することはできませんが、説明ロジックの記事や書籍で簡単に見つけることができます。

だから、OWLReasonerが設計されたとき、推論を不完全にすること(無限の式の多かれ少なかれを返すことのみ)、決めることができない(無限のセットを返すことによって)、または名前付きクラスのみに制限することができます。後者は最良の解決策と判断された。

+0

まず、オントロジでプロパティのプロパティの公理をすべて取得しました: 'OWLOntology :: getDataPropertyDomainAxioms'その後、公理ごとに公理のすべてのクラスを取得します:' OWLDataPropertyDomainAxiom :: getClassesInSignature'各クラスはクラスのすべてのサブクラスを取得します: 'OWLReasoner :: getSubClasses'? – MiP

+0

いいえ、ドメインクラスのみ - これは匿名クラスであり、署名には表示されません。 OWLDataPropertyDomainAxiomには専用のメソッドがあります。 – Ignazio

+0

なぜか分かりませんが、 'getClassesInSignature'を使用したときに、その匿名クラスのすべてのサブクラスがリストされました。どの方法で話しているのですか? – MiP

関連する問題