我有一个包含没有本体id的本体的文件(本体标记<Ontology/>
为空)。使用的序列化格式是RDF / XML。我的目标是序列化文件,设置本体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 rdf:about="http://www.mydesiredIri.com/abc"/>
,而不是public static async void CopyTheFile(StorageFolder Subfdl, string strfilenm)
{
string strPath = "C:\\Users\\XYZUser\\Documents\\MyStuffBU";
StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(strPath);
var targetFile = await Subfdl.GetFileAsync(strfilenm);
await targetFile.CopyAndReplaceAsync(targetFile);
await targetFile.DeleteAsync();
}
。我做错了什么?
谢谢!
亲切的问候
答案 0 :(得分:0)
OWLOntologyManager.setOntologyDocumentIRI()
用于设置本体的文档IRI,而不是本体IRI本身。两者之间的区别在于文档IRI是可解析的URL或文件路径(即,int可用于解析本体),而本体IRI是本体的符号名称(它不需要是可解析的)它甚至可能会丢失 - 这就是匿名本体的情况。)
要设置本体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);
在此之后,像往常一样保存本体。