如何在耶拿模型中为同一属性包含多个URI?

时间:2018-10-03 08:44:32

标签: rdf jena

嗨,有一种更有效的方法来创建以下内容:

.addProperty(RDF.type, locah+"/Repository")
.addProperty(RDF.type, DCTerms.Agent)
.addProperty(RDF.type, FOAF.Agent);

拥有具有多个RDF.types的资源有什么优势?

1 个答案:

答案 0 :(得分:0)

多种RDF类型

在计算本体中,一个实例可以具有多个(类型)。

分类

一开始这可能会造成混淆,因为例如在医学分类中,这是不同的。在那里,您必须为实例选择一个完全相同的“类”。因此,医生必须只选择一个ICD 10代码进行初步诊断。

您可以想象这样的分类方案,例如厨房中的餐具抽屉,您必须确定是汤匙,叉子还是刀子,然后将其放在适当的隔间中。没有可以同时放在两个隔间中的“汤匙”。

但是,当罕见的异常发生在某些地方确实无法容纳时,就会出现问题。为了解决这个问题,您需要“剩余”类,可以在其中放置这些异常。

本体

现在本体的语义是不同的: class 只是其成员的集合(无论这些成员是否被明确指定)。这意味着具有多个类(类型)的资源仅表示它属于多个集合。

示例

  • 数字2属于素数集,偶数集,整数集正数集
  • John Doe 是一个男人, a 丈夫, a 父亲。 (“是”的意思是“属于该集合”)

创建多种类型语句的有效方法

Jena 3.12.0不包含更简洁地添加多个属性的方法。但是,正如@AKSW所建议的那样,如果您有大量的语句(可能不值得3条),则可以使用循环,例如:

types.forEach(type->{resource.addProperty(RDF.type, type);});

工作示例

import java.util.List;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.vocabulary.OWL;
import org.apache.jena.vocabulary.RDF;
import org.apache.jena.vocabulary.RDFS;
import org.apache.jena.vocabulary.SKOS;

public class Test
{

    public static void main(String[] args)
    {
        Model model = ModelFactory.createDefaultModel();
        Resource resource = model.createResource("test");
        List<Resource> types = List.of(OWL.Class, RDFS.Class,SKOS.Concept);

        types.forEach(type->{resource.addProperty(RDF.type, type);});       
    }

}