- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Mon, 28 Nov 2011 10:24:31 -0500
- To: David McNeil <dmcneil@revelytix.com>
- Cc: public-rdf-dawg-comments@w3.org
* David McNeil <dmcneil@revelytix.com> [2011-11-28 08:34-0600] > On Thu, Nov 24, 2011 at 2:32 PM, Eric Prud'hommeaux <eric@w3.org> wrote: > > > LeftJoin(Ω1, Ω2, expr) = > > { merge(μ1, μ2) | μ1 in Ω1 and μ2 in Ω2, and μ1 and μ2 are compatible > > and expr(merge(μ1, μ2)) is true } > > ∪ > > { μ1 | μ1 in Ω1 | ∄ μ2 in Ω2 | μ1 and μ2 are compatible and > > expr(merge(μ1, μ2)) is true } > > > > ? > > > > Eric - Doesn't this definition have a problem in the case where there is a > u1 for which there is a u2 that is compatible and expr(...) is true and > there is another u2 that is compatible and expr(...) is false? I think the > definition you gave in this email would only produce a single output for > u1, I understand this to be the correct output given: Diff(Ω1, Ω2, expr) = { μ | μ in Ω1 such that ∀ μ′ in Ω2, either μ and μ′ are not compatible or μ and μ' are compatible and expr(merge(μ, μ')) has an effective boolean value of false } LeftJoin(Ω1, Ω2, expr) = Filter(expr, Join(Ω1, Ω2)) ∪ Diff(Ω1, Ω2, expr) that is [[ SELECT ?label { { {SELECT*{BIND(1 AS?match)}} } OPTIONAL { {SELECT*{BIND("COMPAT PASS" AS?label) BIND(1 AS?match)BIND(true AS?test)}} UNION {SELECT*{BIND("COMPAT FAIL" AS?label) BIND(1 AS?match)BIND(false AS?test)}} UNION {SELECT*{BIND("INCOMPAT" AS?label) BIND(2 AS?match)BIND(true AS?test)}} FILTER (?test) } } ]] should yield only {(label → "COMPAT PASS")} > whereas the main definition of LeftJoin in the SPARQL 1.1 draft would > have two outputs for u1: one to reflect the u2 where expr(...) is true and > another to reflect the u2 where expr(...) is false. I think this comes from a mismatch between the explanatory text and the definition. > -David -- -ericP
Received on Monday, 28 November 2011 15:25:01 UTC