On Fri, Sep 6, 2013 at 5:11 PM, Phil Ashworth <[email protected]> wrote: > Sorry to revisit this thread > In one of the links you kindly provided there is a great example for using > PSS in a construct ( see below) > I really like the example. It's neat that you combine the models together in > a new model before writing it out. > > I have a similar problem but I want to run a series of select queries > combing the results of the resultsets before doing something with all the > results. > > I've tried a couple ways of doing this but I keep hitting hurdles. > The obvious way is to add each resultset querysolution into a > list<querysolution> and then use an iterator over the list. > But then I can't cast the list Iterator as a resultset which I would like to > do to try and reuse variables in the code whether the it is running multiple > selects or just one. > > Is using a list<querysolution>.iterator() the best way to achieve the > outcome? > > public class DBPediaQuery { > public static void main( String[] args ) { > final String dbpedia = "http://dbpedia.org/sparql"; > final ParameterizedSparqlString queryString > = new ParameterizedSparqlString( > "PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>"+ > "PREFIX dbo: <http://dbpedia.org/ontology/>" + > "CONSTRUCT WHERE {" + > " ?s a dbo:Place ." + > " ?s geo:lat ?lat ." + > " ?s geo:long ?long ." + > "}" ); > Model allResults = ModelFactory.createDefaultModel(); > for ( String mountain : new String[] { "Mount_Monadnock", > "Mount_Lafayette" } ) { > queryString.setIri( "?s", "http://dbpedia.org/resource/" + mountain ); > QueryExecution exec = QueryExecutionFactory.sparqlService( dbpedia, > queryString.toString() ); > Model results = exec.execConstruct(); > allResults.add( results ); > } > allResults.setNsPrefix( "geo", > "http://www.w3.org/2003/01/geo/wgs84_pos#" ); > allResults.setNsPrefix( "dbo", "http://dbpedia.org/ontology/" ); > allResults.setNsPrefix( "dbr", "http://dbpedia.org/resource/" ); > allResults.write( System.out, "N3" ); > } > }
Sorry for the delay in response. I'm not quite clear from the code that you posted what exactly you're trying to do. ResultSet is just an interface, and it wouldn't be all that hard to implement a ResultSet that wraps a iterator over QuerySolutions. However, if the problem is that you're using QEF.sparqlService: > QueryExecution exec = QueryExecutionFactory.sparqlService( dbpedia, > queryString.toString() ); perhaps you could use the 'service' keyword in the query, e.g., PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> PREFIX dbo: <http://dbpedia.org/ontology/> CONSTRUCT WHERE { SERVICE <http://dbpedia.org/sparql> { ?s a dbo:Place . ?s geo:lat ?lat . ?s geo:long ?long . } } and execute the query as you would if you weren't using QEF.sparqlService. I'm not sure whether that works or not, but if it does, and your problem arises from using QEF.sparqlService, it seems like a relatively quick workaround. -- Joshua Taylor, http://www.cs.rpi.edu/~tayloj/
