W3C home > Mailing lists > Public > public-rdf-dawg@w3.org > October to December 2010

BIND, FILTERs and BGPs

From: Andy Seaborne <andy.seaborne@epimorphics.com>
Date: Tue, 12 Oct 2010 20:36:22 +0100
Message-ID: <4CB4B8B6.10601@epimorphics.com>
To: sparql Working Group <public-rdf-dawg@w3.org>
>        { 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

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 Tuesday, 12 October 2010 19:36:59 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 16:15:44 GMT