当我尝试使用下面的代码获取 Dbpedia 本体类时
public void classofontology(){
Set<OWLClass> classes = ontology.getClassesInSignature();
System.out.println("le nombre des classes total de l'ontologie est : "+classes.size());
for(OWLClass clss: classes)
System.out.println(clss.getIRI().getFragment());
}
我得到了类的总数,所以它们都被浏览了,但我无法获得类的名称:我得到输出“null”,但是当我尝试直接使用clss
我得到的是 IRI ,而不是 clss.getIRI().getFragment() 。我只需要类(class)名称,但我不明白为什么我无法获得它,我将不胜感激
如果你能帮我得到它。谢谢您
Ps:我注意到类的 IRI 与您在 Building 和 Book 类中看到的不同,这可能是问题的根源吗?
通过代码获取构建IRI http://dbpedia.org/ontology/Building
通过代码获取的书籍IRI http://schema.org/Book
最佳答案
简而言之,IRI 没有名称。
IRI
的最后一部分(来自最后一个斜杠或散列字符或数字)由 getFragment()
方法返回;但是,不能保证有效的 IRI
具有这样的片段(IRI
可能以散列或破折号结尾,或者它可能仅包含最后一个之后的数字)值(value))。这背后的原因是片段必须是 XML QName - 它在 RDF/XML 中用于命名标签。
例如,IRI.create("http://www.example.com/test/1234").getFragment()
将返回一个空字符串。
根据AKSW的建议,使用 SimpleIRIShortFormProvider
,或者,如果您的实体有标签,则使用 AnnotationValueShortFormProvider
。
关于java - 无法获取 Dbpedia 类的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46773442/