Rdf Jena-从任何语言的本体类中获取标签

Rdf Jena-从任何语言的本体类中获取标签,rdf,jena,Rdf,Jena,出于用户界面的目的,我想在Jena中为给定的本体类找到一个标签。 如果可能,标签应使用用户首选的语言,但如果没有用户语言的标签, 我想显示任何标签,希望用户能够理解。要做到这一点,我想循环所有可用的标签,然后选择一个(可能只是第一次尝试的第一个) 到目前为止,代码如下所示: import com.hp.hpl.jena.ontology.OntClass; public class LabelUtils { public static String getLabel(OntClass o

出于用户界面的目的,我想在Jena中为给定的本体类找到一个标签。 如果可能,标签应使用用户首选的语言,但如果没有用户语言的标签, 我想显示任何标签,希望用户能够理解。要做到这一点,我想循环所有可用的标签,然后选择一个(可能只是第一次尝试的第一个)

到目前为止,代码如下所示:

import com.hp.hpl.jena.ontology.OntClass;
public class LabelUtils {
    public static String getLabel(OntClass ontClass, String preferredLanguage) {
        String label = ontClass.getLabel(preferredLanguage);
        if (label == null) {
            // here find another label, in any language, whatever
        }
        return label;
    }
}

我如何列出所有标签,无论使用何种语言?我只找到了一个方法
ontClass.listLabels(字符串语言)
,它当然只返回该语言的标签


我可以假设一个英文标签总是存在,或者循环检查标签的硬连线区域设置列表,但这看起来很蹩脚。

标签通过
rdfs:label
属性与OWL中的元素相关

为了验证这一点,我们可以从通过以下方式创建的简约模型开始:

final OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);
final OntClass clazz = model.createClass("urn:ex:class");
clazz.addLabel("className1", "en");
clazz.addLabel("className2", "fr");
将模型写成N3,我们得到以下内容:

<urn:ex:class>
      a       owl:Class ;
      rdfs:label "className1"@en , "className2"@fr .
对于示例应用程序,下面的输出应该能够证明您可以显式地反映语言标记

fr
en
工作正常,但如果您想使用OnTheSource接口方法,可以使用更接近原始方法的方法。注意Javadoc所表示的内容(重点添加)如下

com.hp.hpl.jena.util.iterator.ExtendedIterator列表标签(字符串lang)

回答所有标签上的迭代器 此资源的文本

参数:
  • lang-用于将列出的注释限制为、的语言标记,或用于选择所有[labels]

今天我发现了这个问题,我觉得这个问题很有趣,因为使用listLabels方法,您只能列出rdfs:labels。使用这种方法,您可以列出使用词汇表SKOS(SKOS:altLabel和SKOS:prefLabel)定义的标签


将此作为答案发布,因为我没有评论的声誉…

这是可行的,但有一个更简单的解决方案,使用OnTestSource listLabels方法:如果lang参数为
null
,则会在所有标签上返回一个迭代器。我补充了这一点。“无论使用何种语言,我如何列出所有标签?我只找到了一个方法ontClass.listLabels(String language),它当然只返回该语言的标签。“用于
listLabels
的javadoc说,如果
language
null
,则所有[labels]返回。我添加了一个答案。所以你说我应该读javadoc。Duh,我!但是我看到你为我修复了javadoc中关于“注释”而不是“标签”的拼写错误:)是的,我确实修复了“注释”与“标签”的拼写错误“有点,但我认为这只是文档中的一个简单的复制粘贴错误,因为还有一个非常类似的listComments方法,并且实现可能几乎完全相同。是的,我刚刚检查过,它就像广告一样工作。太糟糕了,所以不允许有两个“公认的答案”。我会给耶拿人发一个关于拼写错误的补丁,不管怎样…@ClemensKlein Robbenhaar如果你真的想,你可以接受目前被接受的答案并接受这个答案,但我认为Rob Hall的答案解释了如何实现这样的功能是很好的(如果需要rdfs:label以外的属性的值,这将非常有用)。
fr
en