[ https://issues.apache.org/jira/browse/ODE-367?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Karthick Sankarachary updated ODE-367: -------------------------------------- Attachment: xpath-update-facility-for-trunk.txt > XPath Update Facility > --------------------- > > Key: ODE-367 > URL: https://issues.apache.org/jira/browse/ODE-367 > Project: ODE > Issue Type: New Feature > Components: BPEL Runtime > Affects Versions: 1.2 > Environment: Platform-Independent > Reporter: Karthick Sankarachary > Fix For: 1.3 > > Attachments: xpath-update-facility-for-trunk.txt > > Original Estimate: 168h > Remaining Estimate: 168h > > This is a description of a facility to make changes to instances of the XPath > 2.0 data model. This will come in handy in these types of scenarios: > modifying XML messages, adding to existing XML documents, creating edited > copies, etc. In particular, it will allow you to perform any or all of the > following operations on an XDM instance: > * Insertion of a node > * Deletion of a node > * Renaming a node > The building blocks of our update facility are XPath functions, all of which > take a context node, a copy of which is modified in some way and in turn > returned. Below, we describe the update syntax in terms of XPath extension > functions, and its semantics in terms of XQuery Update expressions. We wrote > our (non-updating) functions along the lines of corresponding (updating) > XQuery Update expressions, in such a way that the two are interchangeable > (i.e., once we add support for the xquery expression language.) Note that, by > default, XQuery Update modifies nodes in-place, whereas our XPath functions > modify a copy. > Use Case: Insert Siblings Before Children Of Context Node > Description: A function to insert the node(s) specified by $siblings before > the first node specified by $children, all of whose nodes must have $context > as parent. > Signature: > ode:insert-before($context as node(), $children as node()*, $siblings as > node()*) as node() > Example: > <assign> > <copy> > <from>ode:insert-before($parent, > $parent/child::node[position()=last()], $siblings)</from> > <to variable="parent"/> > </copy> > </assign> > Semantic: The above snippet is equivalent to the XQuery expression: > insert nodes $siblings before $parent/child::node[position()=last()] > Use Case: Insert Siblings After Children Of Context Node > Description: A function to insert the node(s) specified by $siblings after > the last node specified by $children, all of whose nodes must have $context > as parent. > Signature: > ode:insert-after($context as node(), $children as node()*, $siblings as > node()*) as node() > Example: > <assign> > <copy> > <from>ode:insert-after($parent, $parent/child::node(), > $siblings)</from> > <to variable="parent"/> > </copy> > </assign> > Semantic: The above snippet is equivalent to the XQuery expression: > insert nodes $siblings after $parent/child::node() > Use Case: Insert As First Children Of Context Node > Description: A function to insert the node(s) specified by $children as the > first child(ren) of $context. > Signature: > ode:insert-as-first-into($context as node(), $children as node()*) as > node() > Example: > <assign> > <copy> > <from>ode:insert-as-first-into($parent, $children)</from> > <to variable="parent"/> > </copy> > </assign> > Semantic: The above snippet is equivalent to the XQuery expression: > insert nodes $children as first into $parent > Use Case: Insert As Last Children Of Context Node > Description: A function to insert the node(s) specified by $children as the > last child(ren) of $context. > Signature: > ode:insert-as-last-into($context as node(), $children as node()*) as > node() > Example: > <assign> > <copy> > <from>ode:insert-as-last-into($parent, $children)</from> > <to variable="parent"/> > </copy> > </assign> > Semantic: The above snippet is equivalent to the XQuery expression: > insert nodes $children as last into $parent > Use Case: Delete Children From Context Node > Description: A function to delete the node(s) specified by $children from its > parent specified by $context. > Signature: > ode:delete($context as node(), $children as node()*) as node() > Example: > <assign> > <copy> > <from>ode:delete($parent, $children)</from> > <to variable="parent"/> > </copy> > </assign> > Semantic: The above snippet is equivalent to the XQuery expression: > delete nodes $children > Use Case: Rename Context Node: > Description: A function to rename the context node specified by $context as > per the name specified by $item, which is either a QName, Element or String. > Signature: > ode:rename($context as node(), $name as item()) as node() > Example: > <assign> > <copy> > <from>ode:rename($person, fn:QName("http://www.example.com/example", > "manager"))</from> > <to variable="person"/> > </copy> > </assign> > Semantic: The above snippet is equivalent to the XQuery expression: > rename $person as fn:QName("http://www.example.com/example", "manager") > Unlike XQuery Update, we designed our functions to be non-updating in that > they preserve the identity and properties of its arguments (i.e., they don't > try to change the XML in-place). Instead, a modified copy of the context node > is created, essentially giving it a new identity. Further, all of our > functions return a single R-value item, as opposed to a sequence. This allows > us to not only honor WS-BPEL's static analysis requirements, but also be > friendly to the copy operation of WS-BPEL's assign activity. In particular, > it ensures that: > (a) Our functions are safe to use in the from-spec of the copy operation (no > in-place updates must occur here.) > (b) The burden of modifying XML messages remains with the copy operation (all > updates are reflected only here.) > (c) The node replacement semantics of the copy operation is not impacted (the > entire target node is replaced.) > (d) The modified copy of the context node can be moved to a new location > (target need not be the context node.) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.