2016-11-02 1 views
0

J'ai un jeu-questionnaire dans lequel l'utilisateur doit répondre à des questions telles que: Qu'est-ce que le nom de la capitale allemande? Les options sont: Berlin Madrid Londres Les données sont dans mon fichier owl.Comment filtrer une requête SPARQL avec des variables Java

J'ai aussi une autre ontologie dans laquelle j'ai rdfs: commentaire de ressources (options de questions) comme rdfs: commentaire de Berlin, Londres etc Je veux si l'utilisateur choisit la mauvaise option ie Londres, rdfs: commentaire de droite option devrait être affichée à l'utilisateur, Berlin dans ce cas.

The right (correct) option I have is in java variable 'correct' and if user click wrong option, I want to show the rdfs:comment of correct option as: 

     "SELECT * " + 
        " WHERE { ?x rdfs:comment ?y " + "FILTER regex(?x ,'"+correct+"') " + 

       "}"; 
     System.out.println(queryString); 
        Query query = QueryFactory.create(queryString); 
      QueryExecution qexec = QueryExecutionFactory.create(query, model) ; 
      ResultSet results = qexec.execSelect() ; 
       while (results.hasNext()) 
      { 
       QuerySolution binding = results.nextSolution(); 

         Literal l=binding.getLiteral("y"); 
         String s=l.toString(); 

     The problem is that it does not show me the filtered value rdfs:comment. When I remove Filter, it shows all rdfs:comment of resources but with Filter value, it simply does not work. 

     When I print the query, it shows the options values but does not display the rdfs:comment of that resources. 

     PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> prefix dbr: <http://dbpedia.org/page/>PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT * WHERE { ?x rdfs:comment ?y FILTER regex(?x ,"Berlin") } 

     PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> prefix dbr: <http://dbpedia.org/page/>PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> SELECT * WHERE { ?x rdfs:comment ?y FILTER regex(?x ,"Rome") } 

    My owl for rdfs:comment is like: Berlin--> rdfs:comment 
    Rome--> rdfs:comment etc 
+0

Combien d'étudiants dans votre université font le même exercice/projet? Je suis sûr que vous avez déjà demandé sur la liste de diffusion Jena par quelqu'un de votre classe. – AKSW

Répondre

2

ne suis pas sûr de votre structure de données, mais je suppose que les x sont URIs

Pour le filtre fonctionne, vous devez le faire comme ceci:

FILTRE regex (str (x) , "Berlin")

+0

Je dois utiliser un nom de variable au lieu de Berlin constant, car la prochaine fois que l'utilisateur cliquera sur le bouton Suivant, la variable contiendra Rome, Madrid, etc. et pas toujours Berlin. Je n'ai pas utilisé le mot clé str ici, est-ce obligatoire? –

+1

@ s.shah 'STR' est une fonction SPARQL qui convertit un IRI en chaîne et REGEX fonctionne sur des chaînes - utilisez toujours les spécifications SPARQLl: https://www.w3.org/TR/sparql11-query/#func -str – AKSW

+0

Bien sûr, vous pouvez également utiliser FILTER regex (str (? x), '"+ correct +"') – ChristophE