Seems like a race condition to me, Geert. Maybe xdmp:lock-release() and
xdmp:lock-acquire can help with that though.
Eric
Geert Josten wrote:
Hi Eric,
If you are willing to add identifying attributes anyway, why not use simple
integer based values, allowing use of expressions like max(//@id) + 1 to
calculate the next id value? Or if you need to calculate multiple values in one
pass: max(//@id) + count(preceding-sibling::*) + 1..
Kind regards,
Geert
Drs. G.P.H. Josten
Consultant
http://www.daidalos.nl/
Daidalos BV
Source of Innovation
Hoekeindsehof 1-4
2665 JZ Bleiswijk
Tel.: +31 (0) 10 850 1200
Fax: +31 (0) 10 850 1199
http://www.daidalos.nl/
KvK 27164984
De informatie - verzonden in of met dit emailbericht - is afkomstig van
Daidalos BV en is uitsluitend bestemd voor de geadresseerde. Indien u dit
bericht onbedoeld hebt ontvangen, verzoeken wij u het te verwijderen. Aan dit
bericht kunnen geen rechten worden ontleend.
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of
Eric Palmitesta
Sent: dinsdag 14 oktober 2008 16:48
To: General Mark Logic Developer Discussion
Subject: Re: [MarkLogic Dev General] xpath string construction
Hi Wayne,
Yes, I've been looking into generating unique identifiers to
ease such things as deletion. I'm still new to the
'document' model, still figuring out what's portable from my
'relational' model experience.
Is xdmp:request() guaranteed to be unique? If so, that's a
candidate to use as a unique identifier when inserting a new node.
If there's a way to synchronize a particular block of code
across all sessions across all e-nodes, a hash of
xdmp:request-timestamp() might also work.
I'm sure some mailing-list-folk have needed to generate an
identifier which is guaranteed unique, anyone have
suggestions / advice?
Much thanks,
Eric
Wayne Feick wrote:
Hi Eric,
In 4.0, you can use xdmp:unpath() to do this
http://developer.marklogic.com/pubs/4.0/apidocs/Extension.html#xdmp:un
path
However, in the example you've given I'd recommend changing the
approach to use some sort of an id attribute on person (since there
are duplicate
names) rather than a positional XPath expression. With your current
approach, two users could each intend to delete "bob" at
index 3 when
in fact the second attempt would actually delete "ryan".
As a rule, exposing xpath expressions to a web app is
dangerous since
there is no guarantee they still refer to the same node from one
transaction to the next.
Wayne.
On Fri, 2008-10-10 at 14:43 -0400, Eric Palmitesta wrote:
Is there a specific reason why one can't construct an
xpath out of a string?
For example,
let $media := 'book' (: or 'journal', or 'article' :) return
doc('/path/to/file.xml')/path/to/$media/title
Another use case, I want to display a list of items, and offer a
'delete' link for each item.
lets say /people.xml contained the following:
<people>
<person name="bob" />
<person name="jim" />
<person name="bob" />
<person name="ryan" />
</people>
So I'd display something like:
for $person in doc('/people.xml')/people/person return
<div>
$person/@name
<a href="delete.xqy?path={ xdmp:path($person) }>delete</a>
</div>
This will give me nice delete links like
"delete.xqy?path=/people/person[1]", but in the supposed
delete.xqy,
I'd want to do something similar to:
let $file := '/people.xml'
let $person := xdmp:get-request-field('path') return
xdmp:node-delete(doc($file)/$person)
I can't, of course, the doc call will be fine but I can't
construct
xpath with a string. And the node-delete (and any other
node-manipulation function) requires actual nodes, not strings.
I end up having to write eval-based utility functions:
define function util:remove-element($uri as xs:string, $xpath as
xs:string) {
let $node := concat("doc('", $uri, "')", $xpath)
return
xdmp:eval(concat("xdmp:node-delete(", $node, ")")) }
Please tell me I'm all wrong and there's a better way.
Cheers,
Eric
_______________________________________________
General mailing list
General@developer.marklogic.com
<mailto:General@developer.marklogic.com>
http://xqzone.com/mailman/listinfo/general
----------------------------------------------------------------------
--
_______________________________________________
General mailing list
General@developer.marklogic.com
http://xqzone.com/mailman/listinfo/general
_______________________________________________
General mailing list
General@developer.marklogic.com
http://xqzone.com/mailman/listinfo/general
_______________________________________________
General mailing list
General@developer.marklogic.com
http://xqzone.com/mailman/listinfo/general
_______________________________________________
General mailing list
General@developer.marklogic.com
http://xqzone.com/mailman/listinfo/general