1

我有一个 owl 文件,我需要编写一个 java 程序,在其中传递个人名称(例如 Lion)并从 owl 获取与此个人相关的所有对象/数据属性值(例如:Goldenhas_color对象属性等) .

我基于最简单的 api 编写了一个 java 类uk.ac.ebi.brain.core.Brain,但是这个 API 没有列出个人信息的方法。那么还有其他简单的方法可以满足我的需求吗?

在下面的示例中,我正在检索主类的子类Animal ,但我不知道如何检索每个子类的个体,甚至不知道如何通过个体名称来获取该个体的对象/数据属性:

import edu.stanford.smi.protegex.owl.model.OWLIndividual;
import java.util.List;
import java.util.Set;
import org.semanticweb.owlapi.model.OWLAnonymousIndividual;
import org.semanticweb.owlapi.model.OWLObjectProperty;
import uk.ac.ebi.brain.core.Brain;
import uk.ac.ebi.brain.error.BrainException;

public class AnimalIndividuals {

    public static void main(String[] args) throws BrainException {
        Brain brain = new Brain();
        brain.learn("d:\\Animal.owl");
        List<String> subClasses = brain.getSubClasses("Animal", false);
        for (String subClass : subClasses) {
            System.out.println("Subclass of Animal: " + subClass);
        }
        brain.sleep();
    }    
}
4

1 回答 1

1

目前(2013 年 3 月)无法使用 Brain 检索附加到对象属性的个体,因为它尚未由负责此操作的底层推理器ELK实现。

但是,在我看来,你可以玩弄你的建模。你可以断言Lion为一个阶级而不是个人。您可以进一步将该概念定义Lionhas_color some Golden. 这在 OWL 中意味着所有的狮子都是金色的,但事物也可以是金色的,但不一定是狮子。

用大脑实现:

public static void main(String[] args) throws BrainException {
    Brain brain = new Brain();

    //Declaration of the concepts and properties
    brain.addClass("Animal");
    brain.addClass("Lion");
    brain.addClass("Golden");
    brain.addObjectProperty("has_color");

    //Axioms assertion
    brain.subClassOf("Lion", "Animal");
    brain.subClassOf("Lion", "has_color some Golden");

    //Query
    List<String> results = brain.getSubClasses("has_color some Golden", false);
    System.out.println(results);

    brain.sleep();
}
于 2013-03-03T12:46:29.350 回答