There are two ways to use RDQL : from the command line and in Java programs.
The main class is jena.rdfquery:
java -cp ... jena.rdfquery [--data modelFile] [--query File | queryString]
With no arguments, it prints a usage message.
Example code fragment 1 (basic template)
Query query = new Query(queryString) ; // Need to set the source if the query does not. // This provided this override any query named source. query.setSource(model); QueryExecution qe = new QueryEngine(query) ; QueryResults results = qe.exec() ; for ( Iterator iter = results ; iter.hasNext() ; ) { ResultBinding rbind = (ResultBinding)iter.next() ; // Return from get is null if not found Object obj = rbind.get("x") ; // obj will be a Jena object: resource, property or RDFNode. } results.close() ;
The ResultBinding class allows an alternative form which can be used to get quoted strings:
Value v = rbind.getValue("x") ; String s = (v == null) ? "<null>" : v.asQuotedString() ;
Example code fragment 2 (using the results formatter)
Query query = new Query(queryString) ; query.setSource(model); QueryExecution qe = new QueryEngine(query) ; QueryResults results = qe.exec() ; QueryResultsFormatter fmt = new QueryResultsFormatter(results) ; PrintWriter pw = new PrintWriter(System.out) ; fmt.printAll(pw, " | ") ; pw.flush() ; fmt.close() ; results.close() ;
The command line usage is a wrapper around the Java interface.
Query templates are the ability to have a single query as a string and reuse it by setting the initial values for some variables.
Example
// This query would select everything Query query = new Query("SELECT * WHERE (?x, ?y, ?z)") ; query.setSource(model); QueryExecution qe = new QueryEngine(query) ; ResultBinding initialBinding = new ResultBinding() ; initialBinding.add("x", model.createResource("http://never/r-1")) ; initialBinding.add("y", model.createResource("http://never/p-1")) ; QueryResults results = qe.exec(initialBinding ) ; // Now the query is like "SELECT * WHERE (<http://never/r-1>, <http://never/p-1>, ?z)" // except ?x and ?y are bound in the result set. for ( Iterator iter = results ; iter.hasNext() ; ) { ResultBinding rbind = (ResultBinding)iter.next() ; Object obj_x = rbind.get("x") ; Object obj_z = rbind.get("z") ; } results.close() ;