2012-06-19 10 views
5

Soy nuevo en Jena-TDB y SPARQL, por lo que podría ser una pregunta tonta. Estoy usando tdb-0.9.0, en Windows XP.Jena TDB para almacenar y consultar mediante API

Estoy creando el modelo TDB para mi archivo trail_1.rdf. Mi comprensión aquí (corríjame si estoy equivocado) es que el siguiente código leerá el archivo rdf dado en el modelo TDB y también almacenará/cargará (no estoy seguro cuál es la mejor palabra) el modelo en el directorio dado 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(); 

¿Es correcto este entendimiento?


Según mi entendimiento ya que ahora el modelo se almacena en el directorio de D:\Project\Store_DB\data1\tdb, yo debería ser capaz de ejecutar la consulta en él en algún momento posterior.

Así que para consultar el TDB tienda en D:\Project\Store_DB\data1\tdb Probé siguiente, pero no se imprime nada:

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); 
} 

También probé esto, que tampoco se imprime nada:

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) ; 

¿Qué estoy haciendo incorrecto? ¿Hay algo malo en mi comprensión que he mencionado anteriormente?

Respuesta

3

Para la parte (i) de su pregunta, sí, su comprensión es correcta.

Para la parte (ii), la razón por la que listNames no devuelve ningún resultado es porque no ha puesto sus datos en un gráfico con nombre. En particular,

Model tdb = dataset.getDefaultModel(); 

significa que usted está almacenando datos en el gráfico predeterminado de TDB, es decir, la gráfica sin nombre. Si desea listNames devolver algo, cambiar esa línea a:

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

o algo similar. Por supuesto, tendrá que referirse a ese gráfico por nombre cuando consulte los datos.

Si su objetivo es simplemente probar si ha cargado datos correctamente en la tienda, intente con las herramientas de línea de comandos bin/tdbdump (Linux) o bat\tdbdump.bat (Windows).

Para la parte (iii), probé su código en mi sistema, apuntando a una de mis imágenes TDB, y funciona como uno esperaría. Entonces: o bien la imagen de TDB que está utilizando no tiene ningún dato (prueba con tdbdump), o el código que realmente ejecutó fue diferente al ejemplo anterior.

2

El problema en el código de su parte 1 es, creo, que no está confirmando los datos.

Pruebe con esta versión de su código de la 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(); 

y luego tratar con su código de pieza 3 :) ....

Cuestiones relacionadas