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