【问题标题】:can't get the name of Dbpedia classes无法获取 Dbpedia 类的名称
【发布时间】:2017-10-16 15:07:12
【问题描述】:

当我尝试使用下面的代码获取 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 而不是 clss.getIRI().getFragment()我得到了 IRI 。我只需要课程的名称,我不明白为什么我不能得到它,我将不胜感激 如果你能帮我得到它。谢谢你

Ps:我注意到类的 IRI 与您在 Building 和 Book 类中看到的不同,这可能是问题的根源吗?

通过代码构建IRI http://dbpedia.org/ontology/Building

通过代码获得的图书 IRI http://schema.org/Book

【问题讨论】:

  • 1.像往常一样,阅读 [Java 文档] (owlcs.github.io/owlapi/apidocs_5/org/semanticweb/owlapi/model/…) 以了解该方法返回的内容以及为什么有时会返回 null。 2. 如果您真的想从 IRI 获取名称,请使用 SimpleIRIShortFormProvider。 3. 为什么不用rdfs:label 代替呢?这是最佳实践,因为标签应该提供“真正的”人类可读形式。

标签: java owl dbpedia owl-api


【解决方案1】:

简而言之,IRI 没有名称。

IRI 的最后一部分(从最后一个斜杠或哈希字符或数字开始)由getFragment() 方法返回;但是,不能保证有效的IRI 具有这样的片段(IRI 可能以散列或破折号终止,或者它可能在最后一个值之后只有数字)。这背后的原因是片段必须是 XML QName - 它在 RDF/XML 中用于命名标签。

例如,IRI.create("http://www.example.com/test/1234").getFragment() 将返回一个空字符串。

按照AKSW 的建议,使用SimpleIRIShortFormProvider,或者,如果您的实体有标签,则使用AnnotationValueShortFormProvider

【讨论】:

  • 谢谢 Ignazio 和 @AKSW
  • @Ignazio 我的一个问题:IRI::getShortForm 返回什么? Javadoc 确实是“短格式”,但这究竟是什么意思?
  • getShortForm() 检查以下内容:“IRI 是否有片段?如果有,这就是缩写形式”,然后“IRI 的末尾是否有 / 字符?那么就是缩写形式形式(即sometest.com/test#1234 ->test#1234)”。否则返回引用的表单:&lt;http://sometest.com/test/&gt;
猜你喜欢
  • 1970-01-01
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
相关资源
最近更新 更多