- From: Lee Feigenbaum <feigenbl@us.ibm.com>
- Date: Thu, 29 Mar 2007 12:56:25 -0400
- To: public-rdf-dawg@w3.org
These are responses to the substantive parts of Olivier's comments. Andy or Eric, when you respond to the editorial matters, please include these comments. (Andy, you might in particular want to take a look at the response to the RDFTerm-equal function. While I know the group has discussed this in the past, I can't find a specific URL to a discussion or decision that I could refer to.) Lee Olivier Corby wrote on 03/28/2007 10:51:19 AM: > > Hi, > > Here are some comments on current SPARQL WD. ... > 4.2.3 RDF Collections > > [[Suggestion : the (1 ?x 3 4) notation for rdf list could not generate the > _:b rdf:rest rdf:nil triple; in such a way we could match lists that may > have more elements.]] The syntax of SPARQL triple patterns, and in particular of the syntactic sugar forms given in section 4.2 ( http://www.w3.org/TR/rdf-sparql-query/#QSynTriples ), is designed to be consistent with the syntax of Turtle ( http://www.dajobe.org/2004/01/turtle/ ). In Turtle, the (1 2 3) syntax specifies a closed collection (i.e. one terminated by an rdf:nil triple), and SPARQL adopts this meaning for this bit of syntax. Of course, you can match a subset of a collection by explicitly including the component pieces of the collection explicitly: _:b0 rdf:first 1 ; rdf:rest _:b1 . _:b1 rdf:first ?x ; rdf:rest _:b2 . _:b2 rdf:first 3 ; rdf:rest _:b3 . _:b3 rdf:first 4 . > 5.2.2 Scope of Filters > > A constraint, expressed by the keyword FILTER, is a restriction on > solutions over the whole group in which the filter appears. > > [[What happens if a variable in the filter is not bound in the current > group, but is bound in another group after current group? Does the filter > fail? ]] As per the text you've cited and the algebra given in Section 12, Filters are evaluated in terms of the solution mappings of the group in which the filter appears. If a variable in the filter is unbound in a solution mapping, then as per Section 11.2 any function or operator (except bound()) on the variable produces a type error. If this propagates to the top of the filter, then the solution is removed from the multiset of solution mappings. > 9.3 DISTINCT > > What is the solution of : > > select distinct ?y where { > ?x c:friend ?y > } > > on this graph : > > ex:Jules c:friend ex:Jimmy > ex:Jules c:friend ex:James > ex:Jimmy owl:sameAs ex:James SPARQL is defined for simple entailment, with no notion of the semantics of owl:sameAs. The result of this query is: ?y -------- ex:Jimmy ex:James > [[ > I think there should be an = operator for plain literals because > otherwise, RDFterm-equal applies, in which case : > > 11.4.10 RDFterm-equal > > RDFterm-equal produces a type error if the arguments are both literal but > are not the same RDF term. > > > So, following the current draft : > > 'Jules'@en = 'Jim'@en > > produces a type error because they are not the same RDF term. > > It is the same with != < <= > >= > ]] By design, SPARQL does not define semantics for comparing plain literals with language tags, as you've noted. Note that query writers can compare literals themselves: !langMatches(lang(?a), lang(?b)) || !(str(?a) = str(?b)) The Working Group has not been motivated in the past to define the comparison operators on plain literals with language tags. Section 11.3.1 Operator Extensibility licenses SPARQL language extensions that add rows to the operator table, such that implementations may support comparing plain literals with language tags. I hope that this addresses this concern; please let us know if not, and the Working Group will weigh changes to the operator table versus the schedule risks of publishing a new Last Call draft.
Received on Thursday, 29 March 2007 16:56:49 UTC