Введите значения из списка в запрос sparql

1

У меня есть следующий код:

 public static List getSomeReceipes(List ing){
    List list = new ArrayList();

    String log4jConfPath = "C:/Users/Karen/workspace/Jena/src/Tutorial/log4j.properties";
    PropertyConfigurator.configure(log4jConfPath);
    String ingre = " ";

    try {
        //opening owl file
        Model model = ModelFactory.createDefaultModel();
        model.read(new FileInputStream("C:/Users/Karen/Desktop/Proyecto/bbdd.owl"), null, "TTL");
        //System.out.println(model);
        for(int i=0; i<ing.size(); i++){
            ingre = (String) ing.get(i);
            System.out.println(ingre);
        }
        //create a new query
                 String queryString
                ="PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"
                +"PREFIX owl: <http://www.w3.org/2002/07/owl#>"
                +"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"
                +"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>"         
                +"PREFIX rec:<http://www.receta.org#>"
                +"SELECT reduced ?r WHERE { "
                +"  ?x rdf:type rec:Receta . "
                +"  ?x rdfs:label ?r."
                +"  filter not exists {"
                +"    ?x rec:Ingrediente ?i"
                +"    filter( ?i not in (rec:" + ing + "))"
                +"}"
                +"}";
        com.hp.hpl.jena.query.Query q = QueryFactory.create(queryString);

        //execute the query and obtain results

        QueryExecution qe = QueryExecutionFactory.create(q, model);
        ResultSet results = qe.execSelect();

        //print query results
        while (results.hasNext()) {
            //System.out.println(results.getResourceModel());
            //ResultSetFormatter.out(System.out,results, q);
            list.add(results.next());
        }
    } catch (java.lang.NullPointerException e) {
        System.out.println(e);
    } catch (Exception e) {
        //System.out.println("Query Failed !");
    }
     System.out.println(list.toString() + "\n");
        return list;      
}

Я хотел бы добавить каждый элемент списка (ing) в запрос. Так что скажем, у меня есть список вроде: ing = [Tomato, Cucumber, Salt] Я хотел бы создать такой запрос:

                 String queryString
                ="PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>"
                +"PREFIX owl: <http://www.w3.org/2002/07/owl#>"
                +"PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"
                +"PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>"         
                +"PREFIX rec:<http://www.receta.org#>"
                +"SELECT reduced ?r WHERE { "
                +"  ?x rdf:type rec:Receta . "
                +"  ?x rdfs:label ?r."
                +"  filter not exists {"
                +"    ?x rec:Ingrediente ?i"
                +"    filter( ?i not in (rec:" + Tomato + ", rec:" + Cucumber + ", rec:" + Salt + "))"
                +"}"
                +"}";

Есть ли способ сделать это? Есть идеи?

  • 0
    Это звучит как дубликат недавнего вопроса ... (поиск)
  • 0
    Какой вопрос? Можете ли вы поставить ссылку здесь, пожалуйста?
Показать ещё 5 комментариев
Теги:
list
sparql
rdf

1 ответ

1
Лучший ответ

Предполагая, что ваш список является простым списком строк, это становится просто базовым программированием на Java, и вы можете очень легко сделать это, написав метод, который принимает List<String> качестве входных данных, и выводит список как строку в синтаксисе SPARQL. Например:

String convertToSPARQLList(List<String> list) {
    StringBuffer sb = new StringBuffer();
    sb.append("(");
    for(String item: list) {
         sb.append("rec:" + item);
         sb.append(", ");
    }
    sb.setLength(sb.length() - 2); // remove last comma and whitespace
    sb.append(")");
    return sb.toString();
 }

а затем использовать этот метод в построении запроса:

 String queryString = 
         ....
   + "filter( ?i not in " + convertToSPARQLList(in) + ")"
   + " }" 
   + "}";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню