I think this error depends on the context of the two expressions you've given below - which in and of themselves look fine.

In an expression context, you need a comma between two direct element constructors:

<a/>, <b/>

When directly inside another direct element constructor, no comma is necessary (because the syntax is emulating XML itself):

<root><a/><b/></root>

When you use curly braces inside a direct element constructor, you return to an expression context, so commas are necessary again:

<root>{ <a/>, <b/> }</root>

You can mix the two styles:

<root>{ <a/>, <b/> }<c/><d/></root>

John

On 04/09/12 10:58, Mailing Lists Mail wrote:
Here is what Stumps me about the braces.. Since JOhn's solution worked,
I wanted to do the same for other element lengths...
so I did

<short-desc>{
   sum(

     for $shrtdesc in $ltnfiles//subtopic[@id = 'DEF']//short-definition
     return string-length($shrtdesc/p/__text)
   )
}</short-desc>


<long-desc>{
   sum(

     for $shrtdesc in $ltnfiles//subtopic[@id = 'DEF']//long-definition
     return string-length($shrtdesc/p/__text)
   )
}</long-desc>


Ended up getting the following error...


        At line 24 column 3:

22.
23. <long-desc>
24. {
25. sum(
26.


ANy Ideas please?






On Tue, Sep 4, 2012 at 10:37 AM, John Snelson
<[email protected] <mailto:[email protected]>> wrote:

    You're close - the missing part is that you want to use the sum()
    function, ie:

    <short-desc>{
       sum(

         for $shrtdesc in $ltnfiles//subtopic[@id = 'DEF']//short-definition
         return string-length($shrtdesc/p/__text)
       )
    }</short-desc>

    John


    On 04/09/12 10:15, Mailing Lists Mail wrote:

        Dear Xquery Adults,

        I am very new here.. I have some issues with getting my requirements
        working.. I guess, this should be very simple, but dont seem to
        get my
        heads around... THe following is what I want..

        I have loads of XMLs in the Data Store ( markLogic)

        I have to run a query to do the return the string lengths of certain
        elements from 100 XMLs./

        So my pseudo code will be :

        <results>
        For all XMLs in the Data store
        {

             <file filename = "filename of the current file ">

                    <desc> {length of desc at //xx/y/desc }
              <!--
             There could be more than one desc, in which case, i would
        like the
        sum of all the string lengths of each desc
        -->
           </desc>

        <short-desc>
        {
             string-length ( //xx//yy/short-desc)
        }

        </short-desc>

            </file>

        </results>


        My attempts:


           declare namespace dict =
        "http://www.lexis-nexis.com/__glp/dict
        <http://www.lexis-nexis.com/glp/dict>";
        for $ltnfiles in doc()
            let $NAME:= document-uri($ltnfiles)
        return (
           <ltn  >
            <name>
             {$NAME}
            </name>
             <short-desc>
             {string-length(string($__ltnfiles//subtopic[@id =
        'DEF']/short-definition/p/__text))}
             </short-desc>
           </ltn>
        )
        THe above works fine, if there is only one short-definition..
        FOr more
        than one shortdefiitions, it comes up with the error message
        obviously
        because the string does not allow 2 arguments, while the stuff
        passed
        into the function is a sequence...

        How do I do another loop inside the first one, for each
        short-defiitin
        ... SOmething like :

        for $ltnfiles in doc()
            let $NAME:= document-uri($ltnfiles)
        return (
           <ltn  >
            <name>
             {$NAME}
            </name>
             {
             for $shrtdesc in $ltnfiles//subtopic[@id =
        'DEF']//short-definition
             <short-desc>
             {
             string-length( $shrtdesc/p/text)
             }
             </short-desc>
              }
           </ltn>
        )
           DOEstNT WORK .. :( This wont give me what I want as What I
        want is a
        sum (string-lengths of all the short-def) .. But atleast i thought i
        would get something like

        <short-desc>100</short-desc>
        <short-desc>344</short-desc>

        ( I would have liked <short-desc>444</short-desc> )

        ANy help would be highly appreciated ..

        Thanks

        Dak.




    --
    John Snelson, Lead Engineer http://twitter.com/jpcs
    MarkLogic Corporation http://www.marklogic.com
    _________________________________________________
    [email protected] <mailto:[email protected]>
    http://x-query.com/mailman/__listinfo/talk
    <http://x-query.com/mailman/listinfo/talk>




--
John Snelson, Lead Engineer                    http://twitter.com/jpcs
MarkLogic Corporation                         http://www.marklogic.com
_______________________________________________
[email protected]
http://x-query.com/mailman/listinfo/talk

Reply via email to