2017-02-15 1 views
1

J'ai fait ce modèle hibou. Il y a deux classes Sensor et Location, et Location est une classe énumérée. J'essaie d'obtenir l'emplacement de chaque capteur avec leur numéro d'identification (ID). J'ai écrit ma requête dans Protege et ça marche bien. Mais, sur JENA, c'est l'impression NULL pour l'emplacement. J'ai utilisé le ressource pour imprimer le capteur, mais pour l'emplacement, il imprime null. Je ne pouvais pas comprendre la manière correcte d'imprimer l'emplacement.SPARQL Query Printing Enumerate Class avec JENA JAVA

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

Répondre

1

Ceci n'a rien à voir avec l'énumération dans OWL.

La requête recherche simplement les mappages dans le graphique RDF. Dans votre exemple, cela fonctionnera une fois que vous aurez vérifié avec soin comment la requête SPARQL est générée. Notez que vous concaténez la chaîne en Java et que des sauts de ligne ou des espaces doivent être utilisés. Votre requête est manquante à la fois après la variable ?location dans la partie SELECT, ainsi, il en résultera ?locationWHERE.

Solutions:

Ajouter un espace manquant, à savoir

String queryString = "PREFIX : <http://semanticweb.org/sensor#>" + 
        "SELECT ?sensor ?location " + 
        "WHERE {?sensor :hasId \"55"\^^xsd:int." + 
          "?sensor :hasLocation ?location}"; 

ou saut de ligne

String queryString = "PREFIX : <http://semanticweb.org/sensor#>" + 
        "SELECT ?sensor ?location\n" + 
        "WHERE {?sensor :hasId \"55"\^^xsd:int." + 
          "?sensor :hasLocation ?location}"; 
+0

Merci beaucoup, est-il de bons tutoriels, vous pouvez recommander – Ali