2017-10-07 5 views
2

を得る推論for (OWLClass child : reasoner.getSubClasses(clazz, true).getFlattened())を使用しなくてもと公理を使用することにより、単に推論を行うことなく、クラスのすべての名前のサブクラスを見つける方法はありますか?すべてのサブクラス公理を取得するクエリをすることができOWL-APIオントロジーを使用して、あなたクラスのサブクラスOwlApi

答えて

2

をありがとうございます。 次に、名前付きクラスのみを保持するために結果をフィルタリングします。イエナを使用して

for (final OWLSubClassOfAxiom subClasse : ontology.getAxioms(AxiomType.SUBCLASS_OF)) 
{ 
    if (subClasse.getSuperClass() instanceof OWLClass && subClasse.getSubClass() instanceof OWLClass) 
    { 
     System.out.println(subClasse.getSubClass() + " extends " + subClasse.getSuperClass()); 
    } 
} 

は、あなたは、あなたが唯一の非annoymousオブジェクトを取得するためにフィルタOWL-APIのように、「subClassOfの」述語のために外観を追加し、ステートメントを一覧表示することができます。

final StmtIterator it = model.listStatements(); 
while (it.hasNext()) 
{ 
    final Statement s = it.next(); 
    if (s.getPredicate().equals(RDFS.subClassOf) && !s.getObject().isAnon()) 
      System.out.println(s.getSubject() + " extends " + s.getObject()); 
} 
+0

は、ソリューションをありがとうございました。しかし、それはクラスと第一レベルのクラスの関係を考慮に入れていません。 owl.fileには、これらのクラスがreasonのサブクラスであることを示すための参照がないため、reasonerによって行われています。推理家を使わずにそれらを考慮する方法はありませんか?私はそのことを願っています... – Nina

+0

Thingのサブクラスではないすべてのサブクラスのセット(A)を作成します。 署名のすべてのクラスの集合(B)を取り、(A)からクラスを削除します。 Bの残りは直接使う事のサブクラスであるクラスのadditionnal設定されるべきです。 – Galigator

関連する問題