Re: [xsl] Function for determining one XPath as subset of another

Subject: Re: [xsl] Function for determining one XPath as subset of another
From: "David Carlisle d.p.carlisle@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 26 Jan 2016 16:54:10 -0000
On 26 January 2016 at 16:15, Adam Retter adam.retter@xxxxxxxxxxxxxx <
xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

> Given two simple XPaths, say:
>
> 1. //w
>
> 2. /x/y/z/w[@a = 'v']
>
> As a human I can very easily tell without evaluating the expressions
> that (2) will return a subset (or the same set) of the results that
> (1) would return *should* they both be evaluated.
>
> My goal here is given any two simple arbitrary XPaths expressed as
> strings, and without evaluating them against a context, to determine
> whether one would return a subset of the results of the other.
>
> I wondered if there might be an algorithm or library that someone
> already had or has written which might be able to give me the answer?
>
> I realise that I can only probably cover a subset of XPath itself, but
> it is only the path steps with predicates which I am interested in.
>
> Ideally I am looking for something in Java.
>
> --
> Adam Retter
>


I suspect it's not possible unless you restrict the paths so much that it
is easy.
In the early xslt discussions there were proposals to have some more exotic
determination of match priority but they were abandoned essentially as this
question couldn't be answered.


even given your easy example


1. //w

2. /x/y/z/w[@a = 'v']


if y is a place holder for an xpath expression rather that just literally
matching the element y then
it isn't always a subset, consider

/x/doc('y.xml')/z/w[@a = 'v']

conversely

/x/y/z/w[@a = 'v'] and /x/y[1+1=2]/z/w[@a][upper-case(@a)= 'V']

do select the same sets but to know that you have to be able to prove that
arbitrarily complicated xpath boolean expressions are true which isn't
likely to be possible.

David

Current Thread