Question

InfModel infmodel = ModelFactory.createInfModel(reasoner, m);
Resource vegetarian = infmodel.getResource(source + "Vegetarian");
Resource margherita = infmodel.getResource(source + "Example-Margherita");
if (infmodel.contains(margherita, RDF., vegetarian)) {
        System.out.println("Margherita is a memberOf Vegetarian pizza");
    }

L'exemple donné ci-dessus est formé par pizza formelle. Dans cet hibou, l'exemple-margherita est un individu de la classe Margherita. Il est donc déjà écrit dans le fichier OWL. Cependant, le problème est que le raisonnement doit en déduire que Margherita-Exemple devrait également être une pizza végétarienne. Quelqu'un pourrait-il donner un exemple qui montre comment trouver des classes déduites possibles d'un individu comme dans Protege? (Protege correctement déduit que l'exemple-margherita est une pizza végétarienne. Cependant, je ne peux pas déduire par programme)

Était-ce utile?

La solution

J'ai résolu ma question. Je pense qu'il y avait un problème avec mon ontologie. Par conséquent, j'ai créé une autre ontologie pour déduire des individus. L'ontologie que j'ai créée contient la personne et les sous-classes de personne: Maleperson, femme et marié. Et, il existe deux propriétés d'objet (Hasspouse, Hassibling) et une propriété de type de données (Hasage). Et, j'ai créé 3 individus. JOHN - MALEPERSON - HASAGE (20) - Hassibling (Jane) Jane - Femaleperson - Hassibling (John) - Hasspouse (Bob) Bob - MalePerson - Hasspouse (Jane)

Et, j'ai mis deux restrictions pour les classes maleperson et féminin. Pour Maleperson: Hasspouse Max 1 Hasspouse uniquement Maleperson pour FemaleSon: Hasspouse Max 1 Hasspouse Only FemaleSon

Enfin, j'ai fait de MariéSerson pour être une classe définie. Avant de raisonner, Marié Personne n'a pas d'individu. Cependant, le modèle doit en déduire que Jane et Bob sont mariés. Par conséquent, à la fin, la classe de personnes mariées devrait avoir 2 individus.

Lorsque j'ai dirigé ce code en Java en utilisant Jena, j'ai obtenu 2 individus déduits.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top