# Re: BIND, FILTERs and BGPs

```Just to get that right:

> > 1/ BIND terminates the current BGP
> > 2/ FILTER goes after BIND in the BGP

Sorry, I am a bit confused about what the "FILTER goes after BIND in the BGP" part
means... Do I understand part 2/ of this proposal correctly as follows?

For Query1:

ASK { FILTER(?two = 2) . BIND(2 AS ?two) . }
=:=
ASK { BIND(2 AS ?two) . FILTER(?two = 2) }

this means

But for Query2:

ASK { FILTER(?two = 2) . BIND("foo" AS ?bar) . BIND(2 AS ?two) . }

would this mean

(since the first bind terminates the BGP, ?two wouldn't yet be bound?!?)

Would - alternatively "2/ BIND goes after FILTER in the BGP" also be an option?
(might be seen more intuitive from the viewpoint that Query1 and Query2 would behave
the same?)

Thanks for clarification,
Axel

On 12 Oct 2010, at 16:43, Lee Feigenbaum wrote:

> On 10/12/2010 3:36 PM, Andy Seaborne wrote:
> >>  { P1 KW(Expr AS ?Var)  P2}
> >> =:=
> >> { { SELECT * Expr AS ?Var { P1} } P2 }
> >
> > Does BIND end a BGP?
> > What happens to FILTERs?
> >
> >
> > { FILTER(expr) ?x ns:p ?v . ?x ns:q ?w }
> >
> > is the algebra:
> >
> > (filter expr
> > (bgp (triple ?x ns:p ?v)
> > (triple ?x ns:q ?w)
> > ))
> >
> > or written after FILTER motion:
> >
> > { ?x ns:p ?v . ?x ns:q ?w FILTER(expr) }
> >
> >
> > But if we insert BIND(2*?v AS ?two) into that:
> >
> > { FILTER(expr) ?x ns:p ?v . BIND(2*?v AS ?two) . ?x ns:q ?w }
> >
> > There is a similar issue with bNode syntax label scopes.
> >
> > I propose that:
> >
> > 1/ BIND terminates the current BGP
> > 2/ FILTER goes after BIND in the BGP
>
> I understand the question & agree with this proposal.
>
> Lee
>
> >
> > so its:
> >
> > (join
> > (filter expr
> > (extend (2*?v AS ?two)
> > (bgp (triple ?x ns:p ?v))
> > ))
> > (bgp (triple ?x ns:q ?w))
> > )
> >
> > or
> >
> > { { ?x ns:p ?v . BIND(2*?v AS ?two) . FILTER(expr)} ?x ns:q ?w }
> >
> > Logically it's
> > BGP - BIND - FILTER
> >
> > Doing this keep entailment a matter of BGPs only. Without motion of
> > BIND, it would need more work to come up with a design (if it exists)
> > that keeps entailment on a conjuction of triple patterns and have the
> > variable scoping + new variable rule.
> >
> > Lee's example:
> >
> > { ?x ns:p ?v . BIND(2*?v AS ?two) ?x ns:q ?two }
> >
> > will work and naturally falls out if BIND happens where it's mentioned.
> >
> > (join
> > (extend (2*?v AS ?two)
> > (bgp (triple ?x ns:p ?v)))
> > (bgp (triple ?x ns:q ?two))
> > )
> >
> > Andy
> >
> >
>
>
```

Received on Thursday, 14 October 2010 10:10:12 UTC