Hi Danny,

Thanks for the reply.  Below is the code snippet that I have written for 
updating the document

let $version-info-uri := get:build-next-version-info-uri($document_data) 
(: This returns the uri of latest version available in database e.g. 
"/content/documents/sd/62211250/ ABCD13255DEFG-version-info-7.xml :)

let $version-info := fn:doc($version-info-uri)/pce:version-info
let $parent-standard-id as  xs:unsignedLong := $document_data/nmsp:parent-id (: 
This value is returning a unsigned value "132456666267788" :)
let $uri := set:build-document-uri$document_data)
 let $now := fn:current-dateTime()
 let $old-doc-exists as xs:boolean := fn:doc-available($uri)
  let $existing-date as xs:dateTime := 
(fn:doc($uri)/nmsp:document/nmsp:modified-date, $now)[1]
  let $new-date as xs:dateTime := (set:to-dateTime(($document_data 
/modifiedDate), $now)[1]
  let $existing-description as xs:string := fn:string(fn:doc($uri)/ 
nmsp:document /nmsp:document_description)
  let $new-description as xs:string := fn:string($new-document/ 
nmsp:document_description)

return
    (: insert the doc if there is no previous version or the new version has a 
newer modified date and the text of the description
       is different :)
    if (fn:not($old-doc-exists) or ($new-date > $existing-date and ($new-date 
!= $now))) then 
   (
     try{
       if ($old-doc-exists) then
        (
        if ($existing-description ne $new-description) then
          (

        xdmp:log(fn:concat("version-info before", $version-info)),
         
xdmp:node-insert-child($version-info,<nmsp:parent-id>{$parent-id}</nmsp:parent-id>),
        xdmp:log(fn:concat("version-info after", $version-info)), 
        xdmp:log(fn:concat("parent-document-id::",$parent-id)),

        )
       else( (: replacing the document directly without update :))
  }
catch($ex) {xdmp:log($ex)}
)
else()

The above code is not inserting the parent-id in the version-info document and 
it is not reporting any error at the time of insertion.


Thanks,
Sriram Gampa






-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of 
[email protected]
Sent: Friday, August 10, 2012 10:06 PM
To: [email protected]
Subject: General Digest, Vol 98, Issue 30

Send General mailing list submissions to
        [email protected]

To subscribe or unsubscribe via the World Wide Web, visit
        http://developer.marklogic.com/mailman/listinfo/general
or, via email, send a message with subject or body 'help' to
        [email protected]

You can reach the person managing the list at
        [email protected]

When replying, please edit your Subject line so it is more specific than "Re: 
Contents of General digest..."


Today's Topics:

   1. Re: Reg: Issue with xdmp:node-insert-child() (Danny Sokolsky)
   2. search:parse parenthetical grouping (Will Thompson)
   3. Re: search:parse parenthetical grouping (Michael Blakeley)
   4. Re: search:parse parenthetical grouping (Danny Sokolsky)


----------------------------------------------------------------------

Message: 1
Date: Fri, 10 Aug 2012 15:17:38 -0700
From: Danny Sokolsky <[email protected]>
Subject: Re: [MarkLogic Dev General] Reg: Issue with
        xdmp:node-insert-child()
To: MarkLogic Developer Discussion <[email protected]>
Message-ID:
        <c9924d15b04672479b089f7d55ffc1322264292...@exchg-be.marklogic.com>
Content-Type: text/plain; charset="us-ascii"

Hi Siriam,

Since you did not give the whole code or tell us the error you are seeing, it 
is hard to say.  For example, in the code you have, there is no $parent-id 
variable bound.  The basic idea you have works, as this code inserts a child 
node after the root node:


xdmp:document-insert("/testdevlist.xml", <version-info xmlns="http://namespace";>
                <id>ABCD13255DEFG</id>
                <additions/>
                <updates/>
                <deletes/>
  </version-info>
);

declare namespace pce="http://namespace";; let $version-info := 
fn:doc("/testdevlist.xml")/pce:version-info
return xdmp:node-insert-child($version-info, <foo/>);

doc("/testdevlist.xml")
=>
<?xml version="1.0" encoding="UTF-8"?>
<version-info xmlns="http://namespace";>
  <id>ABCD13255DEFG</id>
  <additions/>
  <updates/>
  <deletes/>
  <foo xmlns=""/>
</version-info>

So I maybe if you simplify your query and then post some code along with 
results and/or error messages, we can help figure it out.

-Danny

From: [email protected] 
[mailto:[email protected]] On Behalf Of Gampa, Sriram
Sent: Friday, August 10, 2012 2:22 PM
To: [email protected]
Subject: [MarkLogic Dev General] Reg: Issue with xdmp:node-insert-child()

Hi All,

I'm having an issue while inserting an element into a node using 
xdmp:node-insert-child().

My xml structure is as below

<version-info xmlns="http://namespace";>
                <id>ABCD13255DEFG</id>
                <additions/>
                <updates/>
                <deletes/>
  </version-info>

I'm trying to insert <parent-id> 13242682898790</parent-id> into the 
<version-info> as child using the xdmp:node-insert-child() as part of my code 
but the node is not getting inserted into the version-info xml. But when I 
tried to the same through CQ its working fine.


let $version-info-uri := "/content/documents/sd/62211250/ 
ABCD13255DEFG-version-info-7.xml"
let $log1 := xdmp:log(fn:concat("Update Note: Version Info URI", 
$version-info-uri)) let $version-info := 
fn:doc($version-info-uri)/pce:version-info
...
...
xdmp:log(fn:concat("version-info before", $version-info)), 
xdmp:node-insert-child($version-info,<nmsp:parent-id>{$parent-id}</nmsp:parent-id>),
xdmp:log(fn:concat("version-info after", $version-info)), 
xdmp:log(fn:concat("parent-document-id::",$parent-id)),

Could please let me know what is the issue with the above code.

Thanks,
Sriram Gampa

-------------- next part --------------
An HTML attachment was scrubbed...
URL: 
http://developer.marklogic.com/pipermail/general/attachments/20120810/bd6f3c11/attachment-0001.html
 

------------------------------

Message: 2
Date: Fri, 10 Aug 2012 23:15:03 +0000
From: Will Thompson <[email protected]>
Subject: [MarkLogic Dev General] search:parse parenthetical grouping
To: MarkLogic Developer Discussion <[email protected]>
Message-ID:
        <[email protected]>
Content-Type: text/plain; charset="us-ascii"

I need to prevent paren grouping from happening when the parens are part of a 
string - typically it's a reference-type number. I can't think of a situation 
where this would be desirable anyway:

search:parse('123.4(5)')
 => cts:and-query((cts:word-query("123.4(5"), cts:word-query(")")))

If I change the grammar to require a space on either or both sides of the 
paren, then it will always break some legitimate grouping case like "(hello AND 
world)".

Is there any way to control these grammar options a little further? It would be 
easy if you could just use regexes in the grammar options, i.e.:

<starter strength="30" apply="grouping" delimiter="(^|\s)/)">/(($|\s)</starter>

Thanks,

Will



------------------------------

Message: 3
Date: Fri, 10 Aug 2012 16:59:22 -0700
From: Michael Blakeley <[email protected]>
Subject: Re: [MarkLogic Dev General] search:parse parenthetical
        grouping
To: MarkLogic Developer Discussion <[email protected]>
Message-ID: <[email protected]>
Content-Type: text/plain; charset=us-ascii

That does seem undesirable. I was going to refer you to 
https://github.com/mblakele/xqysp but it doesn't do much better - unless you 
can get your users to quote the number?

import module namespace qe="com.blakeley.xqysp.query-eval"
 at "query-eval.xqy";

qe:parse('123.4(5)'),
qe:parse('"123.4(5)"')
=>
cts:and-query((cts:word-query("123", ("lang=en"), 1), cts:word-query("4", 
("lang=en"), 1), cts:word-query("5", ("lang=en"), 1)), ()) 
cts:word-query("123.4(5)", ("lang=en"), 1)

You can pass that output to search:resolve(), with pretty much the same 
semantics as search:search.

-- Mike

On 10 Aug 2012, at 16:15 , Will Thompson wrote:

> I need to prevent paren grouping from happening when the parens are part of a 
> string - typically it's a reference-type number. I can't think of a situation 
> where this would be desirable anyway:
> 
> search:parse('123.4(5)')
> => cts:and-query((cts:word-query("123.4(5"), cts:word-query(")")))
> 
> If I change the grammar to require a space on either or both sides of the 
> paren, then it will always break some legitimate grouping case like "(hello 
> AND world)".
> 
> Is there any way to control these grammar options a little further? It would 
> be easy if you could just use regexes in the grammar options, i.e.:
> 
> <starter strength="30" apply="grouping" 
> delimiter="(^|\s)/)">/(($|\s)</starter>
> 
> Thanks,
> 
> Will
> 
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
> 



------------------------------

Message: 4
Date: Fri, 10 Aug 2012 19:05:42 -0700
From: Danny Sokolsky <[email protected]>
Subject: Re: [MarkLogic Dev General] search:parse parenthetical
        grouping
To: MarkLogic Developer Discussion <[email protected]>
Message-ID:
        <c9924d15b04672479b089f7d55ffc1322264292...@exchg-be.marklogic.com>
Content-Type: text/plain; charset="us-ascii"

It probably won't work for you, but one idea is to change the starter for 
grouping to have different delimiting chars.  For example, 2 parens:

<starter strength="30" apply="grouping" delimiter="))">((</starter>

It might be better than a space....

-Danny

-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of Michael Blakeley
Sent: Friday, August 10, 2012 4:59 PM
To: MarkLogic Developer Discussion
Subject: Re: [MarkLogic Dev General] search:parse parenthetical grouping

That does seem undesirable. I was going to refer you to 
https://github.com/mblakele/xqysp but it doesn't do much better - unless you 
can get your users to quote the number?

import module namespace qe="com.blakeley.xqysp.query-eval"
 at "query-eval.xqy";

qe:parse('123.4(5)'),
qe:parse('"123.4(5)"')
=>
cts:and-query((cts:word-query("123", ("lang=en"), 1), cts:word-query("4", 
("lang=en"), 1), cts:word-query("5", ("lang=en"), 1)), ()) 
cts:word-query("123.4(5)", ("lang=en"), 1)

You can pass that output to search:resolve(), with pretty much the same 
semantics as search:search.

-- Mike

On 10 Aug 2012, at 16:15 , Will Thompson wrote:

> I need to prevent paren grouping from happening when the parens are part of a 
> string - typically it's a reference-type number. I can't think of a situation 
> where this would be desirable anyway:
> 
> search:parse('123.4(5)')
> => cts:and-query((cts:word-query("123.4(5"), cts:word-query(")")))
> 
> If I change the grammar to require a space on either or both sides of the 
> paren, then it will always break some legitimate grouping case like "(hello 
> AND world)".
> 
> Is there any way to control these grammar options a little further? It would 
> be easy if you could just use regexes in the grammar options, i.e.:
> 
> <starter strength="30" apply="grouping" 
> delimiter="(^|\s)/)">/(($|\s)</starter>
> 
> Thanks,
> 
> Will
> 
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
> 

_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general


------------------------------

_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general


End of General Digest, Vol 98, Issue 30
***************************************
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to