W3C home > Mailing lists > Public > public-qt-comments@w3.org > October 2013

[Bug 23643] New: Convenient operator for transform expressions

From: <bugzilla@jessica.w3.org>
Date: Sat, 26 Oct 2013 13:54:24 +0000
To: public-qt-comments@w3.org
Message-ID: <bug-23643-523@http.www.w3.org/Bugs/Public/>

            Bug ID: 23643
           Summary: Convenient operator for transform expressions
           Product: XPath / XQuery / XSLT
           Version: Working drafts
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Update 3.0
          Assignee: john.snelson@marklogic.com
          Reporter: christian.gruen@gmail.com
        QA Contact: public-qt-comments@w3.org

The XQUF transform expression has turned out to be an essential operation when
it comes to updating XML documents in main-memory. From our perspective,
however, it has the following shortcomings:

* Its verbose syntax makes updatable expressions inconvenient to read. The
copy/modify/return construct is particularly bulky when being embedded in
another FLWOR expression.

* Our users frequently mix up the components of FLWOR and transform
expressions. For many, it is hard to grasp why "copy" cannot be used in row
with "for" or "let".

* Most transform expressions we have encountered so far contain a single copy
variable and return the modified value without further modifications.

This is why I would like to propose a "modify" operator for XQUF 3.0, which
would require only few modifications in the grammar:

  AndExpr        ::= ModifyExpr ( "and" ModifyExpr )*
  ModifyExpr     ::= ComparisonExpr ( "!!" ComparisonExpr )?
  ComparisonExpr ::= ...

The modify operator works similar to the XQuery 3.0 map operator (and the "!!"
token has been chosen for that reason): the value of the first expression is
bound as context item, and the second expression performs updates on this item.
The updated item is returned as result. 

>From the implementation point of view, this extension is straightforward:

* It can completely be derived from the transform expression.
* Error codes are the same, too (XUST0002, XUTY0013).

This is a little example how an expression may look like before and after:

* Using the transform expression:

  for $e in //item[@status ne 'up-to-date'] 
  let $c :=
    copy $c := $e
    modify insert node <sub/> into $c
    return $c
  return element updated { $c }

* Using the modify operator:

  for $e in //item[@status ne 'up-to-date'] 
  let $c := $e !! insert node <sub/> into .
  return element updated { $c }

I’m looking forward to the discussion.

You are receiving this mail because:
You are the QA Contact for the bug.
Received on Saturday, 26 October 2013 13:54:25 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 15:45:54 UTC