import java.util.List;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.query.QueryFactory;
import org.apache.jena.query.ResultSet;
import org.apache.jena.query.ResultSetFormatter;
import org.apache.jena.rdf.model.InfModel;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.reasoner.rulesys.GenericRuleReasoner;
import org.apache.jena.reasoner.rulesys.Rule;
import org.apache.jena.util.FileManager;

public class JenaRules {
  static String filepath = "/home/may/teaching/SemWeb/RDF/";
  public static void main(String[] args){
    // Model model = ModelFactory.createDefaultModel();
    Model m = FileManager.get().loadModel(filepath + "mondial-europe.n3");
    List<Rule> rules = Rule.rulesFromURL(filepath + "rule-neighbor-bigcountries.rl");
    GenericRuleReasoner reasoner = new GenericRuleReasoner(rules);
    reasoner.setMode(GenericRuleReasoner.HYBRID);
    InfModel model = ModelFactory.createInfModel(reasoner, m);
    String q = "prefix mon: <http://www.semwebtech.org/mondial/10/meta#>" +
             "select ?N ?X" +
               " where {{ ?Z" + // <http://www.semwebtech.org/mondial/10/countries/D/>" +
             "          mon:bigneighborwith ?X }" +
             " union { ?C a mon:Bigcountry; mon:name ?N }}";
    Query qu = QueryFactory.create(q);
    QueryExecution qe = QueryExecutionFactory.create(qu, model);
    ResultSet results = qe.execSelect();
    ResultSetFormatter.out(System.out, results, qu);

    model.getDeductionsModel().write(System.out,"N3");
  }
}
