Hi Gary,

I think the problem is that search:resolve does not take a cts:query, but takes 
the XML representation of a cts:query-- schema-element(cts:query).  So wrap it 
in an xml constructor and take the contents of it:

search:resolve(<foo>{$query}</foo>/*, $ searchOptions, $start, $pageLength)

-Danny



From: [email protected] 
[mailto:[email protected]] On Behalf Of Adam Patterson
Sent: Wednesday, April 14, 2010 6:53 AM
To: General Mark Logic Developer Discussion
Subject: [MarkLogic Dev General] RE: Noobie cts:element-query question

Thanks Danny,

I still cannot construct my element query, but for a different reason now. I've 
tried to include the full query in my example this time for clarity:

                $engQuery := search:parse("pa", <options 
xmlns="http://marklogic.com/appservices/search";>
                                                                                
                <term apply="term">
                                                                                
                                <empty apply="all-results"/>
                                                                                
                                <term-option>lang=en</term-option>
                                                                                
                </term>
                                                                                
   </options>),
                $deQuery := search:parse("pa", <options 
xmlns="http://marklogic.com/appservices/search";>
                                                                                
                <term apply="term">
                                                                                
                                <empty apply="all-results"/>
                                                                                
                                <term-option>lang=de</term-option>
                                                                                
                </term>
                                                                                
   </options>),
                $query := 
cts:element-query(fn:QName("http://www.tei-c.org/ns/1.0";, "div"), 
cts:or-query(($engQuery, $deQuery))),
                $searchOptions :=           <options 
xmlns="http://marklogic.com/appservices/search";>
                                                                                
<debug>{fn:true()}</debug>
                                                                                
<return-query>{fn:true()}</return-query>
                                                                                
                
<additional-query>{cts:document-query(c:DB_URI())}</additional-query>
                                                                </options>
                $results := search:resolve($query, $ searchOptions, $start, 
$pageLength)

The output is a 500 Internal Server Error. The error message is: 
"XDMP-NONMIXEDCOMPLEXCONT: fn:data(<cts:word-query qtextref="cts:text" 
xmlns:cts="http://marklogic.com/cts";><cts:text 
xml:lang="en">pa</cts:text></cts:word-query>) -- Node has complex type with 
non-mixed complex content".

It looks like the fn:data function does not like the cts:word-query returned by 
search:parse with the language term-option set to "en"...this confuses me. 
Incidentally, the cts:or-query works fine if I do not try to constrain it to 
the "div" element with the cts_element-query. Any thoughts are appreciated.

Cheers,
Adam

From: [email protected] 
[mailto:[email protected]] On Behalf Of Danny Sokolsky
Sent: April 13, 2010 5:12 PM
To: General Mark Logic Developer Discussion
Subject: [MarkLogic Dev General] RE: Noobie cts:element-query question

Hi Adam,

It is telling you that the XML for your cts:query is not correct.

Note that you were not building a cts:element-query, but were building an XML 
representation of a cts:element-query.

You might try constructing this query as a cts:query like this:

xquery version "1.0-ml";

let $engQuery := "dog"
let $deQuery := "cat"
return
cts:element-query(
       fn:QName("http://www.tei-c.org/ns/1.0";, "div"),
       cts:or-query(($engQuery, $deQuery))
)

and if you need the XML representation of a cts:query then wrap the cts:query 
in an element and take the contents of that element:

xquery version "1.0-ml";

let $engQuery := "dog"
let $deQuery := "cat"
return
<foo>{cts:element-query(
       fn:QName("http://www.tei-c.org/ns/1.0";, "div"),
       cts:or-query(($engQuery, $deQuery))
)}</foo>/*

-Danny

From: [email protected] 
[mailto:[email protected]] On Behalf Of Adam Patterson
Sent: Tuesday, April 13, 2010 2:03 PM
To: [email protected]
Subject: [MarkLogic Dev General] Noobie cts:element-query question

I apologize in advance for this question as I'm sure it's very straightforward, 
but it does have me stumped. I am building a cts:element-query as follows:

<cts:element-query>
{
                fn:QName("http://www.tei-c.org/ns/1.0";, "div"),
                <cts:or-query>{$engQuery, $deQuery}</cts:or-query>
}
</cts:element-query>

MarkLogic is telling me that I have the following error:

"XDMP-QUERYTEXT: cts:query(<cts:and-query 
xmlns:cts="http://marklogic.com/cts";><cts:element-query 
xmlns:tei="http://www.tei-c.org/ns/1.0";>tei:d...</cts:and-query>) -- Query 
element /cts:and-query/cts:element-query contains misplaced text"

Please let me know (1) What this error means, and (2) What I'm doing wrong to 
cause it.

Thank you,

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

Reply via email to