unknown
1970-01-01 00:00:00 UTC
--001a11c30780ecd66c04eef8a2c4
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable <div dir="ltr"><div>So now my code looks like <br></div><div><br>xquery version "3.0";<br><br>import module namespace sp="urn:<a href="http://sparkpictures.com">sparkpictures.com</a>" at 'common.xqm';<br> <br>declare function local:getReviews($type as xs:string+) as element(review)* {<br> $type ! collection($sp:reviewsColl || '/' || .)/reviews/review<br>};<br><br><stats date="{current-date()}">{<br>
<br> <reviewData>{('',$sp:tabs) ! <br> (let $reviews:=local:getReviews(.) <br> return element {if (.) then . else 'total'}<br> {count($reviews)})}</reviewData>}<br>
</stats><br><br></div>where $sp:tabs just contains a sequence of strings. I have simplified it to just return count($reviews) but the above code gives me<br><br><?xml version="1.0" ?><exception><path>/db/apps/spark/stats.xq</path><message>err:XPDY0002 Undefined context sequence for 'self::node()' [source: /db/apps/spark/stats.xq]</message></exception>***@ihe-machine:~/film$ <br>
?<br><div><br><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jan 1, 2014 at 3:01 PM, David Lee <span dir="ltr"><<a href="mailto:***@calldei.com" target="_blank">***@calldei.com</a>></span> wrote:<br> <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> <div link="blue" vlink="purple" lang="EN-US"> <div> <p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">You need to put () around FLOWR expressions after a ! like<u></u><u></u></span></p> <p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u>?<u></u></span></p> <p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">(1,2,3) ! ( for $a in . return . )<u></u><u></u></span></p> <p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u>?<u></u></span></p> <p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u>?<u></u></span></p> <p class="MsoNormal" style="margin-left:.5in"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> <a href="mailto:talk-***@x-query.com" target="_blank">talk-***@x-query.com</a> [mailto:<a href="mailto:talk-***@x-query.com" target="_blank">talk-***@x-query.com</a>] <b>On Behalf Of </b>Ihe Onwuka<br> <b>Sent:</b> Wednesday, January 01, 2014 2:03 AM<br> <b>To:</b> <a href="mailto:***@x-query.com" target="_blank">***@x-query.com</a><br> <b>Subject:</b> [xquery-talk] A flowering map<u></u><u></u></span></p><div><div class="h5"> <p class="MsoNormal" style="margin-left:.5in"><u></u>?<u></u></p> <div> <div> <p class="MsoNormal" style="margin-left:.5in">The code below should (it's been edited) use map to create an element for A B C D within the parent reviewData.<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"><u></u>?<u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">The call to local:getReview is expensive though, so to avoid calling it twice I am returning a sequence as the content of the element constructor.<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"><u></u>?<u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">xquery version "3.0";<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"><u></u>?<u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">declare variable $coll:='/db/apps/spark/';<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"><u></u>?<u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">declare function local:getReviews($type as xs:string+) as element(review)* {<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">? $type ! collection($coll || .))/descendant::review<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">};<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"><u></u>?<u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"><stats date="{current-date()}"><u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">? <reviewData>{('','A','B','C','D') ! ?<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">? ? ? ? ? ? ? element {if (.) then . else 'total'}<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">� � � � � � � � � � � {local:getReviews(.)/(count(.),count(distinct-values(thing/@link)))}</reviewData>}<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"> </stats><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">What I would like to do is cache the result of calling local:getReviews so that I am not pushed into returning a sequence just so as to avoid multiple expensive calls to local:getReviews.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable <div dir="ltr"><div>So now my code looks like <br></div><div><br>xquery version "3.0";<br><br>import module namespace sp="urn:<a href="http://sparkpictures.com">sparkpictures.com</a>" at 'common.xqm';<br> <br>declare function local:getReviews($type as xs:string+) as element(review)* {<br> $type ! collection($sp:reviewsColl || '/' || .)/reviews/review<br>};<br><br><stats date="{current-date()}">{<br>
<br> <reviewData>{('',$sp:tabs) ! <br> (let $reviews:=local:getReviews(.) <br> return element {if (.) then . else 'total'}<br> {count($reviews)})}</reviewData>}<br>
</stats><br><br></div>where $sp:tabs just contains a sequence of strings. I have simplified it to just return count($reviews) but the above code gives me<br><br><?xml version="1.0" ?><exception><path>/db/apps/spark/stats.xq</path><message>err:XPDY0002 Undefined context sequence for 'self::node()' [source: /db/apps/spark/stats.xq]</message></exception>***@ihe-machine:~/film$ <br>
?<br><div><br><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jan 1, 2014 at 3:01 PM, David Lee <span dir="ltr"><<a href="mailto:***@calldei.com" target="_blank">***@calldei.com</a>></span> wrote:<br> <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> <div link="blue" vlink="purple" lang="EN-US"> <div> <p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">You need to put () around FLOWR expressions after a ! like<u></u><u></u></span></p> <p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u>?<u></u></span></p> <p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d">(1,2,3) ! ( for $a in . return . )<u></u><u></u></span></p> <p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u>?<u></u></span></p> <p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1f497d"><u></u>?<u></u></span></p> <p class="MsoNormal" style="margin-left:.5in"><b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif"">From:</span></b><span style="font-size:10.0pt;font-family:"Tahoma","sans-serif""> <a href="mailto:talk-***@x-query.com" target="_blank">talk-***@x-query.com</a> [mailto:<a href="mailto:talk-***@x-query.com" target="_blank">talk-***@x-query.com</a>] <b>On Behalf Of </b>Ihe Onwuka<br> <b>Sent:</b> Wednesday, January 01, 2014 2:03 AM<br> <b>To:</b> <a href="mailto:***@x-query.com" target="_blank">***@x-query.com</a><br> <b>Subject:</b> [xquery-talk] A flowering map<u></u><u></u></span></p><div><div class="h5"> <p class="MsoNormal" style="margin-left:.5in"><u></u>?<u></u></p> <div> <div> <p class="MsoNormal" style="margin-left:.5in">The code below should (it's been edited) use map to create an element for A B C D within the parent reviewData.<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"><u></u>?<u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">The call to local:getReview is expensive though, so to avoid calling it twice I am returning a sequence as the content of the element constructor.<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"><u></u>?<u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">xquery version "3.0";<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"><u></u>?<u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">declare variable $coll:='/db/apps/spark/';<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"><u></u>?<u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">declare function local:getReviews($type as xs:string+) as element(review)* {<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">? $type ! collection($coll || .))/descendant::review<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">};<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"><u></u>?<u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"><stats date="{current-date()}"><u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">? <reviewData>{('','A','B','C','D') ! ?<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">? ? ? ? ? ? ? element {if (.) then . else 'total'}<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in">� � � � � � � � � � � {local:getReviews(.)/(count(.),count(distinct-values(thing/@link)))}</reviewData>}<u></u><u></u></p> </div> <div> <p class="MsoNormal" style="margin-left:.5in"> </stats><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">What I would like to do is cache the result of calling local:getReviews so that I am not pushed into returning a sequence just so as to avoid multiple expensive calls to local:getReviews.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">