0

我有一个本体女巫是在 protege 中创建的,在里面:

我有 2 个班级(青少年和成人)。

我有一个拥有 dataProperty hasAge 的个人 John。

在 protege 中,我根据他的年龄获得了 john 的班级。(所以我的本体运行良好)

现在我已经在 java 中加载了我的本体,我尝试获取类成人中的所有个人(比如 protege 中的 John)。所以我做了

        //manager
        OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

        //IRI
        String x = "file:/D:/Studies/tpOwl.owl";
        IRI ontologyIRI = IRI.create(x);

        //ontology
        OWLOntology ont = manager.createOntology(ontologyIRI);

        //factory
        OWLDataFactory factory = manager.getOWLDataFactory();


        OWLReasonerFactory reasonerFactory = new StructuralReasonerFactory();
        OWLReasoner reasoner = reasonerFactory.createReasoner(ont);

        OWLClass adult = factory.getOWLClass(IRI.create(ontologyIRI + "#Adult"));
        NodeSet<OWLNamedIndividual> instancess = reasoner.getInstances(adult, true);
        for (Node<OWLNamedIndividual> i : instancess)
        {
         System.out.println(""+i);
        }

但我什么也没有。

那么在 java 中加载我的本体后如何获取特定类的个体?

4

1 回答 1

0

您的代码中有几个错误:

  1. 您需要 2 个 IRI:一个用于加载您的本体,其前面带有file:,另一个是您的本体中使用的 IRI,用于唯一标识您的本体中的构造。
  2. 你必须加载你的本体,而不是创建它。
  3. 你必须使用不同的推理器。所以不要使用StructuralReasonerFactoryuse say Hermit。见隐士。JFact 也不起作用。

以下是使用 Hermit 的工作代码:

        OWLOntologyManager manager = OWLManager.createOWLOntologyManager();

        //IRI
        Path path = Paths.get(".").toAbsolutePath().normalize();
        IRI loadDocumentIRI = IRI.create("file:/D:/Studies/tpOwl.owl");

        IRI ontologyIRI = IRI.create("http://www.semanticweb.org/akkou/ontologies/2017/10/tp-ontology");


        //ontology
        OWLOntology ont = manager.loadOntologyFromOntologyDocument(loadDocumentIRI);

        //factory
        OWLDataFactory factory = manager.getOWLDataFactory();


        OWLReasonerFactory reasonerFactory = new ReasonerFactory();
        OWLReasoner reasoner = reasonerFactory.createReasoner(ont);


        OWLClass adult = factory.getOWLClass(IRI.create(ontologyIRI + "#Adult"));
        NodeSet<OWLNamedIndividual> instancess = reasoner.getInstances(adult, true);
        for (Node<OWLNamedIndividual> i : instancess)  {
         System.out.println(""+i);
        }
于 2017-12-05T20:24:25.167 回答