- From: Lu Jing <robert_lu00@hotmail.com>
- Date: Thu, 21 Sep 2006 14:00:17 +0900
- To: public-rdf-dawg-comments@w3.org
I feel that the semantics of OPTIONAL pattern is still not clear. If my understanding is correct, according to the specification, OPTIONAL pattern can modify the solutions of a pattern by adding new bindings to unbounded variables. The problem is, in some cases, add additional binding to a unbounded variable may cause this solution no longer a valid solution of the original pattern. We can see the following example. Assume the data is: :a :p1 :b :a :p2 :c If we have the following SPARQL: SELECT ?x ?y ?z WHERE { { ?x :p1 ?y } UNION { ?x :p3 ?z } } The result should contain only one solution: ( :a :b _ ) Here, I use "_" to represent a unbound variable. Now if we add an optional pattern to the above query, that is: SELECT ?x ?y ?z WHERE { { { ?x :p1 ?y } UNION { ?x :p3 ?z } } . OPTIONAL { ?x :p2 ?z } } According to the definition, the optional pattern additionally add a binding to the variable ?z. So the solution should be: ( :a :b :c ) It seems OK in this case, as the ( :a :b :c ) is also a solution to the UNION pattern. But now if we add a filter to the first query, that is: SELECT ?x ?y ?z WHERE { { { ?x :p1 ?y } UNION { ?x :p3 ?z } } . FILTER ( !BOUND(?z) ) } The solution of this query should be: ( :a :b _ ) That is, not changed from the first query. But now if we again add an option pattern to it, that is: SELECT ?x ?y ?z WHERE { { { { ?x :p1 ?y } UNION { ?x :p3 ?z } } . FILTER ( !BOUND(?z) ) } . OPTIONAL { ?x :p2 ?z } } If we follow the definition, the solution should be still: ( :a :b :c ) But this time, we have a filter in the first pattern that says the ?z should not be bound. That means, this answer is not a solution of the pattern without the optional pattern. So I wonder what is the exact definition of an optional pattern, and what should the answers of the above querys be?
Received on Thursday, 21 September 2006 05:00:28 UTC