2

私は通常、オントロジーを 2 つの異なるファイルに保存します。

  1. 最初のオントロジー ファイルには、クラス、サブクラス、データ プロパティ、およびオブジェクト プロパティが含まれます。

  2. すべての個人と個人間の関係を含む 2 番目のファイル。

したがって、完全なモデルを作成するには、これら 2 つのファイルをマージする必要があります。owlapiを使用してこれをどのように達成できるのだろうか?

Jena では、次のようにします。

OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM,
                null);
try {
        model.read(new FileInputStream(MyOntologyFile), "...");
        model.read(new FileInputStream(MyOntologyWithIndividualsFile), "...");
} catch (Exception e) { 
        log.error("Loading Model failed:" + e);
}

同様に、owlapi を使用してオントロジー ファイルをロードしようとすると、次のエラーが発生します。

OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
OWLObjectRenderer renderer = new DLSyntaxObjectRenderer();

File file = new File(MyOntologyFile);
File fileIndividuals = new File(MyOntologyWithIndividualsFile);

OWLOntology localOntology = null;
// Now load the local copy
try {
    localOntology = manager.loadOntologyFromOntologyDocument(file);
    localOntology = manager
            .loadOntologyFromOntologyDocument(fileIndividuals);
} catch (OWLOntologyCreationException ex) {
    ex.printStackTrace();
}

エラー:

org.semanticweb.owlapi.model.OWLOntologyAlreadyExistsException: Ontology already exists. OntologyID(OntologyIRI(<http://www.semanticweb.org/lp4220/ontologies/2014/4/untitled-ontology-35>))
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:880)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntologyFromOntologyDocument(OWLOntologyManagerImpl.java:806)
    at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntologyFromOntologyDocument(OWLOntologyManagerImpl.java:821)

アップデート:

結局のところ、オントロジーのマージは異なる IRI を持つものでのみ可能であり、したがって、オントロジーを同じ IRI を持つ 2 つに分割することは受け入れられないと思います。これに対する解決策 (Joshua のコメントによる) は、1 つのオントロジーからすべての個体と公理を読み取り、それらを既に読み込まれているオントロジーに追加することです。

個別の IRI のマージを伴うオントロジーの場合、次のように実行できます (例は Ignazio のOWLED 2011 スライド - スライド番号 27 を参照):

OWLOntologyManager m = create();
OWLOntology o1 = m.loadOntology(pizza_iri);
OWLOntology o2 = m.loadOntology(example_iri);
// Create our ontology merger
OWLOntologyMerger merger = new OWLOntologyMerger(m);
// Merge all of the loaded ontologies, specifying an IRI for the
new ontology
IRI mergedOntologyIRI =
IRI.create(
"http://www.semanticweb.com/mymergedont"
);
OWLOntology merged = merger.createMergedOntology(m,
mergedOntologyIRI);
assertTrue(merged.getAxiomCount() > o1.getAxiomCount());
assertTrue(merged.getAxiomCount() > o2.getAxiomCount());
4

2 に答える 2

2

問題は、データに同じ iri が含まれていないことですが、同じ iris が同じマネージャーにロードされたオントロジーです。オントロジーを別々のマネージャーにロードし、すべての公理を一方から他方に追加すると、マージされたオントロジーが得られます。

于 2014-07-18T14:20:49.813 に答える
0

一般に、分類が必要でない限り、「個人と関係」をオントロジーにしないでください。たとえば、クラス「アメリカの会社」を定義するには、個人の「米国」が必要です。それ以外の場合、その他の部分は、オントロジーを参照する RDF トリプルにする必要があります。

于 2014-07-18T23:12:22.413 に答える