2016-04-26 11 views
1

Ich benutze jena, um Abfrage auf Ontologie abzufeuern. Ich erhalte Ergebnisse wie folgt, wenn ich die Abfrage ausführen zugewiesen, um den Wert der Dateneigenschaft erhalten Student1Wie extrahiert man den DataProperty-Wert aus den Sparql-Ergebnissen?

"Ashutosh"^^http://www.w3.org/2001/XMLSchema#string is not a URI node 

einzuwenden Was soll ich tun, wenn ich führen möchte wie folgt

"Ashutosh" or `Ashutosh` 

Dies ist mein Java Code. Was soll ich tun, wenn ich wie oben angegeben antworten möchte?

import com.hp.hpl.jena.query.Query; 
import com.hp.hpl.jena.query.QueryFactory; 
import com.hp.hpl.jena.query.QueryExecution; 
import com.hp.hpl.jena.query.QueryExecutionFactory; 
import com.hp.hpl.jena.query.QuerySolution; 
import com.hp.hpl.jena.query.ResultSet; 
import com.hp.hpl.jena.rdf.model.Model; 
import com.hp.hpl.jena.rdf.model.RDFNode; 
import com.hp.hpl.jena.util.FileManager; 


public class abc { 
static String avg; 
static String sq="Charlie"; 
static String tq="'"; 
static String data; 


public static void main(String[] args) { 

    // TODO Auto-generated method stub 

sparqltest();} 


static void sparqltest() 
{ 

    FileManager.get().addLocatorClassLoader(abc.class.getClassLoader()); 
    Model model= FileManager.get().loadModel("C:/Users/avg/workspacejena32/Jena/bin/ashu.rdf"); 
    //System.out.println("Connected..."); 
    String queryString="prefix avg:<http://www.semanticweb.org/avg/ontologies/2016/3/untitled-ontology-14#>" + 
         "prefix rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>" + 
         "SELECT * WHERE {" + 
         "avg:Student1 avg:Name ?x . filter isLiteral(?x)" + 
         "}"; 
    //System.out.println("Connected..."); 


    Query query= QueryFactory.create(queryString); 
    QueryExecution qexec=QueryExecutionFactory.create(query, model); 

try { 
    ResultSet rs = qexec.execSelect(); 
    for (; rs.hasNext() ;) 
    { 
    QuerySolution soln = rs.nextSolution() ; 
    RDFNode a = soln.get("x") ; 
    data = a.asNode().getLocalName(); 


} } 


    catch(Exception e) 
{ 
    System.out.println(e.getMessage()); 
} 
} 
} 
+1

Was ist das Problem jetzt? Ohne den Code zu sehen, ist es schwierig zu helfen, aber ich nehme an, dass Sie 'getLiteral (" x ")' nicht in der Ergebnismenge verwenden. – AKSW

+0

Dies ist mein Code unten angegeben. Es gibt Ausgabe als "Ashutosh" ^^ http://www.w3.org/2001/XMLSchema#string ist kein URI-Knoten, aber ich will nur 'Ashutosh' als eine Antwort. –

Antwort

2

Ich denke, was Sie so etwas wie, indem Sie erreicht tun wollen werden können:

String aS = a.asNode().getLiteral(); 

Dieses Sie ohne Zitate die wörtliche geben. Wie

"Ashutosh"^^http://www.w3.org/2001/rdf-schema#Literal 

Wenn Sie die reine lexikalischer Form des Wörtliche wollen Sie diese verwenden:

String aS = a.asNode().getLiteralLexicalForm(); 

Dies wird wieder nur die wörtliche der Knoten ohne den Datentyp. (Aber Vorsicht, es funktioniert nur, wenn der Knoten wirklich ein Literal ist)

+0

Sir seine Arbeit, aber teilweise.Es gibt mir Ergebnis 'Ashutosh ^^ http: // www.w3.org/2000/01/rdf-Schema # Literal' und ich möchte nur' Ashutosh' als Ergebnis. –

+0

Nun, meine Antwort ist nicht weit entfernt. Ich hatte die Funktionen falsch gespeichert. Um das reine ** lexikalische ** Formular zu erhalten, müssen Sie 'a.asNode() verwenden. GetLiteralLexicalForm();' Ich werde meine Antwort aktualisieren, um dies zu verdeutlichen. – oole

+0

yeahhh cool.Thanks Sir. Vielen Dank. Einfach Hut ab vor dir. –