- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Mon, 14 Feb 2005 03:58:33 -0500
- To: 'RDF Data Access Working Group' <public-rdf-dawg@w3.org>
- Message-ID: <20050214085831.GG22068@w3.org>
On Sun, Feb 13, 2005 at 10:56:25AM +0000, Steve Harris wrote: > > On Fri, Feb 11, 2005 at 09:02:01 +0000, Andy Seaborne wrote: > > > > This is about tuning the current syntax, post-WD2 publication, not > > redesigning the whole thing. > > > > 1/ Bound > > > > This is special because it tests the variable, not the value. It's the only > > case where this happens. > > > > The suggestion (PatH) was to make this different. In other programming > > languages, there is just a plain function like many other library > > functions. It returns a value (a boolean) like any other function. > > > > Options: > > 1a/ BOUND(?x) -- as the current grammar > > 1b/ BOUND[?x] -- different grouping > > > > Anything with a colon in it will look like a qname. > > > > BOUND ?x is dangerous as it does not express the tight binding nature of > > this operator: "BOUND ?x && ?y" is strange. > > There is a precident, that is what perl does. Not that I'm holding up perl > as a model of clarity :) > > > I prefer "BOUND(?x)" -- leave as is. > > I have a mild preference for BOUND ?x, but BOUND(?x) is fine too. > > > BOUND[] as a one-off is over doing it. > > > > 2/ AND > > > > AND is a special keyword that starts constraints (SUCH THAT would be better > > but its two words). As English words go, WHERE is my personal favorite: { (?part g:id ?id) (?part g:od ?od) WHERE ?id < ?od (?part p:name "nut") } It's nice for mathematicians. Using the []s syntax is more pleasing to my eyes: { (?part g:id ?id) (?part g:od ?od) [?id < ?od] (?part p:name "nut") } > > Currently in the grammar it is required because ?x-?y > > is unclear : can be "?x binary minus ?y" or two expressions "?x" then > > "unary minus ?y" > > > > Proposal: use [] to mark constraints (see below). > > I dont like this very much. [] has lots of uses in syntax and programming > langages, but none of them relate to contraints in my experience. I think the important one is XPath. <xsl:for-each select="/root/element[@foo='bar']"/> > > 3/ OPTIONALS > > > > There are two syntactic forms "OPTIONAL" and "[]" > > > > Proposal: just the OPTIONAL form, freeing up [] for constraints. > > I have no proboem with using the OPTIONAL keyword instead of []. OPTIONAL++ > > 4/ Functions , casting and specials. > > &ex:foo() , xsd:byte(23) , isBlank(?x) > > > > These have different aspects: > > > > Functions act on values. Currently, they are only filters (boolean valued). This is essential (and needs some explanation to that effect) for isBlank as every URI solution implies a bNode solution that isBlank will match. This is probably not what you had in mind when you asked the question. > > The specials (isURI and friends) act on graph elements, not the individuals > > represented by those elements. The could be functions if we define their > > values - that would require a set of functions that all implementations had > > to have. At the moment, the function mechanism is an extension point and > > an implementation can choose not to provide it at all. > > > > Casting is like a function but it returns a value in a constrained way (no > > assignment to variables, fixed set of casts) and the return is typed. > > We dont have assignment, so the distinction is moot. But we do have functions calling functions. This is essential for operators that are not distinguished by the syntax. For instance: flt:UA9660 from "TYO") flt:UA9660 to "SFO" flt:UA9660 arrivalTime "20050215T18:30Z" flt:UA174 from "SFO" flt:UA174 departureTime "20050215T19:30Z" flt:UA174 to "BOS" (?flight1 from "TYO") (?flight1 to ?layover) (?flight1 arrivalTime ?arv) (?flight2 from ?layover) (?flight2 departureTime ?dpt) [ xs:dateTime(?dpt) > xs:dateTime(?arv) ] (?flight3 to "BOS") In the above data, ?dpt and ?arv are untyped literals (very common in RDF in the wild). Without the casts, we have no way to invoke op:dateTime-less-than . The best we could do is use the ">" to hint at op:numeric-less-than, which will fail as those strings aren't numbers. I admit this example is slightly contrived, but I can't see any way to ever invoke date comparison unless the literals are typed. "20050215T18:30Z"^^xs:dateTime > > A concern I have with general functions (ones that return any value, > > especially if they can assign to variables)) is that we getting into a > > second computational system that needs a lot of thinking about, not in > > technical terms but in scope and appropriateness terms. > > > > The obvious simplification is to use the same syntax of functions and casts, > > make functions value-returning then provide a standard set of functions for > > the casts. That's consistent with XSLT and XQuery. > > The specials like isURI can be functions. > > I like that. Fewer syntatic forms is good. > > > [Not sure about typing of function returns which might be lost in such a > > scheme. Does it hurt optimization?] > > I dont think so. Maybe makes it a bit harder, but its allready seriously > hard. I guess every dynamic constraint will be expressed in SQL as a set of value pattern constraints. Wow, I hadn't even gone there. > > 5/ LOAD => WITH > > > > The word "LOAD" suggests, to some people, a permanent change to the > > database which is a wrong implication. DaveB suggested changing the word > > to "WITH". I have done this change (rq23 and the tests). > > OK by me. > > > 6/ Clause order > > > > The current order is: > > > > BASE > > PREFIX > > SELECT > > WITH > > FROM > > WHERE > > LIMIT > > > > which is a mixed style. It would make sense to have WITH and FROM before > > SELECT (declarations first) and have LIMIT before WHERE (modifier to > > SELECT). It has confused some RDQL users that FROM comes after SELECT. > > >From before SELECT seems fine, its the other way round in SQL, but the SQL > FROM is very different. OTOH I prefer LIMIT at the end, as its parallel > with SQL is direct. > > Incidentally, I dont think of LIMIT as modifying SELECT, I think of it as > modyfying the result set. I think the same is true in SQL. LIMIT and GROUPing aren't in relational calculus. I bet SQL defines a solution as the result of LIMITing/GROUPing/COUNTing performed after the relational part is done. Anyone know where I can get a copy of, say, the SQL 92 spec? -- -eric office: +81.466.49.1170 W3C, Keio Research Institute at SFC, Shonan Fujisawa Campus, Keio University, 5322 Endo, Fujisawa, Kanagawa 252-8520 JAPAN +1.617.258.5741 NE43-344, MIT, Cambridge, MA 02144 USA cell: +81.90.6533.3882 (eric@w3.org) Feel free to forward this message to any list for any purpose other than email address distribution.
Received on Monday, 14 February 2005 09:03:22 UTC