Как включить несколько URI для одного и того же свойства в Jena Model? - PullRequest
0 голосов
/ 03 октября 2018

Привет, есть ли более эффективный способ создать следующее:

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

В чем преимущества наличия ресурса с несколькими RDF.types?

1 Ответ

0 голосов
/ 16 июля 2019

Несколько типов RDF

В вычислительных онтологиях экземпляр может иметь несколько классов (типов).

Классификация

Это может сначала сбить с толку, потому что, например, в медицинской классификации это отличается.Там вы должны выбрать ровно один «класс» для экземпляра.Таким образом, врач должен выбрать ровно один код ICD 10 для первичного диагноза.

Вы можете представить себе такие схемы классификации, как ящик для столовых приборов на кухне, где вы должны решить, является ли что-то ложкой, вилкой или ножом изатем поместите его в соответствующий отсек.Не существует "ложки", которую вы можете поместить в два отсека одновременно.

Однако возникают проблемы, когда возникает редкое исключение, когда что-то действительно никуда не подходит.Чтобы учесть это, вам нужны «оставшиеся» классы, в которые вы можете поместить эти исключения.

Онтологии

Теперь семантика онтологий другая: A class - это просто набор его членов (независимо от того, указаны эти члены явно или нет).Это означает, что ресурс, имеющий несколько классов (типов), означает, что он принадлежит нескольким наборам.

Примеры

  • число 2 принадлежит множеству простых чиселчисла, набор четных чисел, набор целых чисел и набор положительных чисел
  • Джон Доу является человеком, a муж и а отец.(«is 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);});       
    }

}
...