# [xquery-talk] Function for determining one XPath as subset of another

Thu Jan 28 05:56:23 PST 2016

```Hi Ghislain,

No I have not considered error cases, for the moment it is enough for
me to just raise an error if the path is invalid. Although in this
case I can assume that all paths I am provided are correct.

On 28 January 2016 at 13:44, Ghislain Fourny <g at 28.io> wrote:
>
> This may sound stupid, but: have you considered that (and would it be
> relevant to you that) the second expression may raise errors that the first
> one wouldn't have raised, rather than returning a subset?
>
> Consider the case where b has a numeric type, and the attribute a cannot be
> cast to double?
>
> Kind regards,
> Ghislain
>
>
> On Thu, Jan 28, 2016 at 2:17 PM, Pavel Velikhov <pavel.velikhov at gmail.com>
> wrote:
>>
>> No, the first line in the base case should also return false, sorry
>>
>> >
>> >
>> > So suppose you have 2 path expressions, p1 and p2, and you allow only /x
>> > or //x as path steps
>> > and each path step can have a predicate:
>> >
>> > p1 = axis_1 pred_1, …, axis_n pred_n
>> > p2 = axis_1 pred_1, … , axis_m pred_m
>> >
>> > subsumes(p1, p2):
>> >  /* recursion base case */
>> >  if p1 is empty: return true
>> >  if p2 is empty: return false
>> >
>> >  a_1 = first axis of p1
>> >  a_2 = first axis of p2
>> >
>> >  if a_1 is a child axis ‘/‘ label l :
>> >   if a_2 is a child axis ‘/' with the same label l, and the predicates
>> > are equivalent:
>> >      return subsumes(p1 - a_1, p2 - a_2)
>> >   else:
>> >      return false
>> >
>> >   if a_1 is a descendants axis ‘//‘ with label l:
>> >     if p2 contains an axis with label l:
>> >        p2’ = remove all axes of p2 from the head, until you find an axis
>> > with label l
>> >        p2’ = remove the axis with label l from p2'
>> >        return subsumes( p_1 - a_1, p2’ )
>> >
>> >  return false
>>
>>
>> _______________________________________________
>> talk at x-query.com
>> http://x-query.com/mailman/listinfo/talk
>
>
>
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk

--