[x-query-talk] trying to optimize xpath expression

Enric Jaen enric at nmg.upc.es
Fri Aug 25 23:34:17 PDT 2006


(Sorry if you receive this mail duplicated)

Hi all,

I'd like to improve the performance of the following simple xpath expression, used inside this simple XQuery function:

declare function foo($input as node()) as item()+ {
 for $elem in $input//EEE/FFF
 return $elem
};


 I know that the input document has an structure like:

<AAA>
  <BBB>
    <CCC>
       <DDD>
          <EEE>
	     <FFF>
	  <EEE>
	     <FFF>
	  <EEE>
	     <FFF>
	  ...
      </DDD>
    </CCC>
  </BBB>
</AAA>

The names of  AAA, BBB, CCC, and DDD are unknown.


I have tried changing the expression $input//EEE/FFF to:

$input/*/*/*/*/EEE/FFF

which I think it should perform better because the lack of the '//' path  (please correct me if I am wrong), however the time consumed is very similar.

Similarly is happening with an XQuery function that performs:
$input//EEE[FFF=$FFF]/FFF

which I have changed it to:
$input/*/*/*/*/EEE/[FFF=$FFF]FFF

but the improvement is not that better.

I am using saxonB8.7.3, and I am calling the XQuery function from Java. I am trying with 1000 <EEE> elements. The function is compiled into an XQueryExpression before to invoke the UserFunction.call method. The input document is a DocumentWrapper object.

I wonder if there is something I can do to improve the performance of the Xpath expression?

Thanks in advance for any help.
-Enric




/**
 * Enric Jaen Villoldo
 * PhD student
 * http://nmg.upc.es/enric
 */





More information about the talk mailing list