Question

J'ai créé un fichier RDF / OWL en utilisant Protege 4.1 alpha. J'ai aussi créé une classe définie dans Protege appelé CheapPhone. Cette classe a une restriction qui est indiqué ci-dessous:

(hasPrice some integer[< 350])

Chaque fois, un prix d'un téléphone est inférieur à 350, on en déduit que CheapPhone. Il n'y a pas de problème pour ce inférant dans Protege 4.1 alpha. Cependant, je ne peux pas conclure cela en utilisant Jena.

J'ai aussi créé une classe définie appelée SmartPhone. Cette classe a aussi une restriction qui est indiqué ci-dessous:

(has3G value true) and (hasInternet value true)

Chaque fois, un téléphone 3G et dispose d'Internet, il est déduit que SmartPhone. Dans cette situation, il n'y a pas de problème déduisant ce dans les deux Protege et Jena.

J'ai commencé à penser qu'il ya un problème dans le moteur d'inférence par défaut d'Iéna. Le code que j'utilise Java est ci-dessous:

Reasoner reasoner = ReasonerRegistry.getOWLReasoner();

reasoner = reasoner.bindSchema(ontModel);
    OntModelSpec ontModelSpec = OntModelSpec.OWL_MEM_MINI_RULE_INF;
    ontModelSpec.setReasoner(reasoner);
    // Create ontology model with reasoner support
            // ontModel was created and read before, so I don't share the code in order
            // not to create garbage here
    OntModel model = ModelFactory.createOntologyModel(ontModelSpec, ontModel);

    OntClass sPhone = model.getOntClass(ns + "SmartPhone");
    ExtendedIterator s = sPhone.listInstances();
    while(s.hasNext()) {
        OntResource mp = (OntResource)s.next();
        System.out.println(mp.getURI());
    }

Ce code fonctionne parfaitement et me retourne les instances de, mais quand je change le code ci-dessous et qu'il est approprié pour CheapPhone, il ne retourne rien.

OntClass sPhone = model.getOntClass(ns + "CheapPhone");

Ai-je fait quelque chose de mal?

Était-ce utile?
scroll top