Proposal for Paged Results

Below is a sketch of adding paged results to DASL. Dale and I developed this
from Dale's initial proposal ...

-Saveen

-----------

DASL PAGED RESULTS 

Motivation

Simple queries ("list all files in folder") can have large result sets. A
client looking at such a list literally browses through "pages" of the
result set. That is, clients only show specific sections of the result set
to the user and thus only need to download specific those specific sections.
This allows for less resource usage and because of that mroe responsive UI.

Drawbacks

Server & clients need to be more complex, but only in cases when they really
need this fe`ature. The normal search case is not affected.

Additions to DASL

On top of what DASL already defines, doing paged results will require a way
to indicate what page to retrieve in a search request. In this proposal it
is the Range header.

Example: Requesting a page of a search:

-The client constructs a complete SEARCH request
-The client adds a Range header to identify the page of interest
-The client sends the Request
-The server constructs the set of records that most closely match the
requested Page
-The server MAY provide an ETag for this response caching the result set
-The server adds XML elements in the PROPFIND response that identifies the
specific range returned
-The server adds XML elements in the PROPFIND response that tells what the
size of the result set
- the server sends the response

>> Request

SEARCH /container/ HTTP/1.1
Range: rows=10-20
Content-Type: text/xml
Content-Length: xxx

... insert query here ...

>> Response

HTTP/1.1 207 Multistatus
Content-Type: text/xml
Content-Length: xxx
E-Tag: qqqqqq

... normal SEARCH/PROPFIND result ... (with some XML element added to
indicate the specific range in the response)
	
Example: Requesting further pages of same result:

-Client constructs the same original Query
-Client adds if-Match: with an etag

>> Request

SEARCH /container/ HTTP/1.1
Range: rows=20-30
If-Match: qqqqqq
Content-Type: text/xml
Content-Length: xxx

... insert query here ...

Example: Requesting further pages (but not caring if result set has
changed):

-Client constructs the same original Query
-Client does not use if-Match header

>> Request

SEARCH /container/ HTTP/1.1
Range: rows=20-30
Content-Type: text/xml
Content-Length: xxx

... insert query here ...



The Range header

Today the Range header supports a list of byte ranges.

For paged results, need to define additional support for "rows" 

Examples:

Range: rows=1-20
Range: rows=1-end

Currently, only concerned about a single range at a time, not multiple
ranges

QSD
Will potentially need QSD support, for ranges (for example, only some
properties may be allowed in a sort specification whe paged results are
being used) that is to be defined later.
 

Received on Friday, 4 September 1998 15:19:48 UTC