sto cercando di interrogare un repository utilizzando SPARQL e Sesamo 2.7, ma quando eseguo il mio codice che ho il seguente errorequery SPARQL RDF usando/Sesame
org.openrdf.http.client.SesameHTTPClient - Server reports problem: org.openrdf.query.parser.sparql.ast.VisitorException: QName 'viagem:nome' uses an undefined prefix
Il problema è che, ho il prefisso " viagem" nella scheda namespace per quel repository su openrdf-banco di lavoro, anche quando uso il metodo getNamespaces() si presenta ...
l'unico modo ho la query da eseguire è quello di aggiungere il prefisso manualmente su ogni query, ma sembra sbagliato ...
C'è qualcosa che mi manca su come usarlo correttamente?
--- A cura con più informazioni
codice non funziona: il lavoro
String queryString = "SELECT ?name \n" +
"WHERE {?Aeroporto viagem:nome ?name.\n" +
"?Aeroporto rdf:type viagem:Aeroporto}";
TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, queryString);
TupleQueryResult result = tupleQuery.evaluate();
try {
List<String> bindingNames = result.getBindingNames();
while (result.hasNext()) {
BindingSet bindingSet = result.next();
Value firstValue = bindingSet.getValue(bindingNames.get(0));
System.out.println(firstValue);
}
} finally {
result.close();
}
...
Questo codice se cambio queryString
String queryString = "PREFIX viagem:<http://teste.com.br/tut/Viagem.owl#> SELECT ?name \n" +
"WHERE {?Aeroporto viagem:nome ?name.\n" +
"?Aeroporto rdf:type viagem:Aeroporto}";
non ero sicuro se devo aggiungere il PREFISSO per ogni query che eseguirò (se è normale, va bene ...)
Anche se corro il seguente codice ottengo il prefisso e il nome correttamente
RepositoryResult<Namespace> listaNamespace = meuRepositorio.getConnection().getNamespaces();
while(listaNamespace.hasNext()){
Namespace atual = listaNamespace.next();
System.out.println("Name " + atual.getName() + " Prefix " + atual.getPrefix());
}
l'output è:
Name http://www.w3.org/2000/01/rdf-schema# Prefix rdfs
Name http://www.w3.org/2003/11/swrl# Prefix swrl
...
Name http://www.w3.org/1999/02/22-rdf-syntax-ns# Prefix rdf
Name http://teste.com.br/tut/Viagem.owl# Prefix viagem
Qual è il tuo codice? Qual è la domanda? Non c'è abbastanza qui per diagnosticare qualcosa ancora. Cosa intendi con "ho il prefisso" viagem "sotto la scheda Namespace per quel repository"? È per un'interfaccia SPARQL basata sul web? Gli spazi dei nomi disponibili potrebbero non essere definiti per le query eseguite nel codice. –
Per quel che vale, è in genere una buona idea per definire tutti i prefissi che si utilizza, e non dipendere dal server di fare qualcosa per aggiungerli in. Non dovrebbe essere difficile definire aa stringa che definisce una serie di prefissi e anteponilo alle tue domande prima di inviarle. –
Questo biglietto può essere rilevante: http://www.openvest.com/trac/ticket/34 (ma non ne sono assolutamente sicuro). Qualcuno fa il punto che se gli spazi dei nomi predefiniti sul server vengono modificati, che ha il potenziale per rompere il codice di query chiunque fare, che sembra una cosa negativa ™, e che i prefissi per le query dovrebbe essere definito in modo esplicito. –