Hey Sony,

I found another small typo in your query - the keyword 'node'
is missing in your replace statement. So if you execute the
query below you should be fine.

for $childentry in $c//childentry
  return replace value of node $childentry/@id with 
      concat('New Child: ', data($c//childentry/@id))

I'm sure the somewhat unrelated syntax error message didn't
help you to find this ... sorry for that.

Regards,
Lukas



On Thu, Feb 24, 2011 at 11:08 PM, Sony Vijay <sony.vibh@gmail.com> wrote:
.. I see the syntax error : 
[XPST0003] Expecting ")", found "v".

when I try :

for $childentry in $c//childentry
  return replace value of $childentry/@id with 
      concat('New Child: ', data($c//childentry/@id))

To modify the child entries like so:

<childentry id="1"> ----- >  <childentry id="New Child: 1">


On Thu, Feb 24, 2011 at 5:03 PM, Sony Vijay <sony.vibh@gmail.com> wrote:
... Replacing the values of attribute nodes doesn't seem to work as expected when I use modify. Please see my previous post with correction in the typo.


On Thu, Feb 24, 2011 at 5:00 PM, Sony Vijay <sony.vibh@gmail.com> wrote:
Please ignore the typo. My sample xquery looks something like this:

for $childentry in $c//childentry
  return replace value of $childentry/@id with 
      concat('New Child: ', data($c//childentry/@id))

To modify the child entries like so:

<childentry id="1"> ----- >  <childentry id="New Child: 1">



On Thu, Feb 24, 2011 at 4:50 PM, Sony Vijay <sony.vibh@gmail.com> wrote:
Christian,

Yes. I did realize that I must use a RETURN statement. I tried that with a slight change in the requirement. Say, my child entries look like so :


<childentry id="1" />

I tried: 

 for $childentry in $c//childentry
  return replace value of $childentry/@id with

      concat('New Child: ', $c//childentry/text())

Does replace work differently for attributes ?

Thanks,
Sony



On Thu, Feb 24, 2011 at 3:27 PM, Christian Grün <christian.gruen@gmail.com> wrote:
Sony,

each FLWOR expression needs to be completed with a RETURN statement.
Please insert the following snippet (haven't tried it live):

  for $childentry in $c//childentry
  return replace value of $childentry with
      concat('New Child: ', $c//childentry/text())

Hope this helps,
Christian
___________________________

Christian Grün
Uni KN, Box 188
78457 Konstanz, Germany
http://www.inf.uni-konstanz.de/~gruen



On Thu, Feb 24, 2011 at 9:24 PM, Sony Vijay <sony.vibh@gmail.com> wrote:
> Christian,
> Thank you very much for helping me with the query. However, I am not quite
> sure how the transform operation works if I have to use a for loop. Say, I
> twist around yesterday's question a bit like so:
> copy $c :=
> <entry>
>   <id>1</id>
>   <title>How to use a transform expression</title>
>   <updated>2011-02-23</updated>
>   <author>
>     <name>BaseX Team</name>
>     <uri>http://basex.org</uri>
>   </author>
> <childentry> 1 </childentry>
> <childentry> 2 </childentry>
> <childentry> 3 </childentry>
>   <content type="html">Transform expression example created by BaseX
> Team</content>
> </entry>
> modify (
> replace value of node $c//name with 'BaseX',
> replace value of node $c//content with concat('Copy of: ', $c//content),
> insert node <member>Joey</member> into $c//author
> for $childentry in $c//childentry
> replace value of $childentry with concat('New Child: ',
> $c//childentry/text())
> )
> return $c
>
> The expected output is:
> <entry>
>   <id>1</id>
>   <title>How to use a transform expression</title>
>   <updated>2011-02-23</updated>
>   <author>
>     <name>BaseX</name>
>     <uri>http://basex.org</uri>
>     <member>Joey</member>
>   </author>
> <childentry> New Child: 1 </childentry>
> <childentry> New Child: 2 </childentry>
> <childentry> New Child: 3 </childentry>
>   <content type="html">Copy of: Transform expression example created by
> BaseX Team</content>
> </entry>
> The following exception is thrown when I tried my sample transformation
> query with the for loop:
> [XPST0003] Expecting 'where', 'order' or 'return' expression.
> Thanks,
> Sony
> PS: @Lukas: I did notice the update in the documentation. Thank you !
>
>
> On Wed, Feb 23, 2011 at 2:32 AM, Lukas Kircher
> <lukaskircher1@googlemail.com> wrote:
>>
>> Hi Sony,
>>
>> to help others with the same question, I allowed myself to
>> add a modified version of your example to our
>> documentation [1].
>>
>> Regards,
>> Lukas
>>
>>
>> [1] http://docs.basex.org/wiki/Update#transform
>>
>>
>>
>> On Wed, Feb 23, 2011 at 6:58 AM, Sony Vijay <sony.vibh@gmail.com> wrote:
>>>
>>> Christian,
>>> Thank you for the quick and helpful reply.
>>> - Sony
>>>
>>> On Tue, Feb 22, 2011 at 5:56 PM, Christian Grün
>>> <christian.gruen@gmail.com> wrote:
>>>>
>>>> Sony,
>>>>
>>>> the following query might do what you want:
>>>>
>>>> copy $c :=
>>>> <entry xmlns="http://www.w3.org/2005/Atom"
>>>> xmlns:libx="http://libx.org/xml/libx2">
>>>>  <id>1</id>
>>>>  <title>Link Amazon By ISBN</title>
>>>>  <updated>2010-09-29T18:37:48.592Z</updated>
>>>>  <author>
>>>>    <name>LibX Team</name>
>>>>    <uri>http://libx.org</uri>
>>>>    <email>libx.org@gmail.com</email>
>>>>  </author>
>>>>  <content type="html">Content created by LibX Libapp Builder</content>
>>>> </entry>
>>>> modify (
>>>>  replace value of node $c//*:name with 'Sony',
>>>>  replace value of node $c//*:content with
>>>>    concat('Copy of: ', $c//*:content)
>>>> )
>>>> return $c
>>>>
>>>>
>>>> Best,
>>>> Christian
>>>> ___________________________
>>>>
>>>> On Tue, Feb 22, 2011 at 11:43 PM, Sony Vijay <sony.vibh@gmail.com>
>>>> wrote:
>>>> > Hi,
>>>> > I am using BaseX 6.5. I am trying to transform a given node using an
>>>> > XQuery.
>>>> >
>>>> > Say, I have an node like so:
>>>> > <entry xmlns="http://www.w3.org/2005/Atom"
>>>> > xmlns:libx="http://libx.org/xml/libx2">
>>>> >   <id>1</id>
>>>> >   <title>Link Amazon By ISBN</title>
>>>> >   <updated>2010-09-29T18:37:48.592Z</updated>
>>>> >   <author>
>>>> >     <name>LibX Team</name>
>>>> >     <uri>http://libx.org</uri>
>>>> >     <email>libx.org@gmail.com</email>
>>>> >   </author>
>>>> >   <content type="html">Content created by LibX Libapp
>>>> > Builder</content>
>>>> > </entry>
>>>> > I am trying to send this node to an xquery which is expected to do the
>>>> > following actions:
>>>> >
>>>> > create a copy of this node (so that the actual node in the database
>>>> > does not
>>>> > change),
>>>> > transform/modify the duplicate copy of the given node
>>>> > return the modified duplicate copy of the given node
>>>> >
>>>> > I would expect the output to be like so:
>>>> > <entry xmlns="http://www.w3.org/2005/Atom"
>>>> > xmlns:libx="http://libx.org/xml/libx2">
>>>> >   <id>1</id>
>>>> >   <title>Link Amazon By ISBN</title>
>>>> >   <updated>2010-09-29T18:37:48.592Z</updated>
>>>> >   <author>
>>>> >     <name>Sony</name>
>>>> >     <uri>http://libx.org</uri>
>>>> >     <email>libx.org@gmail.com</email>
>>>> >   </author>
>>>> >   <content type="html">Copy of: Content created by LibX Libapp
>>>> > Builder</content>
>>>> > </entry>
>>>> > I tried to perform the non-updating functions using transform and also
>>>> > tried
>>>> > to use a pending update list
>>>> > (Reference: http://docs.basex.org/wiki/Update#transform). None of this
>>>> > works
>>>> > as expected. Could you refer me to a more detailed documentation for
>>>> > performing such transform operations on nodes ?
>>>> > Thanks,
>>>> > Sony
>>>> >
>>>> > _______________________________________________
>>>> > BaseX-Talk mailing list
>>>> > BaseX-Talk@mailman.uni-konstanz.de
>>>> > https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
>>>> >
>>>> >
>>>
>>>
>>> _______________________________________________
>>> BaseX-Talk mailing list
>>> BaseX-Talk@mailman.uni-konstanz.de
>>> https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
>>>
>>
>
>