嗨,有一种更有效的方法来创建以下内容:
.addProperty(RDF.type, locah+"/Repository")
.addProperty(RDF.type, DCTerms.Agent)
.addProperty(RDF.type, FOAF.Agent);
拥有具有多个RDF.types的资源有什么优势?
答案 0 :(得分:0)
在计算本体中,一个实例可以具有多个类(类型)。
分类
一开始这可能会造成混淆,因为例如在医学分类中,这是不同的。在那里,您必须为实例选择一个完全相同的“类”。因此,医生必须只选择一个ICD 10代码进行初步诊断。
您可以想象这样的分类方案,例如厨房中的餐具抽屉,您必须确定是汤匙,叉子还是刀子,然后将其放在适当的隔间中。没有可以同时放在两个隔间中的“汤匙”。
但是,当罕见的异常发生在某些地方确实无法容纳时,就会出现问题。为了解决这个问题,您需要“剩余”类,可以在其中放置这些异常。
本体
现在本体的语义是不同的: class 只是其成员的集合(无论这些成员是否被明确指定)。这意味着具有多个类(类型)的资源仅表示它属于多个集合。
示例
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);});
}
}