[NEW ISSUE] WS-Enumeration - add advanced cursoring option

When enumerating datasets there are times when its necessary (and if 
supported by the data source) to have more advanced and optimized 
cursoring options.  For example, a client may wish to change the direction 
in which it is iterating over the dataset, or jump to a certain index 
within large datasets - knowing it can skip some of the intermediate data 
items. 

Proposal:
Modify the Pull operation so that some cursoring parameters can be 
passed-in that move the current position of the enumeration before the 
results are retrieved:

    <wsen:Pull ?>
      <wsen:EnumerationContext>?</wsen:EnumerationContext>
      <wsen:MaxTime>xs:duration</wsen:MaxTime> ?
      <wsen:MaxElements>xs:long</wsen:MaxElements> ?
      <wsen:MaxCharacters>xs:long</wsen:MaxCharacters> ?
      <wsen:MoveCursor>
        <wsen:Direction> Forward | Reverse </wsen:Direction> ?
        [ <wsen:Skip> xs:long </wsen:Skip> |
          <wsen:MoveTo> xs:long </wsen:MoveTo> |
          <wsen:MoveToStart/> |
          <wsen:MoveToEnd/> ] ?
         ...
      </wsen:MoveCursor>
      ?
    </wsen:Pull>

/MoveCursor
  when present this element indicates how the current position within the 
dataset should be changed before the next chunk of data is retrieved.  If 
not supported the datasource MUST generate a fault (define the fault).
/MoveCursor/Direction
  when present, indicates whether the data source is moving forwards or 
backwards over the filtered dataset
/MoveCursor/Skip
  when present, indicates how many items should be skipped in the filtered 
dataset, in the cursor's direction, before starting to retrieve the next 
set of data items to return.  If this moves the cursor past the end of the 
data then no items will be returned in the response and the 
<wsen:EndOfSequence> element will be returned.
/MoveCursor/MoveTo
  when present, indicates the ordinal position (1-based) within the 
filtered dataset to move the cursor to before starting to retrieve the 
next set of data items to return. This means that the data item at the 
specified position will be the first item in the response.  If this moves 
the cursor past the end of the data then no items will be returned in the 
response and the <wsen:EndOfSequence> element will be returned.
/MoveCursor/MoveToStart
  when present, indicates that the cursor must be moved to the start of 
the filtered dataset. In a forward moving enumeration the first item in 
the filtered dataset would be the first item returned. In a reverse moving 
enumeration the result from the Pull would be empty.
/MoveCursor/MoveToEnd
  when present, indicates that the cursor must be moved to the end of the 
filtered dataset. In a reverse moving enumeration the last item in the 
filtered dataset would be the first item returned. In a forward moving 
enumeration the result from the Pull would be empty.

If the datasource does not support this feature then a fault MUST be 
generated in place of a PullResponse.

---
The PullResponse message will be modified too:
<wsen:PullResponse>
  <wsen:EnumerationContext> ... </wsen:EnumerationContext>
  <wsen:Items CursorLocation="xs:long"? 
      CursorDirection="Forward | Reverse"?>
    <xs:any> enumeration-specific element </xs:any> +
  <wsen:Items/>
  <wsen:EndOfSequence/> ?
  ...
</wsen:PullResponse>

wsen:Items@CursorLocation
  When present, this optional attribute, indicates the ordinal position of 
the first item in the Items list.  This attribute MUST be present if the 
datasource supports the MoveCursor feature.

wsen:Items@CursorDirection
  When present, this optional attribute, indicates the direction in which 
the datsource is iterating over the fitered dataset.  This attribute MUST 
be present if the datasource supports the MoveCursor feature.

thanks
-Doug
______________________________________________________
STSM  |  Web Services Architect  |  IBM Software Group
(919) 254-6905  |  IBM T/L 444-6905  |  dug@us.ibm.com

Received on Monday, 12 January 2009 18:49:23 UTC