Resolví mi pregunta. Creo que hubo un problema con mi ontología. Por lo tanto, creé otra ontología para inferir individuos. La ontología que creé contiene Persona y subclases de Persona: MalePerson, FemalePerson y MarriedPerson. Y, hay dos propiedades de objeto (hasSpouse, hasSibling) y una propiedad de tipo de datos (hasAge). Y, creé 3 personas. John - MalePerson - tieneEdad (20) - tieneHermano (Jane) Jane - FemalePerson - tieneHermano (Juan) - tieneCónyuge (Bob) Bob - MalePerson - tieneCónyuge (Jane)
Y, puse dos restricciones para MalePerson y Clases de FemalePerson Para MalePerson: tieneCónyuge máximo 1 tieneCónyuge única MalePerson Para FemalePerson: tieneCónyuge máximo 1 tieneCónyuge única FemalePerson
Por último, he hecho MarriedPerson ser una clase definida. Antes de razonar, MarriedPerson no tiene ningún individuo. Sin embargo, la modelo debería inferir que Jane y Bob están casados. Por lo tanto, al final, la clase MarriedPerson debe tener 2 personas.
Cuando ejecuté este código en Java usando Jena, obtuve 2 individuos inferidos.
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
Sería de gran ayuda si se incluye un puntero al archivo pizza.owl (supongo que es un lugar público) y si también ha proporcionado el código que utilizó para configurar la variable 'reasoner'. – cygri
Muchas gracias cygri por su interés. Resolví mi problema y proporcioné un ejemplo a continuación. – Mikae