从文件名生成唯一的 IRI

Generating unique IRI from a filename

我有一个 ontology,使用 Protegé 4.3.0 创建,我会使用 OWL-API 来将一些 OWLNamedIndividual 对象添加到文件 OWL。我使用以下指令创建一个新的 OWLNamedIndividual:

OWLNamedIndividual objSample = df.getOWLNamedIndividual(IRI.create(iri + "#" + id));

所以新的 OWLNamedIndividual 添加到加载的 ontology 然后 ontology 使用以下指令保存到 OWL 文件。

XMLWriterPreferences.getInstance().setUseNamespaceEntities(true);
OWLOntologyFormat format = manager.getOntologyFormat(ontology);
manager.saveOntology(ontology, format, IRI.create(file.toURI()));

变量 id 是一个 String 从文件的基本名称(即不带扩展名的文件名)生成的变量。如果文件的base name中有一个或多个空格,ontology保存没有任何错误,但是当我打开新保存的OWL文件时,Protegé首先报解析错误出现包含空格的 IRI。

如何使用加载的 ontology 的基本 IRI 和文件的基本名称为 OWLNamedIndividual 对象创建有效的 IRI?

IRI 应该是代表您的资源的块。如果我理解正确的话,你有一个像 big boat 这样的 id,并且你正在创建看起来像 <http://example.com#big boat> 的 IRI。这不是有效的 IRI,您需要将 space 替换为 _-,这样您就有了 <http://example.com#big_boat>。即使您在 Protégé 中输入带有 space 的建模元素名称,它也会自动在中间放置一个 _

查看 this article IRI 中的无效字符。

Systems accepting IRIs MAY also deal with the printable characters in US-ASCII that are not allowed in URIs, namely "<", ">", '"', space, "{", "}", "|", "\", "^", and "`", in step 2 above. If these characters are found but are not converted, then the conversion SHOULD fail.