RE: Compare string to node path?

In standard XPath and XQuery, you can't evaluate an XPath expression held as
a string: all expressions, including path expressions, have to be known at
compile time.

Some products have an extension function (see dyn:evaluate() at
www.exslt.org) to evaluate an expression constructed dynamically or read
from a source document. These tend to differ in the way they handle context,
e.g. namespaces and access to variables. Saxon has such an extension,
saxon:evaluate(), but it's currently available only in XSLT and not in
XQuery - this will change in the next release.

If the "expression" is limited to a single element name (a common use case
is specifying sort keys dynamically) then you can often get by with the
expression *[name()=$param] - but again there can be namespace
complications.

Michael Kay

 

> -----Original Message-----
> From: www-ql-request@w3.org [mailto:www-ql-request@w3.org] On 
> Behalf Of Andreas Jacobsen
> Sent: 25 August 2004 08:56
> To: www-ql@w3.org
> Subject: Compare string to node path?
> 
> 
> Hi everyone
> 
> I'm currently working on a master thesis which evolves around 
> using XQuery  
> as a multidatabase/multisource language. In this context I'm 
> try solve the  
> use of synonym element/attribute names in different 
> documents. This is  
> thought done by storing the paths to the synonymous 
> elements/attributes in  
> a xml-documents ("MDBDeclaration.xml"), and accessing these 
> by a function  
> (ub:mdb).There a two other xml documents that contains the data I'm  
> actually trying to return to the user. These are specified 
> together with  
> MDBDeclaration.xml in museumCollection.xml and accessed with 
> ease by Saxon)
> 
> So far so good, the paths are returned as they should.
> 
> I run in to trouble when I try to access the 
> elements/attributes in the  
> paths just extracted by the look-up function.
> 
> declare namespace ub = "http://www.uib.no";
> declare function ub:mdb($globalVariPath)
> 	{
> 	for $i in  
> doc("MDBDeclaration.xml")//member[refsGlobal=$globalVariPath]/path
> 	return $i
> 	};
> 
> let $globalVariPath := "zip"
> for $res in collection("museumCollection.xml")
> 
> where ub:mdb($globalVariPath) = local-name($res)
> 
> return $res
> 
> The Where clause is written in pseudo-code and does not perform as I  
> intended. I've tried using ub:mdb($globalVariPath)  as a 
> predicate in the  
> path expression(for-clause) but I don't get it to work there either
> 
> Any help would be greatly appreciated.
> 
> Regards
> Andreas Jacobsen
> University of Bergen, Norway
> 
> 
> -- 
> Using Opera's revolutionary e-mail client: http://www.opera.com/m2/
> 
> 

Received on Wednesday, 25 August 2004 08:57:40 UTC