我通常将我的本体保存在两个不同的文件中。
第一个本体文件包含类,子类,数据属性和对象属性。
第二个文件包含个人之间的所有个人和关系。
因此,我需要合并这两个文件才能拥有完整的模型。我想知道如何使用owlapi实现这一目标?
在耶拿,我这样做:
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的两个是不可接受的。对此的解决方案(由Joshua评论)可能是从一个本体中读取所有个体和公理,然后将它们添加到已经加载的本体中。
对于具有不同IRI的本体,可以按如下方式进行合并(示例由Ignazio提供OWLED 2011 slides - slide no. 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());
答案 0 :(得分:1)
您的问题在数据中没有相同的iri,但在同一个管理器中加载了相同的光圈。将本体加载到单独的管理器中,并将所有公理从一个加到另一个,这将为您提供合并的本体。
答案 1 :(得分:0)
一般情况下,您不会制作个人和关系&#34;本体论,除非他们需要分类 - 比如定义Class&#34; American Company&#34;你需要一个个人&#34;美国&#34;。否则,那个其他部分应该是你的RDF三元组,它引用了本体论。