[MarkLogic Dev General] How to get accurate fragment counts using xdmp:estimate when the QName is a variable
McBeath, Darin W (ELS-STL)
D.McBeath at elsevier.com
Wed Sep 15 08:02:54 PDT 2010
Thanks Mary. That was pretty dumb on my part. But, I still do have a question based on my more complex example.
Basically, I want to get fragment counts where a fragment contains a given element, attribute, and value for that attribute. I was thinking that I could do XPath such as below wrapped in a xdmp:estimate.
xdmp:estimate(//*[node-name(.)=$eQName and string(./@*[node-name(.) = $aQName]) = $value])
But, this always seems to return me the number of fragments in the DB. I did verify that
//*[node-name(.)=$eQName and string(./@*[node-name(.) = $aQName]) = $value]
Only returns the nodes which I want ... so, unlike last time it would appear the query is at least written correctly. Perhaps, what I'm trying to do with XPath and an accurate estimate is not currently possible. I believe that I have the necessary indexes enabled that should support an accurate estmate.
I did verify that something explicit such as the following returns the correct result:
xdmp:estimate(//skos:ConceptScheme[@rdf:about=$value])
This makes me believe that my indexes are configured correctly.
I will likely drop back and try a cts:element-attribute-value-query or xdmp:eval the XPath expression (such as above) ... but, I'm curious as to whether I'm still doing something wrong above or whether this is really not possible. I also can't really create range indexes on the element/attribute as I'm trying to make this a fairly generic solution whereby one could query on any element/attribute.
Thanks.
Darin.
-----Original Message-----
From: Mary Holstege [mailto:mary.holstege at marklogic.com]
Sent: Tuesday, September 14, 2010 4:22 PM
To: General Mark Logic Developer Discussion; McBeath, Darin W (ELS-STL)
Subject: Re: [MarkLogic Dev General] How to get accurate fragment counts using xdmp:estimate when the QName is a variable
On Tue, 14 Sep 2010 13:05:58 -0700, McBeath, Darin W (ELS-STL)
<D.McBeath at elsevier.com> wrote:
...
> The following query returns me the value I would expect.
>
> xdmp:estimate(//skos:ConceptScheme)
>
> However, if I have a variable $eQName which is essentially the QName for
> skos:ConceptScheme
>
> xdmp:estimate(//$eQName)
>
> returns me every fragment in the DB.
I think the problem is that your query isn't doing what you
think it is. It equivalent to //"skos:ConceptScheme",
the value of which is the string "skos:ConceptScheme" repeated
for every element in the database. So the estimate is
correct, but it isn't what you want.
The only way to get the result you wany from the path is
something like //*[fn:node-name(.)=$eQName].
//Mary
More information about the General
mailing list