Domanda

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'esempio sopra riportato è formato da pizza formale. In questo gufo, Esempio-Margherita è un individuo della classe Margherita. Quindi, è già scritto in file Owl. Tuttavia, il problema è che il ragioniere dovrebbe dedurre che anche Margherita-Example dovrebbe essere una pizza vegetariana. Qualcuno potrebbe fare un esempio che mostri come trovare le possibili classi inferite di un individuo come in protetto? (Protege deduce correttamente quell'esempio-margerita è una pizza vegetariana. Tuttavia, non posso dedurre a livello di programmazione)

È stato utile?

Soluzione

Ho risolto la mia domanda. Penso che ci sia stato un problema con la mia ontologia. Pertanto, ho creato un'altra ontologia per dedurre gli individui. L'ontologia che ho creato contiene persona e sottoclassi di persona: Maleperson, femmina e sposata. E ci sono due proprietà degli oggetti (Hasspouse, Hassibling) e una proprietà del tipo di dati (hasage). E ho creato 3 persone. John - Maleperson - Hasage (20) - Hassibling (Jane) Jane - Femaleperson - Hassibling (John) - Hasspouse (Bob) Bob - Maleperson - Hasspouse (Jane)

E ho messo due restrizioni per le lezioni di Maleperson e Femaleperson. Per Maleperson: Hasspouse Max 1 Hasspouse solo Maleperson per Femaleperson: Hasspouse Max 1 Hasspouse Solo femminaperson

Infine, ho fatto sposare una classe definita. Prima del ragionamento, Sposato non ha individuo. Tuttavia, il modello dovrebbe dedurre che Jane e Bob sono sposati. Pertanto, alla fine, la classe sposata dovrebbe avere 2 persone.

Quando ho eseguito questo codice in Java usando Jena, ho avuto 2 individui inferiti.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top