- From: Dan Connolly <connolly@w3.org>
- Date: Fri, 10 Jun 2005 16:41:07 -0500
- To: andy.seaborne@hp.com
- Cc: RDF Data Access Working Group <public-rdf-dawg@w3.org>
Picking up a thread from weeks ago... On Thu, 2005-05-19 at 11:43 +0100, Seaborne, Andy wrote: [... see www-archive for the rest...] > > Suggest rather adding > > Constraint Pattern above and: > > > > Definition: Value Constraint > > > > A Value Constraint is a boolean-valued expression of variables > > and RDF Terms. > > > > Definition: Constraint Pattern > > > > A Constraint Pattern is a pair of a Value Constraint > > and a Graph Pattern. S is a solution for a Constraint > > Pattern (C, GP) iff C(S) is true and S is a solution for GP. > > Hmm ... thinks ... > > How about defining a value constraint C as accepting S if C(S) is true? I was thinking that constraints worked kinda like GRAPH in the abstract syntax: there's a whole tree of pattern-foo below them; all that gets evaluated, and for any solutions that make it out of there, they get checked against the constraint. But re-reading your message about the abstract syntax in sparqlx.rnc ... http://lists.w3.org/Archives/Public/public-rdf-dawg/2005JanMar/0473.html I see a possibility that constraints are always leaves in the abstract syntax, i.e. they never dominate another graph pattern. I guess I can see how that works. Can you confirm that this is what you've got in mind? > ---- > Definition: Value Constraint > > A Value Constraint is a boolean-valued expression of variables > and RDF Terms. > > For constriant C, a solution S matches C is C(S) is true. > ---- > > The problem is that we have used the term "matches" - a solution causes a > pattern to match and it's a bit odd using "match" but using the same work seems > better. > > Tieing to a pattern does not work out completely: > > Example 1: > > SELECT WHERE > { > ?x rdf:type :foo > :y :q ?v > { ?x :p ?v } UNION { FILTER ?v < 3 } > } > > either the triple { ?x :p ?v } is in the graph or the filter is true. > > Example 2: > > SELECT * WHERE { > { ?x :p ?v } > { FILTER ?v < 3 } > } > > where the FILTER is in a group of one, no pattern in the group. > > Otherwise, it might be better to have a grammar to require FILTER to be > associated with a pattern of some kind. Something like: > > pattern constraint* > > [unchecked if that grammar change works] > > but now we have order in the query and this is syntactically illegal: > > SELECT * WHERE { > FILTER ?v < 3 > ?x :p ?v > } > > and the UNION example also fails. > > Our filters are not quite general patterns: > 1/ Evaluation is according to XPath/XQuery F&O rules > 2/ May be n-ary > > you don't write binary operators as > (?x 3) math:lessMath ?result > which is what it woudl be for the generalization to n-ary > > Constraints may be implemented as graph patterns - but they may not. [...] -- Dan Connolly, W3C http://www.w3.org/People/Connolly/ D3C2 887B 0F92 6005 C541 0875 0F91 96DE 6E52 C29E
Received on Friday, 10 June 2005 21:41:10 UTC