2012-06-19 9 views
5

Sono nuovo sia per Jena-TDB che per SPARQL, quindi potrebbe essere una domanda stupida. Sto usando tdb-0.9.0, su Windows XP.Jena TDB per archiviare e interrogare usando l'API

Sto creando il modello TDB per il mio file trail_1.rdf. La mia comprensione qui (correggimi se ho torto) è che il codice seguente leggerà il file rdf dato nel modello TDB e memorizzerà/caricherà (non è sicuro qual è la parola migliore) il modello nella directory data D:\Project\Store_DB\data1\tdb:

// open TDB dataset 
String directory = "D:\\Project\\Store_DB\\data1\\tdb"; 
Dataset dataset = TDBFactory.createDataset(directory); 

Model tdb = dataset.getDefaultModel(); 

// read the input file 
String source = "D:\\Project\\Store_DB\\tmp\\trail_1.rdf"; 
FileManager.get().readModel(tdb, source); 

tdb.close(); 
dataset.close(); 

Questa comprensione è corretta?


Come per la mia comprensione dal momento che ora il modello è conservato a D:\Project\Store_DB\data1\tdb directory, dovrei essere in grado di eseguire query ad un certo momento successivo.

Quindi, per interrogare l'archivio TDB al D:\Project\Store_DB\data1\tdb ho provato in seguito, ma non stampa:

String directory = "D:\\Project\\Store_DB\\data1\\tdb" ; 
Dataset dataset = TDBFactory.createDataset(directory) ; 

Iterator<String> graphNames = dataset.listNames(); 
while (graphNames.hasNext()) { 
    String graphName = graphNames.next(); 
    System.out.println(graphName); 
} 

Ho provato anche questo, che anche non stampa nulla:

String directory = "D:\\Project\\Store_DB\\data1\\tdb" ; 
    Dataset dataset = TDBFactory.createDataset(directory) ; 

    String sparqlQueryString = "SELECT (count(*) AS ?count) { ?s ?p ?o }" ; 

    Query query = QueryFactory.create(sparqlQueryString) ; 
    QueryExecution qexec = QueryExecutionFactory.create(query, dataset) ; 
    ResultSet results = qexec.execSelect() ; 
    ResultSetFormatter.out(results) ; 

Cosa sto facendo in modo errato? C'è qualcosa di sbagliato nella mia comprensione che ho menzionato sopra?

risposta

3

Per la parte (i) della domanda, sì, la vostra comprensione è corretta.

Per la parte (ii), la ragione per cui listNames non restituisce alcun risultato è perché i dati non sono stati inseriti in un grafico con nome. In particolare,

Model tdb = dataset.getDefaultModel(); 

significa che si memorizzano dati nel grafico predefinito di TDB, cioè il grafico senza nome. Se si desidera listNames restituire qualcosa, cambiare quella linea a:

Model tdb = dataset.getNamedGraph("graph42"); 

o qualcosa di simile. Ovviamente, dovrai fare riferimento a quel grafico per nome quando interroghi i dati.

Se il tuo obiettivo è semplicemente quello di verificare se hai caricato correttamente i dati nell'archivio, prova gli strumenti da riga di comando bin/tdbdump (Linux) o bat\tdbdump.bat (Windows).

Per la parte (iii), ho provato il codice sul mio sistema, indicando una delle mie immagini TDB, e funziona proprio come ci si aspetterebbe. Quindi: l'immagine TDB che stai utilizzando non contiene dati (prova con tdbdump), oppure il codice che hai effettivamente eseguito era diverso dall'esempio sopra.

2

Il problema nel codice parte 1 è, penso, non si sta impegnando i dati.

Prova con questa versione del codice parte 1:

String directory = "D:\\Project\\Store_DB\\data1\\tdb"; 
    Dataset dataset = TDBFactory.createDataset(directory); 

    Model tdb = dataset.getDefaultModel(); 

    // read the input file 
    String source = "D:\\Project\\Store_DB\\tmp\\trail_1.rdf"; 
    FileManager.get().readModel(tdb, source); 

    dataset.commit();//INCLUDE THIS STAMEMENT 

    tdb.close(); 
    dataset.close(); 

e quindi provare con il codice parte 3 :) ....

Problemi correlati