2017-02-13 3 views
0

J'essaye d'écrire une requête pour ce modèle de hibou.Littéral d'impression de requête SPARQL utilisant JENA JAVA

:Sensor rdf:type owl:Class; 
:hasId rdf:type owl:DatatypeProperty, 
       rdfs:domain :Sensor; 
       rdfs:range xsd:int. 
:MedicalCountainer rdf:type :owlNamedIndividual, 
          :Sensor; 
          :hasId "55"^^xsd:int . 

Je veux utiliser l'ID du capteur pour récupérer le nom du capteur. Ceci est ma requête Java, mais je ne sais pas pourquoi il n'imprime rien. Je savais que ma question était juste parce que j'obtiendrais la réponse en protégé.

String file = "C:/users/src/data.ttl"; 
Model model = FileManager.get().loadModel(file); 
String queryString = "PREFIX : <http://semanticweb.org/sensor#>" + 
        "SELECT ?sensor" + 
        "WHERE {?sensor :hasId \"55"\^^<xsd:int>}"; 
Query query = QueryFactory.create(queryString); 
try (QueryExecution qexec = QueryExecutionFactory.create(query, model)) { 
      ResultSet result = qexec.execSelect(); 
      for (; result.hasNext();) { 
        QuerySolution soln = result.nextSolution(); 
        Resource r = soln.getResource("sensor"); 
        System.out.println(r); 
      } 
} 
+0

Vous interrogez pour la variable « capteur ». Ensuite, vous récupérez le littéral pour "Valr". Avez-vous essayé de récupérer le littéral pour "capteur" à la place? Autrement dit, soln.getLiteral ("sensor"); –

+0

En fait, je remarque que j'ai un problème majeur dans mon code. La boucle ne fonctionne pas, cela signifie que le résultat est vide. Je mets à jour mon code, je n'arrive pas à comprendre quel est le problème. – Ali

Répondre

2

L'utilisation du littéral dans la requête SPARQL est incorrecte. Soit vous utilisez

  1. un URI préfixé pour le littéral, à savoir "55"^^xsd:int, ou
  2. vous mettez l'URI complet dans des tranches d'angle, à savoir "55"\^^<http://www.w3.org/2001/XMLSchema#int>

mais pas un mélange des deux.

Et toujours préfèrent ajouter toutes les déclarations de PREFIX au début de la requête SPARQL afin d'assurer une bonne analyse dans tous les services SPARQL:

PREFIX : <http://semanticweb.org/sensor#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
SELECT ?sensor 
WHERE { 
    ?sensor :hasId "55"^^xsd:int 
} 
+0

J'utilise tortue, et je savais que la première façon dont vous mentionnez est la bonne façon, mais je reçois cette erreur: 'org.apache.jena.query.QueryParseException: Ligne 2, colonne 63: Nom préfixé non résolu: xsd: int' Cependant, la deuxième façon dont vous parlez est travaillée, mais je viens d'imprimer null. Est-ce que tu sais pourquoi? – Ali

+1

Parce que vous devez déclarer tous les préfixes au début de la requête SPARQL. Parfois, les API/outils fournissent des préfixes prédéfinis, mais pour les faire fonctionner partout, la meilleure pratique consiste à ajouter tous les préfixes qui sont utilisés dans la requête: 'PREFIX xsd: 'J'ai ajouté ceci à ma réponse pour référence future. – AKSW

+0

Merci beaucoup. Savez-vous pourquoi je deviens nul? Sur le protégé j'obtiens la réponse mais ici j'obtiens null pour cette question. – Ali