如何使用 OWL API 设置匿名 Ontology 的 Ontology ID

How to set the Ontology ID of an anonymous Ontology using the OWL API

我有一个文件包含 ontology 而没有 ontology id(ontology 标签 <Ontology/> 是空的)。使用的序列化格式是RDF/XML。我的目标是序列化文件,设置 ontology id 并使用 OWLAPI 写回文件。不幸的是,我不知道该怎么做。我尝试了以下方法:

ontology = ontologyManager.loadOntologyFromOntologyDocument(new File("filename"));
ontologyManager.setOntologyDocumentIRI(ontology, IRI.create("http://www.mydesiredIri.com/abc"));
ontologyManager.saveOntology(ontology,new FileOutputStream(new File("outputfile")));

通过 运行 代码,Ontology-ID 不会添加到 ontology。而不是 <Ontology rdf:about="http://www.mydesiredIri.com/abc"/> 标签仍​​然是空的。我做错了什么?

谢谢!

亲切的问候

OWLOntologyManager.setOntologyDocumentIRI() 用于设置 ontology 的文档 IRI,而不是 ontology IRI 本身。两者的区别是文档IRI是可解析的URL或者文件路径(即int可以用来解析ontology),而ontologyIRI是符号化的ontology 的名称(它不需要可解析,甚至可以丢失 - 匿名本体就是这种情况)。

要设置 ontology IRI,请使用:

//versionIRI can be null
OWLOntologyID newOntologyID = new OWLOntologyID(ontologyIRI, versionIRI);
// Create the change that will set our version IRI
SetOntologyID setOntologyID = new SetOntologyID(ontology, newOntologyID);
// Apply the change
manager.applyChange(setOntologyID);

在此之后,照常保存 ontology。