在使用OWLAPI 4.0 API的上下文中,以下代码行:ontologyIRI = IRI.create(o.getOntologyID().getOntologyIRI().toString());
返回以下字符串:"Optional.of(http://www.indytion.com/music/composition)".
我需要的是唯一的绳子";http://www.indytion.com/music/composition"。
我试图将ontologyIRI声明为Optional,并使用.get((方法、.orElse((等,但都无济于事。我仍然有返回的字符串,其中包括"optional.of(("部分。
我的问题是:如何获取内部字符串?
非常感谢你的帮助。
编辑:完整的代码方法
private void LoadOntology(String ontologyPath)
{
OWLOntologyManager man = OWLManager.createOWLOntologyManager();
OWLOntology o;
File ontologyFile = new File(ontologyPath);
Optional<IRI> ontologyIRI;
try {
o = man.loadOntologyFromOntologyDocument(ontologyFile);
ontologyIRI = Optional.of(IRI.create(String.valueOf(o.getOntologyID().getOntologyIRI()).toString()));
System.out.println("Ontology IRI is: " + ontologyIRI.get());
} catch (OWLOntologyCreationException e) {
e.printStackTrace();
}
}
The System.out.println() returns exactly this string:
"Ontology IRI = Optional.of(http://www.indytion.com/music/composition)"
使用.get((而不是toString((
//Returns 'Optional[example]'
Optional.of("example").toString();
//Returns 'example'
Optional.of("example").get();
简短回答:替换
Optional.of(IRI.create(String.valueOf(o.getOntologyID().getOntologyIRI()).toString()));
带有
o.getOntologyID().getOntologyIRI().get();
更长的答案:你做了很多来回的事情,这充其量是毫无意义的,在某些情况下是有害的:
无特殊顺序:
- 其他人已经评论说
IRI
实例是不可变的,所以从现有实例创建新实例是没有意义的(如果无害的话( - 如果您不打算实际返回
Optional
,那么调用Optional.of()
几乎总是一个坏主意 String.valueOf()
用于获得某个值的字符串表示,通常对调试最有用,但不应依赖于它来完全往返于对象的所有内容(toString()
也是如此
所以基本上你剩下的是:
o.getOntologyID().getOntologyIRI()
给你一个Optional<IRI>
- 你想要
IRI
Optional::get
返回可选中包含的值(如果存在(,因此只需调用get()
然而,如果Optional
为空(即没有基础值(,则get()
将抛出NoSuchElementException
。这可能是你想要的,也可能不是你想要的。为了解决这个问题,要么在调用get()
之前调用isPresent()
以检查值是否存在,要么使用多种其他访问器方法中的任何一种;内置检查";在某种程度上
最后,问题似乎不在于代码本身。问题就是这样解决的。但我不明白为什么它被解决了:
- I复制/粘贴(在同一文件中(";shouldAddObjectPropertyAssertions(("来自OWLAPI4实例的实例->此示例代码运行OK(但不像我那样使用getOntologyID((方法(
- 将SDK更改为另一个次要版本"1.8.0_61">
- 使用初始和所需的SDK"1.8.0_131"再次更改
- 使缓存无效并重新启动IDE
问题已解决。完全相同的代码:
ontologyIRI = o.getOntologyID().getOntologyIRI().get();
System.out.println("Ontology IRI is: " + ontologyIRI);
现在返回期望的字符串值:";http://www.indytion.com/music/composition"而不是";可选.of(http://www.indytion.com/music/composition)"不再
如果有人能解释为什么它被修复了,我会非常高兴。
再次感谢您的帮助。