I think my example wasn't sufficient to explain the problem fully.
Below is some code that does a better job of showing what I'm doing
and what my problem is.
(: create a test document :)
let $testDoc :=
<mydoc>
<properties>
<docname>cars</docname>
</properties>
<data>
<carList>
<car color="green">M3</car>
<car color="blue">beetle</car>
<car color="yellow">fiat</car>
<car color="red">911</car>
</carList>
</data>
</mydoc>
return xdmp:document-insert("mytest.xml",$testDoc,(),("test"))
(: cts search for docs with a docname of "cars" and containing a blue
M3 in it's car list :)
(: This query returns the document because there is a car with a color
of blue and a car with a name of M3. :)
(: This is not the behavior I'm looking for. I want it to fail because
the M3 is not blue. :)
let $query := cts:and-query((
cts:element-query(xs:QName("properties"),cts:element-value-query(xs:QName("docname"),"cars")),
cts:element-query(xs:QName("carList"),
cts:and-query((
cts:element-attribute-value-query(xs:QName("car"),QName("","color"),"blue"),
cts:element-value-query(xs:QName("car"),"M3")
))
)
))
return cts:search(collection("test")/mydoc,$query)
On Dec 6, 2007 1:01 PM, Danny Sokolsky <[EMAIL PROTECTED]> wrote:
> Thanks Mike, you are absolutely correct. Sorry 'bout that...
>
> So here are a few ways you might do this:
>
> 1) with XPath and cts:contains
>
> //car[cts:contains(., cts:and-query((
> cts:element-value-query(xs:QName("car"), "m3"),
> cts:element-attribute-value-query(xs:QName("car"),
> xs:QName("color"),
> "green"))))]
>
> 2) with cts:search
>
> cts:search(/carList/car,
> cts:and-query((
> cts:element-value-query(xs:QName("car"), "m3"),
> cts:element-attribute-value-query(xs:QName("car"),xs:QName("color"),
> "green")
> ))
> )
>
> Does that get you what you are looking for?
>
> -Danny
>
> -----Original Message-----
> From: [EMAIL PROTECTED]
>
> [mailto:[EMAIL PROTECTED] On Behalf Of Mike
> Sokolov
> Sent: Thursday, December 06, 2007 9:42 AM
> To: General Mark Logic Developer Discussion
> Subject: Re: [MarkLogic Dev General] simple cts:search question
>
> There might be something about the scope of the query (first arg to
> cts:search), but in my experience cts:element-query doesn't include
> itself in its scope, only its descendants, so I don't think the change
> you are suggesting will solve his problem? I put in a change request to
>
> correct that: it seems like the behavior everyone expects.
>
> -Mike
>
> Danny Sokolsky wrote:
> > I think the problem is that the cts:element-query is on the "carList"
> > element, and it should be on the "car" element.
> >
> > -Danny
> >
> > -----Original Message-----
> > From: [EMAIL PROTECTED]
> > [mailto:[EMAIL PROTECTED] On Behalf Of Jacob
> > Meushaw
> > Sent: Thursday, December 06, 2007 8:58 AM
> > To: [email protected]
> > Subject: [MarkLogic Dev General] simple cts:search question
> >
> > Hello All,
> >
> > I'm stumped on what must be a very simple cts:search question.
> >
> > I'm trying to identify documents in my database using cts:search which
> > match a set of parameters. The case I'm stumped on is where I want to
> > match on both the value of the element as well as one of it's
> > attributes.
> >
> > For example a document might contain:
> >
> > <carList>
> > <car color="green">M3</car>
> > <car color="blue">beetle</car>
> > <car color="yellow">fiat</car>
> > <car color="red">911</car>
> > </carList>
> >
> > I can't seem to figure out how to construct a cts query that matches
> > both the attribute value and the element value of the same element:
> >
> > cts:element-query(
> > xs:QName("carList"),
> > cts:and-query((
> >
> >
> cts:element-attribute-value-query(xs:QName("car"),QName("","color"),"blu
> > e"),
> > cts:element-value-query(xs:QName("car"),"M3")
> > ))
> > )
> >
> > This incorrectly matches the example. The M3 is not blue.
> >
> > Hopefully this makes sense.
> >
> > Any ideas?
> >
> > Thanks,
> > Jake
> > _______________________________________________
> > General mailing list
> > [email protected]
> > http://xqzone.com/mailman/listinfo/general
> > _______________________________________________
> > General mailing list
> > [email protected]
> > http://xqzone.com/mailman/listinfo/general
> >
> _______________________________________________
> General mailing list
> [email protected]
> http://xqzone.com/mailman/listinfo/general
> _______________________________________________
> General mailing list
> [email protected]
> http://xqzone.com/mailman/listinfo/general
>
_______________________________________________
General mailing list
[email protected]
http://xqzone.com/mailman/listinfo/general