Thanks, both! Sorry to bother you with such an odd edge case. I thought I was making it easier by just defining it in the same module while testing.
On Wed, Aug 10, 2011 at 4:32 PM, Colleen Whitney <[email protected]> wrote: > You do need a library module to use extensions in the search API. > > ________________________________________ > From: [email protected] > [[email protected]] On Behalf Of Michael Blakeley > [[email protected]] > Sent: Wednesday, August 10, 2011 1:33 PM > To: General MarkLogic Developer Discussion > Subject: Re: [MarkLogic Dev General] Calling a custom function using > search:search in cq > > I still don't know the search API as well as I might. But I believe that the > first problem is that functions are described by a local-name and a > namespace. You've only supplied the local-name "custom-snippet" and not the > namespace "http://www.w3.org/2005/xquery-local-functions". I wasn't sure how > to do this, so I checked > http://developer.marklogic.com/pubs/4.2/books/search-dev-guide.pdf and found > an example in 2.1.7 "Search Customization Via Options and Extensions". > > <options xmlns="http://marklogic.com/appservices/search"> > <transform-results apply="custom-snippet" > ns="http://www.w3.org/2005/xquery-local-functions"/> > </options> > > This throws a new error: > > SEARCH-BADEXTENSION: (err:FOER0000) Extensions must define @apply, @ns and > @at > > We're making progress, but @at seems to be the library module location (eg, > '/lib.xqy'). So it looks like you have to put the function into a library > module. The function can't be defined in the cq textarea, because that area > needs to define a main module. Even if cq could define a library module, it > wouldn't have a location for transform-results to refer to. > > -- Mike > > On 10 Aug 2011, at 10:05 , Mattio Valentino wrote: > >> I was trying to test adding my own search snippeting function using >> the search:search API but ran into some trouble trying to use it in >> cq. I was trying to keep the custom function in the same main module >> as the search itself. I keep getting the error: >> >> [1.0-ml] SEARCH-APPLYUNDEFINED: (err:FOER0000) Value of @apply >> undefined: custom-snippet >> >> Is there a trick to make this work in the same module in cq or does >> the custom function have to be in a separate file with @ns and @at >> defined? >> >> The query is below. >> >> Thanks! >> >> xquery version "1.0-ml"; >> import module namespace >> search="http://marklogic.com/appservices/search" at >> "/MarkLogic/appservices/search/search.xqy"; >> >> declare function local:custom-snippet( >> $result as node(), >> $ctsquery as schema-element(cts:query), >> $options as element(search:transform-results)? >> ) as element(search:snippet) >> { >> (:search:snippet($result, $ctsquery, $options):) >> <search:snippet/> >> }; >> >> search:search("blue", >> <options xmlns="http://marklogic.com/appservices/search"> >> (: I've tried multiple variations of this node :) >> <transform-results apply="custom-snippet"/> >> </options> >> ) >> _______________________________________________ >> 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 > _______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
