[
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.