2017-05-31 3 views
0

J'exécute ce code sur ce site MESH Query il renvoie les bons résultats Mais quand j'ai exécuté en utilisant Jena, il renvoie null. Sur JenaProblème d'exécution de requête SPARQL pour MESH Endpoint

String s = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX meshv: <http://id.nlm.nih.gov/mesh/vocab#> 
PREFIX mesh: <http://id.nlm.nih.gov/mesh/> 
PREFIX mesh2015: <http://id.nlm.nih.gov/mesh/2015/> 
PREFIX mesh2016: <http://id.nlm.nih.gov/mesh/2016/> 
PREFIX mesh2017: <http://id.nlm.nih.gov/mesh/2017/> 
SELECT ?d ?dName ?c ?cName 
FROM <http://id.nlm.nih.gov/mesh> 
WHERE { 
    ?d a meshv:Descriptor . 
    ?d meshv:concept ?c . 
    ?d rdfs:label ?dName . 
    ?c rdfs:label ?cName 
    FILTER(REGEX(?dName,'infection','i') || REGEX(?cName,'infection','i')) 
} 
ORDER BY ?d "; 
Query query = QueryFactory.create(s); 
      QueryExecution qe = QueryExecutionFactory.sparqlService("http://id.nlm.nih.gov/mesh/sparql", query); 
      ResultSet results = qe.execSelect(); 
      ResultSetFormatter.out(System.out, results, query); 
+0

Je suppose que vous devez activer RDFS inférences, probablement, via 'qe.addParam ('inférence , 'true') ' –

+0

cette fonction n'existe pas. –

+1

Très probablement. L'idée est que vous devez définir '& inference = true' dans l'URL demandée. Avez-vous vu "l'inférence RDFS?" case à cocher dans l'interface utilisateur? –

Répondre

2

vous devez utiliser QueryEngineHTTP tel que vous pouvez activer l'inférence via HTTP inference=true param:

Query query = QueryFactory.create(s); 
QueryEngineHTTP qe = new QueryEngineHTTP("http://id.nlm.nih.gov/mesh/sparql", query); 
qe.addPAram("inference", "true") 
ResultSet results = qe.execSelect(); 
ResultSetFormatter.out(System.out, results, query); 
+0

merci ça marche maintenant je comprends –

0

-je modifier la requête et j'ai un resut ce n'est pas la même chose parce que « http://id.nlm.nih.gov/mesh/sparql » ne savent pas meshv: Descriptor donc je l'enlève et maintenant je suis en train de reformuler la requête pour avoir le même résultat

+0

Pourquoi? Il est important de comprendre que vous avez activé l'inférence «RDFS» dans l'interface utilisateur, qui n'est pas activée par défaut. Et il n'y a pas d'instance directe de la classe 'meshv: Descriptor' qui correspond à votre requête. La solution est de l'activer à Iéna en ajoutant un paramètre URL '& inference = true' comme StanislavKralin l'a déjà suggéré dans son commentaire. – AKSW