ode-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Karthick Sankarachary (JIRA)" <j...@apache.org>
Subject [jira] Updated: (ODE-367) XPath Update Facility
Date Tue, 02 Sep 2008 22:35:44 GMT

     [ 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-branch.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-branch.txt, 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.


Mime
View raw message