2

クラスのすべてのサブクラスをリストすることはできません。クラスをリストします。私のアルゴリズムは、各クラスにサブクラスがあるかどうかをチェックします。true の場合、すべてのサブクラスを一覧表示します。しかし、これは起こりません。「if (essaClasse.hasSubClass)」という条件を無視しているようです。誰か助けてくれませんか?コード部分を怒鳴りつけてください。

ありがとう!

デボラ(リオデジャネイロ - ブラジル)

完全なコード:

package testejena;

import com.hp.hpl.jena.ontology.OntClass;
import com.hp.hpl.jena.ontology.OntModel;
import com.hp.hpl.jena.rdf.model.ModelFactory;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;
import java.io.InputStream;
import java.util.Iterator;


public class testeProp {

    static final String inputFileName = "OBRecortada3.owl";

    public static void main(String args[]) {

        try {

            //create the reasoning model using the base
            OntModel inf = ModelFactory.createOntologyModel();

            // use the FileManager to find the input file
            InputStream in = FileManager.get().open(inputFileName);
            if (in == null) {
                throw new IllegalArgumentException("File: " + inputFileName + " not found");
            }

            inf.read(in, "");

            String URI = "http://www.owl-ontologies.com/OntologyBase.owl#";

            ExtendedIterator classes = inf.listClasses();
            while (classes.hasNext()) {
                OntClass essaClasse = (OntClass) classes.next();

                String vClasse = essaClasse.getLocalName().toString();

                if (essaClasse.hasSubClass()) {
                    System.out.println("Classe: " + vClasse);
                    OntClass cla = inf.getOntClass(URI + vClasse);
                    for (Iterator i = cla.listSubClasses(); i.hasNext();) {
                        OntClass c = (OntClass) i.next();
                        System.out.print("   " + c.getLocalName() + " " + "\n");
                    }
                }
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}}
4

2 に答える 2

1

で を指定しなかったため、アルゴリズムが機能していませんでしOntModelSpecOntModel。this コードを指定すると、OntModelSpec完全に機能します。

OntModel inf = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
于 2015-11-24T14:50:15.830 に答える
0

データや完全なコード (OntModel オブジェクトをセットアップした部分を含む) を示していないため、決定的なアドバイスを提供することは困難です。このhasSubClassメソッドは Jena 単体テストでテストされるため、バグが含まれている可能性はほとんどありません (不可能ではありません)。次のことを確認することをお勧めします。

  • Model上記のコードを実行する前に、デバッガーまたはログ ステートメントを使用して、ロードされたトリプルの数などを表示する前に、データを に正しくロードしています。

  • rdfsロードしているオントロジーには、実際には、トリプルで定義するために使用されるプレフィックス宣言のチェックを含む、サブクラス ステートメントが含まれています(正確rdfs:subClassOfに である必要があります) 。 http://www.w3.org/2000/01/rdf-schema#

于 2011-04-10T19:29:01.680 に答える