I have a RESTXQ path/function that is supposed to retrieve a document fragment, restricted to an XPath expression that is given as a query parameter, i.e., as a string. The list of possible fragment XPaths has been calculated using path() by another function, and the user of a Web application may choose to retrieve any of the fragments.

An example for such a path would be '/Q{http://www.tei-c.org/ns/1.0}TEI[1]/Q{http://www.tei-c.org/ns/1.0}text[1]/Q{http://www.tei-c.org/ns/1.0}front[1]/Q{http://www.tei-c.org/ns/1.0}div[3]'.

Is there a better solution than the following, whose performance is of course quite poor (around 2 seconds execution time for the given documents)? I’m thinking of something like saxon:evaluate() or the XSLT 3 instruction xsl:evaluate.

Maybe I’m just unaware of the obvious solution based upon XQuery 3 or a BaseX extension.


  %rest:query-param("xpath", "{$xpath}")
  function page:get-frags(
    $db as xs:string,
    $doc as xs:string,
    $xpath as xs:string
    as item()*
    { for $doc in db:open($db, $doc)
      return $doc//*[path(.) eq $xpath] }
BaseX-Talk mailing list

Reply via email to