0

2 つのタイプのクラス、1 つ (A) が「isManagedBy」、もう 1 つ (B) であると仮定します。次のフクロウの抜粋は、このシナリオを示しています。タイプ A の複数のクラス (他のクラスによって「管理される」) と B の複数のクラスがあります。実際、タイプ A と B のクラス bot の間にも階層があります。

<owl:ObjectProperty rdf:about="#isManagedBy"/>


<owl:Class rdf:about="#FunctionManagement">
 <rdfs:subClassOf rdf:resource="..."/>
 <rdfs:subClassOf>
   <owl:Restriction>
    <owl:onProperty rdf:resource="#isManagedBy"/>
    <owl:someValuesFrom rdf:resource="#SymposiumPlanner2013"/>
   </owl:Restriction>
  </rdfs:subClassOf>
</owl:Class>


<owl:Class rdf:about="#SymposiumPlanner2013"/>
...

問題: 任意のクラス A を指定して、タイプ B のすべてのクラスを取得します。

アイデア: タイプ B のすべてのクラスを反復処理します。クラス B ごとに、Reasoner の isSatisfiable() メソッドを使用して、指定された A にクラス B への ObjectProperty "isManagedBy" (直接または継承) があるかどうかを確認します。

OWLObjectProperty objProp = df.getOWLObjectProperty(IRI.create("#isManagedBy"));
OWLClassExpression expression;
for (OWLClass B : SetOfAllBs) {
 expression = df.getOWLObjectIntersectionOf(A, df.getOWLObjectSomeValuesFrom(objProp, B));
 if (reasoner.isSatisfiable(expression)) {
   // do something
 }
}

残念ながら、推論はタイプ B のすべてのクラスに対して満足できるものを返します。

質問: この問題を解決するにはどうすればよいですか?

4

2 に答える 2

1

あなたの問題に対する 2 つの解決策を提案できます。

  1. すべての B を調べますが、代わりに の充足可能性をチェックし A and (isManagedBy only (not B))ます。この式が一部の B で満たされない場合、そのような B は を介し​​て特定の A に接続する必要がありますisManagedBy

  2. 推論に FaCT++ を使用している場合、OWLKnowledgeExplorerReasonerインターフェイスを使用して、クラス A の充足可能性チェック中に生成されたモデルを調べることができます。アイデアは、そのような B がモデルに存在する場合、A に接続する必要があるということです。いくつかの制限 (EquivalentClasses(B,...) を介して定義された B では機能しない可能性があります。非決定論的ラベルでは常に真であるとは限りません (getObjectLabel() 呼び出しで true フラグを参照)。ただし、ここにアイデアがあります。コード次のようになります。

    OWLReasoner factplusplus = new FactPlusPluReasonerFactore().createReasoner(o);
    OWLKnowledgeExplorerReasoner ke = (OWLKnowledgeExplorerReasoner) factplusplus;
    RootNode nodeForA = ke.getRoot(A);
    for (RootNode filler: ke.getObjectNeighbours(nodeForA, isManagedBy))
        for (OWLClassExpression cls: ke.getObjectLabel(filler,true)
            if ( SetAllBs.contains(cls) )
                /* cls is what you are looking for */
    
于 2015-02-24T00:07:12.373 に答える