Сова вывод: Как получить класс лиц после загрузки онтологии

У меня онтология ведьмы создана в протеже, вот это

У меня 2 класса (подросток и взрослый).

У меня есть человек Джон с dataProperty hasAge.

В протеже я получаю класс Джона в соответствии с его возрастом. (так что моя онтология работает хорошо)

Теперь я загрузил свою онтологию в Java, и я пытаюсь получить всех людей, которые в классе взрослого (Как Джон в протеже). так я и сделал

        //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?

1 ответ

В вашем коде есть пара ошибок:

  1. Вам нужно 2 IRI: один для загрузки вашей онтологии, перед которой стоит file:другой IRI, используемый в вашей онтологии для уникальной идентификации конструкций в вашей онтологии.
  2. Вы должны загрузить свою онтологию, а не создавать ее.
  3. Вы должны использовать другой мыслитель. Так что вместо использования StructuralReasonerFactory скажи 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);
        }
Другие вопросы по тегам