Hi Geert,

I wrote the facet code myself without using app builder. I'm thinking the 
problem lies in the format-browse-by-collection function (the last function 
included below), but I'm not sure. I'll try to clarify by including some code.

Thanks for taking a look.

Facet set-up is like so:

<options xmlns="http://marklogic.com/appservices/search";>
    <additional-query>{cts:collection-query("MODS")}</additional-query>        
<constraint name="collection">
            <word type="xs:string" 
collation="http://marklogic.com/collation/en/S1/AS/T0020";>
                <path-index 
xmlns:mods="http://www.loc.gov/mods/v3";>/mods:modsCollection/mods:mods/mods:titleInfo[@type='uniform']/mods:title</path-index>
            </word>
         </constraint>
      <operator name="sort">
        <state name="relevance">
          <sort-order>
            <score/>
          </sort-order>
        </state>
        <state name="collection">
            <sort-order xmlns="http://marklogic.com/appservices/search"; 
type="xs:string">
                {m:get-sort-direction($direction)}
                <range type="xs:string" 
collation="http://marklogic.com/collation/en/S1/AS/T0020";>
                    <path-index 
xmlns:mods="http://www.loc.gov/mods/v3";>/mods:modsCollection/mods:mods/mods:titleInfo[@type='uniform']/mods:title</path-index>
                </range>
            </sort-order>
        </state>
      </operator>
    </options>

(:~
 : Retrieves all collection titles from the database. Returns results in a 
simple
 : ad-hoc XML format (rather than the raw search results).
 :)
declare function m:get-collections()
as element(search:response)
{
  let $options :=
    <options xmlns="http://marklogic.com/appservices/search";>
        <return-results>false</return-results>
        <return-facets>true</return-facets>
        <additional-query>{cts:collection-query("MODS")}</additional-query>
        <constraint name="collection" 
xmlns="http://marklogic.com/appservices/search";>
          <range type="xs:string" facet="true" 
collation="http://marklogic.com/collation/en/S1/AS/T0020";>
            <path-index 
xmlns:mods="http://www.loc.gov/mods/v3";>/mods:modsCollection/mods:mods/mods:titleInfo[@type='uniform']/mods:title</path-index>
          </range>
         </constraint>
    </options>
  let $qtext := ""
  return search:search($qtext, $options)
};

I have the formatting set-up in a separate module like so:

(: Returns an HTML fragment for the main content of the browse-by-collection 
page. :)
declare function browse:get-collections($params as map:map)
as element(div)*
{
    let $response := m:get-collections()
    return browse:format-browse-by-collection($response)
};

(:~ Formats collection titles for browsing purposes. :)
declare function browse:format-browse-by-collection($response as 
element(search:response))
as element(div)*
{
    for $facet-value at $i in $response/search:facet/search:facet-value
    let $collection := fn:normalize-space(fn:string($facet-value))
    let $count := $facet-value/@count
    let $label := if ($count = 1) then " item" else " items"
    let $constraint := if ($c:by = "collection") then "collection" else ()
    let $qtext := fn:concat($constraint, ':"', $collection, '" sort:', $c:sort)
    let $href := fn:concat($config:base-url, "?browse=", $c:browse, 
"&amp;qtext=", xdmp:url-encode($qtext), "&amp;page-length=", $c:page-length)
    return
       <div class="{if ($i mod 2 = 0) then "even-row" else "odd-row"}">
         <ul class="browse-collections-list">
            <li><a href="{$href}" class="name-entries">{$collection}</a> 
({fn:concat(ptsl-util:format-number($count), $label)})</li>
         </ul>
       </div>
};



On Dec 2, 2013, at 4:44 PM, Geert Josten 
<[email protected]<mailto:[email protected]>>
 wrote:

Hi Maggie,

Are you running an app created with app builder, or did you write facet code of 
your own? In either case, could you give a bit more detail about what you are 
trying or using? A bit of code might help..

Kind regards,
Geert

Van: 
[email protected]<mailto:[email protected]>ogic.com<http://ogic.com>
 
[mailto:[email protected]<mailto:[email protected]>]
 Namens Capewell, Margarete
Verzonden: maandag 2 december 2013 22:33
Aan: MarkLogic Developer Discussion
Onderwerp: [MarkLogic Dev General] XPTY0004 $right as element() Error

Hello,

I have a group of facets set-up using search:search, but when I click on the 
links to get the constrained results I receive the following error:

XDMP-AS: (err:XPTY0004) $right as element() -- Invalid coercion: () as element()
in /MarkLogic/appservices/search/search-impl.xqy, at 692:13,
in impl:joiner-constraint(map:map(<map:map 
xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:map="http://marklogic.com/xdmp/map";><map:entry key="toknum"><map:value 
xsi:type="xs:unsignedLong">11...</map:map>...XDMP-XMLFUNC: (err:XQTY0105) 
Functions cannot be used in the content of an element constructor...), 
<cts:word-query qtextref="cts:text" 
xmlns:cts="http://marklogic.com/cts";><cts:text>sort</cts:text><cts:option>case-insensitive</cts:optio...</cts:word-query>)
 [1.0-ml]
$ps = map:map(<map:map xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:map="http://marklogic.com/xdmp/map";><map:entry key="toknum"><map:value 
xsi:type="xs:unsignedLong">11...</map:map>...XDMP-XMLFUNC: (err:XQTY0105) 
Functions cannot be used in the content of an element constructor...)
$left = <cts:word-query qtextref="cts:text" 
xmlns:cts="http://marklogic.com/cts";><cts:text>sort</cts:text><cts:option>case-insensitive</cts:optio...</cts:word-query>
$left-str = "sort"
$opts = <options 
xmlns="http://marklogic.com/appservices/search";><additional-query><cts:collection-query
 xmlns:cts="http://marklo...</options>
$matched-constraint = <operator name="sort" 
xmlns="http://marklogic.com/appservices/search";><state 
name="relevance"><sort-order><score/></sort-order></state...</operator>
$is-bucketed = ()
$symbol = <joiner strength="50" apply="constraint" 
xmlns="http://marklogic.com/appservices/search"; 
xmlns:searchdev="http://marklogic.com/appservices/search/searchdev";>:</joiner>
$compare = "EQ"
$_ = ()
$right = ()
$bucket-name = ""
$qtext-rhs = ""
$qtext = "sort:"
in /MarkLogic/appservices/search/search-impl.xqy, at 503:50,

...and it just goes on from there. I'm guessing the $right variable has 
something to do with the search results, but I'm not sure what I need to do to 
fix the issue. Has anyone dealt with a similar error? Any ideas on how to fix 
it?

Thank you,
Maggie








_______________________________________________
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

Reply via email to