- From: Seaborne, Andy <andy.seaborne@hp.com>
- Date: Mon, 30 Oct 2006 10:54:02 +0000
- To: RDF Data Access Working Group <public-rdf-dawg@w3.org>
If the proposed filter scoping rule is taken naively, there isn't a way to get value testing conditions into the left join conditions for optional (unlike the join conditions for a group). Here's an example: ---- Data @prefix : <http://example/> . :x1 :p 1 . :x2 :p 2 . :x3 :q 3 . :x3 :q 4 . ---- Data ---- Query PREFIX : <http://example/> SELECT * { ?x :p ?v . OPTIONAL { ?y :q ?w . FILTER(?v=2) } } ---- Query ---- Results 1 --------------------- | x | v | y | w | ===================== | :x2 | 2 | :x3 | 4 | | :x2 | 2 | :x3 | 3 | | :x1 | 1 | | | --------------------- ---- Results 2 ------------------- | x | v | y | w | =================== | :x2 | 2 | | | | :x1 | 1 | | | ------------------- Results 1 is what the current doc (declarative form) gets - and would be the same if the FILTER were part of the left outer join conditions. Results 2 is what a purely filter-scoped-to-group gets because the optional part never matches because ?v is an unbound variable. I can't see any way of getting filter into the scope of the left outer join. The only way I can see of rewriting this query is to use a UNION and repeat the fixed pattern on each side of the union, one side including the filter and optional triple pattern. That query is going to give different answers and the app will have to post-process the results to find out what went on. Intuitively, the scope rule needs to be modified to put the filter just outside the group, allowing it to be part of the left outer join, and not just inside the group. Any alternatives? How do we formalize this? Andy
Received on Monday, 30 October 2006 10:54:15 UTC