Thanks A. Soroka and Andy!

@Andy: is it possible to control the data from query engine/server side without 
need to change the SPARQL query?
I am thinking to pass the start offset and rows count values to query execution 
context, and 'somewhere' in that query engine will read those values from the 
execution context and limit the data.
With this, the caller/client could send the same SPARQL query, and pass the 
start offset and rows count info separately (i.e. via URL query string to my 
own Sparql web interface)
I don't know where is that 'somewhere', but this seems possible from Jena, 
right?

Thanks,
Z

________________________________________
From: [email protected] <[email protected]>
Sent: Wednesday, September 16, 2015 12:08 PM
To: [email protected]
Subject: Re: paging the query results

For the record,

https://stackoverflow.com/questions/28210775/split-list-into-multiple-lists-with-fixed-number-of-elements-in-java-8/28211518

is a better answer than the one I first linked.

---
A. Soroka
The University of Virginia Library

> On Sep 16, 2015, at 12:02 PM, Andy Seaborne <[email protected]> wrote:
>
> Yes - A ResultSet isn't Iterable because you can only read it once unless you 
> do something like ResultSetFactory.makeRewindable,
> Hence converting to a stream (.sequential() if ordered!)) is nice.
>
> If you are throwing away the part of the results outside the 
> startOffset/rowsCount slice, you can add OFFSET & LIMIT to the query then the 
> query engine/server can do it, resulting in less bytes.
>
> If you want the client to control it, the streams way is good.
>
>       Andy
>
> On 16/09/15 16:27, [email protected] wrote:
>> One option: Jena is now using Java 8, so you can use the Streams API to do 
>> this:
>>
>> https://stackoverflow.com/questions/29273705/how-to-paginate-a-list-of-objects-in-java-8
>>
>> ResultSet is an Iterator, so you can convert it to a Stream.
>>
>> ---
>> A. Soroka
>> The University of Virginia Library
>>
>>> On Sep 16, 2015, at 11:19 AM, Zen 98052 <[email protected]> wrote:
>>>
>>> Any idea on how to do the paging on the results set?
>>>
>>> For example in this code:
>>>
>>>
>>> ResultSet rs = qe.execSelect();
>>>
>>>
>>> I was thinking to use com.google.common.collect.FluentIterable, so let say 
>>> I have the start offset and rows count values.
>>>
>>> To do the paging logic in naive way would be something like:
>>>
>>>
>>> FluentIterable<QuerySolution> newIterator = FluentIterable.from(rs);
>>>
>>> newIterator.skip(startOffset);
>>>
>>> newIterator.limit(rowsCount);
>>>
>>>
>>> Unfortunately the first line doesn't work (the ResultSet type is not type 
>>> of Iterable as expected by FluentIterable).
>>>
>>> Let me know the right way of paging the query results.
>>>
>>>
>>>
>>> Thanks,
>>>
>>> Z
>>
>

Reply via email to