我有一个本体,它由两个独立的文件组成:
(后者只包含实例)
我的想法是使用曼彻斯特OWL 5读取Abox并获取签名中的所有对象属性(例如)。
Abox使用owl:imports来包含Tbox。但是-from我的理解-首先,我必须将Tbox的远程IRI (例如,http://mywebsite.com/ontology/artists.owl)映射到我系统中的本地文件。
这就是我试过的:
// Create an ontology manager
OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
// Manually map imports
IRI remoteIRI = IRI.create("http://mywebsite.com/ontology/tbox.owl");
IRI localIRI = IRI.create(new File("tbox.owl"));
SimpleIRIMapper mapper = new SimpleIRIMapper(remoteIRI, localIRI);
manager.getIRIMappers().add(mapper);
// Read individuals (i.e. ABox)
File file = new File("abox.owl");
OWLOntology ABox = manager.loadOntologyFromOntologyDocument(file);这是它提出的例外:
Exception in thread "main" org.semanticweb.owlapi.model.OWLOntologyAlreadyExistsException: Ontology already exists. OntologyID(OntologyIRI(<http://mywebsite.com/ontology/tbox.owl>) VersionIRI(<null>))
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.load(OWLOntologyManagerImpl.java:1122)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:1057)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntologyFromOntologyDocument(OWLOntologyManagerImpl.java:1007)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntologyFromOntologyDocument(OWLOntologyManagerImpl.java:1020)
at examples.PopulateDatabaseWithPropIndividuals.main(PopulateDatabaseWithPropIndividuals.java:71)
Caused by: org.semanticweb.owlapi.model.OWLOntologyRenameException: Could not rename ontology. An ontology with this ID already exists: OntologyID(OntologyIRI(<http://mywebsite.com/ontology/tbox.owl>) VersionIRI(<null>))有什么想法吗?
发布于 2019-10-12 22:27:23
这两种本体不可能有相同的IRI,因为这会在持有它们的管理器中造成歧义,而且从重用的角度来看,更一般的情况是。如果您的本体论是公开的,或者即使它们是保密的,但是您希望在其他项目中使用它们,那么另一个本体不可能统一地识别它导入的本体。
我建议的解决方法是修改上面的本体IRI并向其添加一个owl:imports语句,导入tbox本体。这可以在另一个方向上完成( tbox可以导入abox),尽管这不是最常见的模式;您还可以添加第三个本体,它的目的仅仅是聚合两个本体,并且只包含两个导入语句,指向您的abox和tbox。
https://stackoverflow.com/questions/58306153
复制相似问题