Yes, there should be no difference.. Kind regards, Geert
Van: [email protected] [mailto:[email protected]] Namens Evan Lenz Verzonden: woensdag 11 mei 2011 21:12 Aan: General MarkLogic Developer Discussion Onderwerp: Re: [MarkLogic Dev General] How To Get The "Content" of An Index? It's not necessary to add the "position() = " verbiage, since a numeric predicate is identified by the type of the expression, not by any syntactic constraint: http://www.w3.org/TR/xquery/#dt-numeric-predicate So [$x + 1] is no different than [position() eq ($x + 1)] Evan Lenz Software Developer, Community MarkLogic Corporation Phone +1 360 297 0087 email [email protected]<mailto:[email protected]> web developer.marklogic.com<http://developer.marklogic.com/> From: Geert Josten <[email protected]<mailto:[email protected]>> Reply-To: General MarkLogic Developer Discussion <[email protected]<mailto:[email protected]>> Date: Tue, 10 May 2011 22:18:55 -0700 To: General MarkLogic Developer Discussion <[email protected]<mailto:[email protected]>> Subject: Re: [MarkLogic Dev General] How To Get The "Content" of An Index? Randy, The short-hand for positional predicates don't always work when it contains a formula. You could write 'ts:Value[position() = ($x + 1)]' instead of 'ts:Value[$x + 1]'. But Damon is right; using following or following-sibling axes makes much more sense. And yes, telling us the bigger picture helps us to give you more accurate advice. It also helps others facing similar problems to find an answer more easily in the mailing list archives. ;-) Kind regards, Geert Van: [email protected]<mailto:[email protected]> [mailto:[email protected]] Namens Damon Feldman Verzonden: dinsdag 10 mei 2011 23:58 Aan: General MarkLogic Developer Discussion Onderwerp: Re: [MarkLogic Dev General] How To Get The "Content" of An Index? Randy, I'm sure there's a way to accomplish what you're doing, but I'm not sure if indexes are the way to go. There are preceding-sibling and following-sibling axes available in XPath, so you could put all the "interesting" nodes in a document and use that to find prev/next. What's the bigger picture of what you're trying to accomplish? Damon From: [email protected]<mailto:[email protected]> [mailto:[email protected]] On Behalf Of Randy Smith Sent: Tuesday, May 10, 2011 2:33 PM To: General MarkLogic Developer Discussion Subject: Re: [MarkLogic Dev General] How To Get The "Content" of An Index? Geert, Thanks for the help. I believe you when you say that "index-of" may be slow. However, I am trying to get this to work (and satisfy my mind how it pull out the content at an index (like an array index):-). The code uses the search API plus I think I didn't explain the situation very well and I also left out some of the code. I tried the following based on you response but it still did not work. Any pointers?: Up above in the code is this code : declare variable $results := let $q := xdmp:get-request-field("q", "sort:newest") let $q := local:add-sort($q) return search:search($q, $options, xs:unsignedLong(xdmp:get-request-field("start","1"))); . . . declare function local:search-results() let $items := for $song in $results/search:result let $uri := fn:data($song/@uri) let $song-doc := fn:doc($uri) return {if {$song-doc//ts:Value[.='cat']) then let $x := fn:index-of($song-doc//ts:Value,'cat') for $gencontent at $index in $song-doc//ts:Value return note: I thought the following line would work but it didn't <div class="abc"> Content of "Value" at "cat" + 1 = {$song-doc//ts:Value[$x + 1]}</div> else ()} ... any help appreciated!! randy On 5/10/2011 7:05 AM, Geert Josten wrote: Hi Randy, Using index-of might not perform well. I would recommend using the for each at $pos construction instead: for $song at $index in $searchresults ... You can use $searchresults[$index + 1] to get access to the next searchresult (if there is any) Kind regards, Geert Van: [email protected]<mailto:[email protected]> [mailto:[email protected]] Namens Randy Smith Verzonden: maandag 9 mei 2011 22:47 Aan: [email protected]<mailto:[email protected]> Onderwerp: [MarkLogic Dev General] How To Get The "Content" of An Index? Anyone, I think this is a simple question: If I am using the MarkLogic search API like like with the Top-Songs app we developed in class e.g.: let $items := for $song in $results/search:result let $song-doc := fn:doc($uri) return {if {$song-doc//ts:Value[.='cat']) then <div class="abc"> Get the index of "Value" that has "cat" in it ==> {fn:index-of($song-doc//ts:Value/text(), 'cat')}</div> else ()} ... The above works fine and gives me back the index for "cat" that is one of the many content values in element "Value" (the element "Value" appears as many as 1500 times in some documents). But what I need is the content of the index+1 position. I already know "cat" is in the returned index position but I need to print out the content of the index + 1 position (or in some cases index+2) I'm sure there is a nice way to reference the $song-doc//ts:Value[.='cat'] content by using something like (but I know this does not work) $song-doc//ts:Value[index+1] to get the content printed out. I know to look for "cat" but I do not know what is in the "cat" position + 1. Any help appreciated! :'( _______________________________________________ General mailing list [email protected]<mailto:[email protected]> http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
