Hello Maurice, Christian,
  I'm grateful to you for providing me help. This is exactly what I needed.
  Thanks a lot. 

  Now I can move forward with the application development.

Best regards,
Anupam



________________________________
 From: M. van Keulen <[email protected]>
To: Anupam Bakshi <[email protected]> 
Sent: Wednesday, June 6, 2012 3:37 AM
Subject: Re: [basex-talk] Nothing gets printed after insert node
 

Dear Anupam,

You seem to misunderstand the term "update". An update modifies the
    document in the database. So if you ask for it after that (with
    doc(...)) you'll get the modified document. In your case:

let $s := db:open("BaseX","sample1.xml")
>let $r := db:open("BaseX","result1.xml")
>for $m in $s//*:M
>return
>    insert nodes $r//*:R[@id=$m/@id] into $m
>
modifies the sample1.xml in the database. A subsequent query 
db:open("BaseX","sample1.xml") would produce 

<P>
>  <M id="1">
>    <R id="1"/>
>  </M>
>  <M id="2">
>    <R id="2"/>
>  </M>
>  <M id="3"/>
></P>
>
If you don't want to store the document in the database and modify it, but 
simply want to generate a *new* intermediary document that is similar to 
sample1.xml but which includes the desired R-elements, then you don't update 
anything (the original file stays the same). You can do this with

<P>{
>let $s := db:open("BaseX","sample1.xml")
>let $r := db:open("BaseX","result1.xml")
>for $m in $s//*:M
>let $o := $r//*:R[@id=$m/@id]
>return <M>{$m/@*,$m/*,$o}</M>
>}</P>
>
or by using the transform-expression

let $s := db:open("BaseX","sample1.xml")
>let $r := db:open("BaseX","result1.xml")
>return
>copy $new := $s
>modify (
>    for $m in $new//*:M
>    return
>        insert nodes $r//*:R[@id=$m/@id] into $m
>)
>return $new
>
Maurice

On 06-06-12 08:12, Anupam Bakshi wrote: 
Hello Maurice,
>  Thanks for your response.
>  How do I communicate the intermediate result (modified document) between the 
>two queries? 
>
>  Do I store the intermediate file back in the database? I tried to store the 
>result of an update in a variable but it said that not allowed - "Let 
>expression: No updating expression allowed".
>  So the question is how can I run the first query to update the document and 
>the second query to retrieve the modified document?
>
>
>  If someone can point to an example, that will help too.
>Best regards,
>Anupam
>
>
>
>
>
>________________________________
> From: M. van Keulen <[email protected]>
>To: Anupam Bakshi <[email protected]> 
>Cc: [email protected] 
>Sent: Wednesday, June 6, 2012 1:38 AM
>Subject: Re: [basex-talk] Nothing gets printed after insert node
> 
>
>Dear Anupam,
>
>One workaround would be to do it in two queries: one to
                update your document, and one to retrieve the modified
                nodes. 
>
>The problem is not that you can't pick nodes from
                another resource, but that XQuery doesn't allow you to
                update and query inside the same query. In other words,
                within one query doing an update means you can't produce
                a (query) result, and having a query result means you
                can't do any update.
>
>Regards,
>Maurice.
>
>On 06-06-12 05:53, Anupam Bakshi wrote: 
>Then how about option 'b' ?
>>At this point any way forward, any work
                            around will do. 
>>Please let me know if anyone has any
                            suggestion.
>>
>>What I don't understand is, if I can add
                            nodes why can't I pick those nodes from
                            another resource? Why is this not possible? 
>>
>>But I'm looking for some workaround.
>>
>>Thanks for your help.
>>Anupam 
>>
>>
>>
>>________________________________
>> From:  Christian Grün <[email protected]>; 
>>To:  Anupam Bakshi <[email protected]>; 
>>Cc:  <[email protected]>; 
>>Subject:  Re: [basex-talk] Nothing gets printed after insert node 
>>Sent:  Wed, Jun 6, 2012 12:24:18 AM 
>> 
>>
>>> I'm interested in 'a'.
>>> The two files are in basex, I need
                                to write a query that will return the
>>> modified nodes at run time.
>>
>>Due to the nature of the XQuery Update
                                Specification, that's generally
>>not possible. Sorry for that.
>>
>>
>>> From: Christian Grün <[email protected]>;
>>> To: Anupam Bakshi <[email protected]>;
>>> Cc: [email protected]
>>> <[email protected]>;
>>> Subject: Re: [basex-talk] Nothing
                                gets printed after insert node
>>> Sent: Tue, Jun 5, 2012 9:09:06 PM
>>>
>>> Are you mostly interested in
>>>
>>> a) updating your data, and
                                returning the modified node(s) as query
                                result,
>>> or
>>> b) finding the correct updating
                                query to modify your data?
>>> ___________________________
>>>
>>> > Here is what I actually want
                                to do. Maybe someone can suggest a
>>> > straightforward way.
>>> >
>>> > File : sample1.xml
>>> > <P>
>>> >  <M id="1"/>
>>> >  <M id="2"/>
>>> >  <M id="3"/>
>>> > </P>
>>> >
>>> > File: result1.xml
>>> > <Q>
>>> >  <R id="1"/>
>>> >  <R id="2"/>
>>> > </Q>
>>> >
>>> > Desired output :
>>> > <P>
>>> >  <M id="1">
>>> >     <R id="1"/>
>>> >   </M>
>>> >   <M id="2">
>>> >     <R id="2"/>
>>> >   </M>
>>> >  <M id="3"/>
>>> > </P>
>>> >
>>> > So insert the node from 2nd
                                file into 1st where the ids match.
>>> >
>>> > Thanks,
>>> > Amupam
>>> >
>>> >
                                ________________________________
>>> > From: Christian Grün <[email protected]>
>>> > To: Anupam Bakshi <[email protected]>
>>> > Cc: [email protected]
>>> > Sent: Tuesday, June 5, 2012
                                12:02 PM
>>> > Subject: Re: [basex-talk]
                                Nothing gets printed after insert node
>>> >
>>> >> Unfortunately I did not
                                see how I can return the value into a
                                variable
>>> >> for
>>> >> further processing.
>>> >> Is there some other way to
                                do it?
>>> >
>>> > Did you already try
                                db:output()?
>>> >
>>> >
>> 
>
>-- 
----------------------------------------------------------------------
Dr.Ir. M. van Keulen - Associate Professor, Data Management Technology
Univ. of Twente, Dept of EEMCS, POBox 217, 7500 AE Enschede, Netherlands
Email: [email protected], Phone: +31 534893688, Fax: +31 534892927
Room: ZI 3039, WWW: http://www.cs.utwente.nl/~keulen 
>
>

-- 
----------------------------------------------------------------------
Dr.Ir. M. van Keulen - Associate Professor, Data Management Technology
Univ. of Twente, Dept of EEMCS, POBox 217, 7500 AE Enschede, Netherlands
Email: [email protected], Phone: +31 534893688, Fax: +31 534892927
Room: ZI 3039, WWW: http://www.cs.utwente.nl/~keulen 
_______________________________________________
BaseX-Talk mailing list
[email protected]
https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk

Reply via email to