[Bug 29355] New: Modernize sequence filtering


            Bug ID: 29355
           Summary: Modernize sequence filtering
           Product: XPath / XQuery / XSLT
           Version: Working drafts
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Requirements for Future Versions
          Assignee: jim.melton@acm.org
          Reporter: benito@benibela.de
        QA Contact: public-qt-comments@w3.org
  Target Milestone: ---

The syntax to get a subsequence in XQuery looks extremely dated.  
If you compare it too languages that became recently popular, you see that they
almost all support a syntax like sequence[from:to] or sequence[from:to:step] (
e.g. array[2:5] ) to get a subsequence like Python/Go/jq, or sequence[from..to]
like Perl/D/Ruby/Swift/Rust.  

A more modern sequence filtering would:

1. Allow negative numbers

$sequence[-1] to get the last value

$sequence[-2] to get the one before that ...

$sequence[$i] to get $sequence [last() + $i + 1] for $i < 0

2. Allow ranges

$sequence[ $list-of-numbers ]

as abbreviation for something like

$sequence[ position() = ($list-of-numbers ! (if (. > 0) then . else if (. < 0)
last() + . + 1 else xs:error("..") ) )  ]

Then you can at least do $sequence[2 to 4]

3. Add a by operator to skip the i-th elements. E.g. by 2 to get every second,
as in (("a", "b", "c", "d") by 2) returning ("a", "c")

With 2. and 3. you can write $sequence[2 to 10 by 3] to get the (2,5,8)-th

Except for 1. it should not break any existing script

You are receiving this mail because:
You are the QA Contact for the bug.

Received on Sunday, 3 January 2016 21:22:53 UTC