This code does not work. I want to save student marks/GPA in the file and
based on GPA assign students to GoodStudent or WorstStudents sub classes of
Student via Jena rules.




OntModel model=ModelFactory.createOntologyModel();

         InputStream in =FileManager.get().open("C://std.owl");
            if (in==null) {
                throw new IllegalArgumentException( "File: " +  " not
found");
            }           model.read(in,"");

             String ns="http://www.semanticweb.org#";;

            OntClass user1 = model.getOntClass(ns + "Student");

           Individual indiv = user1.createIndividual(ns + name); //name is
variable

            Property prop= model.getProperty(ns,"GPA");

            indiv.addLiteral(prop, marks); //marks also variable having
some value i-e 3.0



 String rule="[rule1:(?x   http://www.w3.org/1999/02/22-rdf-syntax-ns#type
http://www.semanticweb.org#Student) " +
         "( http://www.semanticweb.org#Student
http://www.semanticweb.org#GPA  ?marks +   )"   + "greaterThan(?marks, 2) "+
         " ->  (?x   http://www.w3.org/1999/02/22-rdf-syntax-ns#type
http://www.semanticweb.org#GoodStudent )]";

             String queryString= "PREFIX std:<http://www.semanticweb.org#>
"+
         "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> "  +
          "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> "+
                      "SELECT  * " +
                " WHERE {  ?x rdf:type std:GoodStudent}";

             Reasoner reasoner2 = new
GenericRuleReasoner(Rule.parseRules(rule));
  InfModel inf = ModelFactory.createInfModel(reasoner2, model);
     Query query = QueryFactory.create(queryString);
          QueryExecution qe = QueryExecutionFactory.create(query, inf);
     ResultSet results = qe.execSelect();
     ResultSetFormatter.out(System.out, results, query);
     qe.close();



         try (FileOutputStream writer = new
FileOutputStream("C://std.owl")) {
            model.write(writer, "RDF/XML");
        } catch (IOException ex) {
            Logger.getLogger(stdinfo.class.getName()).log(Level.SEVERE,
null, ex);
        }
            model.write(System.out, "N3");

    }

Reply via email to