首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用相同的IRI导入本体

使用相同的IRI导入本体
EN

Stack Overflow用户
提问于 2019-10-09 14:13:36
回答 1查看 441关注 0票数 0

我有一个本体,它由两个独立的文件组成:

  • tbox.owl
  • abox.owl

(后者只包含实例)

我的想法是使用曼彻斯特OWL 5读取Abox并获取签名中的所有对象属性(例如)。

Abox使用owl:imports来包含Tbox。但是-from我的理解-首先,我必须将Tbox的远程IRI (例如,http://mywebsite.com/ontology/artists.owl)映射到我系统中的本地文件。

这就是我试过的:

代码语言:javascript
复制
// 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);

这是它提出的例外:

代码语言:javascript
复制
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>))

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-12 22:27:23

这两种本体不可能有相同的IRI,因为这会在持有它们的管理器中造成歧义,而且从重用的角度来看,更一般的情况是。如果您的本体论是公开的,或者即使它们是保密的,但是您希望在其他项目中使用它们,那么另一个本体不可能统一地识别它导入的本体。

我建议的解决方法是修改上面的本体IRI并向其添加一个owl:imports语句,导入tbox本体。这可以在另一个方向上完成( tbox可以导入abox),尽管这不是最常见的模式;您还可以添加第三个本体,它的目的仅仅是聚合两个本体,并且只包含两个导入语句,指向您的abox和tbox。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58306153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档