2017-05-13 2 views
0

Je souhaite intégrer l'entrée de l'utilisateur dans une requête SPARQL. Voici mon code existant mais je n'arrive pas à le faire fonctionner.Comment ajouter une variable de chaîne à la requête SPARQL?

public void setName(String name) { 
    String formattedName = name.replace(" ", "-"); 
    String query = "SELECT ?p ?o WHERE { <http://person/" + formattedName + "> ?p ?o }" ; 
    System.out.println(query); 
    QueryExecution qe = QueryExecutionFactory.sparqlService(
      "http://localhost:3030/Date/query", 
      "PREFIX dc: <http://purl.org/dc/elements/1.1/> " + query); 
    ResultSet results = qe.execSelect(); 
    System.out.println(results); 
    qe.close(); 
} 

Puis-je obtenir la sortie suivante dans la console:

SELECT ?p ?o WHERE { <http://person/Mark-John> ?p ?o } 
[email protected]8261 

La première ligne est la requête et la deuxième ligne est le résultat, ce qui devrait être les données reçues ...

Il fonctionne si j'essaie comme suit:

execSelectAndPrint(
     "http://localhost:3030/Date/query", 
     "PREFIX dc: <http://purl.org/dc/elements/1.1/> " + "SELECT ?p ?o WHERE { <http://person/Mark-John> ?p ?o }" 
     ); 

qui imprime:

| <http://purl.org/dc/elements/1.1/name>  | "Mark John" | 
| <http://purl.org/dc/elements/1.1/nationality> | "American" | 

Comment puis-je modifier mon premier code pour afficher les résultats du second?

+0

Si vous avez 'execSelectAndPrint', pourquoi ne pouvez-vous pas l'utiliser? – AKSW

Répondre

0

Le titre de votre question n'a rien à voir avec le problème que vous décrivez dans le texte ...

Vous êtes plus demander « Comment imprimer l'API Apache Jena ResultSet? »

Et puis il est déroutant que vous avez déjà une méthode appelée execSelectAndPrint qui fait ce que vous voulez. Donc la question est pourquoi ne pouvez-vous (re) utiliser cette méthode ou au moins les lignes correspondantes de codes dans la méthode?

documentation de l'API Apache Jena, en particulier la partie avec SPARQL se trouve here

ResultSet est un itérateur, itérer ainsi dessus:

ResultSet results = qexec.execSelect(); 
for (; results.hasNext() ;) { 
    QuerySolution qs = results.next() ; 
    ...         // extract the variables 
} 

Ou utilisez un des convenience methods:

Commentaire mineur:

Votre méthode est appelée setName qui a l'air un peu étrange w.r.t. à ce que vous faites dans cette méthode.