Ich versuche ein Repository 2.7 mit SPARQL und Sesam abzufragen, aber wenn ich meinen Code ausführen bekomme ich folgende FehlerAbfrage RDF mit SPARQL/Sesame
org.openrdf.http.client.SesameHTTPClient - Server reports problem: org.openrdf.query.parser.sparql.ast.VisitorException: QName 'viagem:nome' uses an undefined prefix
Das Problem ist, dass ich mit dem Präfix " viagem“unter der Registerkarte Namespaces für das Repository auf openrdf-Werkbank, auch wenn ich die Methode verwenden getNamespaces() zeigt sich, ...
die einzige Art, wie ich die Abfrage erhalten zu laufen ist die Vorsilbe manuell hinzufügen bei jeder Abfrage, aber das klingt falsch ...
Gibt es etwas, das mir fehlt, wie man es richtig benutzt?
--- Edited mit mehr Informationen
-Code nicht funktioniert:
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();
}
...
Dieser Code funktioniert, wenn ich Abfrage-Zeichenfolge-ändern zu
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}";
ich nicht sicher war, ob ich das sollte hinzufügen PREFIX für jede Abfrage, die ich ausführen werde (wenn es das normale Verhalten ist, ist es in Ordnung ...)
Auch wenn ich den folgenden Code ausführen bekomme ich das Präfix und den Namen richtig
RepositoryResult<Namespace> listaNamespace = meuRepositorio.getConnection().getNamespaces();
while(listaNamespace.hasNext()){
Namespace atual = listaNamespace.next();
System.out.println("Name " + atual.getName() + " Prefix " + atual.getPrefix());
}
der Ausgang ist:
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
Wie lautet Ihr Code? Was ist die Abfrage? Es gibt nicht genug, um noch etwas zu diagnostizieren. Was meinst du "Ich habe das Präfix" viagem "unter der Registerkarte Namespaces für dieses Repository"? Ist das für eine webbasierte SPARQL-Schnittstelle? Die dafür verfügbaren Namespaces sind möglicherweise nicht für Abfragen definiert, die Sie im Code ausführen. –
Für das, was es wert ist, ist es in der Regel eine gute Idee, alle Präfixe zu definieren, die Sie verwenden, und nicht davon abhängen, dass der Server etwas tut, um sie hinzuzufügen. Es sollte nicht schwierig sein, eine Zeichenfolge zu definieren, die eine Reihe von Präfixe definiert , und dies Ihren Anfragen vorzuziehen, bevor Sie sie versenden. –
Dieses Ticket kann relevant sein: http://www.openvest.com/trac/ticket/34 (aber ich bin mir nicht ganz sicher). Jemand macht den Punkt, dass, wenn die vordefinierten Namespaces auf dem Server geändert werden, dies den Code eines jeden, der Abfragen durchführt, brechen könnte, was wie ein Bad Thing ™ aussieht, und dass die Präfixe für Abfragen explizit definiert werden sollten. –