Я решил свой вопрос.Я думаю, что была проблема с моей онтологией.Поэтому я создал другую онтологию для вывода индивидов.Онтология, которую я создал, содержит Person и подклассы Person: MalePerson, FemalePerson и MarriedPerson.И есть два свойства объекта (hasSpouse, hasSibling) и одно свойство типа данных (hasAge).И я создал 3 человека.Джон - MalePerson - hasAge (20) - hasSibling (Джейн) Джейн - FemalePerson - hasSibling (Джон) - hasSpouse (Боб) Боб - MalePerson - hasSpouse (Джейн)
И я установил два ограничения для MalePerson и FemalePersonклассы.Для MalePerson: hasSpouse max 1 hasSpouse only MalePerson Для MalePerson: hasSpouse max 1 hasSpouse only FemalePerson
Наконец, я сделал MarriedPerson определенным классом.Прежде чем рассуждать, MarriedPerson не имеет личности.Тем не менее, модель должна сделать вывод, что Джейн и Боб женаты.Следовательно, в конце у класса MarriedPerson должно быть 2 человека.
Когда я запустил этот код на Java с помощью Jena, у меня было 2 предполагаемых человека.
OntModel ontModel = ModelFactory.createOntologyModel();
InputStream in = FileManager.get().open(inputFileName);
if (in == null) {
throw new IllegalArgumentException( "File: " + inputFileName + " not found");
}
ontModel.read(in, "");
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
reasoner = reasoner.bindSchema(ontModel);
// Obtain standard OWL-DL spec and attach the Pellet reasoner
OntModelSpec ontModelSpec = OntModelSpec.OWL_DL_MEM;
ontModelSpec.setReasoner(reasoner);
// Create ontology model with reasoner support
OntModel model = ModelFactory.createOntologyModel(ontModelSpec, ontModel);
// MarriedPerson has no asserted instances
// However, if an inference engine is used, two of the three
// individuals in the example presented here will be
// recognized as MarriedPersons
//ns is the uri
OntClass marPerson = model.getOntClass(ns + "OWLClass_00000003866036241880"); // this is the uri for MarriedPerson class
ExtendedIterator married = marPerson.listInstances();
while(married.hasNext()) {
OntResource mp = (OntResource)married.next();
System.out.println(mp.getURI());
} // this code returns 2 individuals with the help of reasoner