16:22:33 RRSAgent has joined #sparql 16:22:33 logging to http://www.w3.org/2009/11/02-sparql-irc 16:26:59 LeeF has joined #sparql 16:27:04 hi everyone 16:27:37 zakim, who's on the phone? 16:27:43 Zakim has joined #sparql 16:27:43 trackbot, start meeting 16:27:46 RRSAgent, make logs world 16:27:48 Zakim, this will be 77277 16:27:48 ok, trackbot; I see SW_SPARQL(TPAC)11:30AM scheduled to start in 3 minutes 16:27:49 Meeting: SPARQL Working Group Teleconference 16:27:49 Date: 02 November 2009 16:27:51 zakim, this is sparql 16:27:51 ok, LeeF; that matches SW_SPARQL(TPAC)11:30AM 16:27:59 Meeting: SPARQL Face to Face Meeting #2 Day 1 16:28:06 Zakim, who is on the phone? 16:28:06 On the phone I see +1.408.988.aaaa 16:28:26 Zakim, aaaa is TPAC_SPARQL 16:28:26 +TPAC_SPARQL; got it 16:28:59 Zakim, TPAC_SPARQL has LeeF, AxelPolleres, SteveH, kasei 16:28:59 +LeeF, AxelPolleres, SteveH, kasei; got it 16:29:58 Zakim, TPAC_SPARQL has DaveBeckett 16:29:58 +DaveBeckett; got it 16:30:16 Observers: DaveBeckett 16:30:18 DaveB has joined #sparql 16:30:28 zakim, DaveBeckett, is DaveB 16:30:28 sorry, LeeF, I do not recognize a party named 'DaveBeckett,' 16:30:31 zakim, DaveBeckett is DaveB 16:30:31 sorry, LeeF, I do not recognize a party named 'DaveBeckett' 16:30:41 zakim, TPAC_SPARQL has dajobe 16:30:41 +dajobe; got it 16:30:48 AndyS_, are you dialing in from the UK? 16:31:28 How can I dial in? 16:31:38 I can't seem to get through on the usual number 16:31:42 The normal UK number does not work 16:32:36 hmm 16:32:39 zakim, code? 16:32:39 the conference code is 77277 (tel:+1.617.761.6200 tel:+33.4.89.06.34.99 tel:+44.117.370.6152), LeeF 16:32:47 is that the number you're trying? 16:32:50 yes 16:32:50 yes 16:32:56 zakim, please stop being a twit 16:32:56 I don't understand 'please stop being a twit', LeeF 16:33:01 but there is just a constant beep 16:33:04 pgearon has joined #sparql 16:33:10 AxelPolleres has changed the topic to: http://www.w3.org/2009/sparql/wiki/Agenda-F2F2 16:34:06 + +1.540.412.aabb 16:34:07 LukeWM_, can't dial in today - maybe tomorrow. 16:34:16 :-( dial in does not work 16:34:35 zakim, +1.540.412.aabb is me 16:34:35 +pgearon; got it 16:34:36 AndyS, Ah, OK, hopefully the number'll be working by then. 16:34:49 hope your first day is going well :) 16:37:02 nope 16:37:14 no 16:38:46 Axel is going to try to knock some heads together and sort this out 16:39:02 ok 16:39:21 OK, thanks. Good luck with the head knocking Axel. 16:43:13 ran over to registration... 16:43:15 SteveH has joined #sparql 16:43:22 ... seems they can't help immediately 16:43:45 any chance you can dial the us number? 16:44:09 or the french? :-) 16:44:19 Hm, I am not sure how expensive that will be... 16:44:27 I'll try the french 16:45:15 + +44.186.528.aacc 16:45:28 zakim, aacc is bglimm 16:45:28 +bglimm; got it 16:45:29 Zakim, +44.186.528.aacc is me 16:45:30 sorry, bglimm, I do not recognize a party named '+44.186.528.aacc' 16:45:32 Zakim, TPAC_SPARQL has csma 16:45:32 +csma; got it 16:45:37 Zakim, mute me 16:45:37 bglimm should now be muted 16:45:53 observers: Dave Beckett (dajobe) 16:46:02 Christian De San Marie 16:46:31 dajobe: I invented the word "SPARQL" and am responsible for rasqal 16:46:32 ... works for ibm 16:46:39 AxelPolleres, I can only dial the UK number I'm afraid. 16:47:21 Christain: know people who will be developing RIF for sparql - CTIC 16:48:08 Update on UK number - the UK number is through a 3rd party and the issue has been reported to them but we don't have an ETA of when it will be fixed 16:48:13 we're still doing introductions and I'm going to scribe 16:48:27 Lee intro 16:48:32 yes 16:48:36 axel: will check with CTIC what's their status re: rif, they aren't at least not actively contributing up to this point yet. 16:48:40 bglimm, the problem has been reported, but no estimate on when it might be fixed 16:48:40 just reading 16:49:00 Lee: try to get as much done as we can, may be a little handstrung by [low] attendance 16:49:23 will use mailing list to report on discussion on topics that need wider scope 16:49:36 otherwise will try to make decisions based on consensus, need to move forward 16:49:43 agenda 16:49:54 http://www.w3.org/2009/sparql/wiki/Agenda-F2F2 16:50:04 axel: query related issues 16:50:11 in the morning 16:50:20 two main points : aggregate, sub queries 16:50:27 are theer some issues we can close now? 16:50:35 lee: list of issues we can close a few weeks ago 16:51:01 http://lists.w3.org/Archives/Public/public-rdf-dawg/2009JulSep/0419.html 16:51:28 csma has joined #sparql 16:51:33 axel: reviewing above 16:51:36 http://www.w3.org/2009/sparql/track/issues/3 16:51:52 axel: seems to have aggreement on #3 16:52:19 SteveH: may benefit from a keyword but it didn't seem to be too pupular 16:52:25 ... line noise feel from lots of use of {}s 16:53:08 ... optional WHERE didn't help 16:53:18 ... but no other support on that new keyword idea 16:53:18 PROPOSED: Resolve [http://www.w3.org/2009/sparql/track/issues/3 Subquery 16:53:18 syntax (e.g. mandatory curly braces)] by requiring curly braces around 16:53:18 subqueries and without introducing a keyword. 16:53:43 Objections? 16:54:00 PROPOSED: Resolve [http://www.w3.org/2009/sparql/track/issues/3 Subquery syntax (e.g. mandatory curly braces)] by requiring curly braces around subqueries and without introducing a keyword. 16:54:09 RESOLVED: Resolve [http://www.w3.org/2009/sparql/track/issues/3 Subquery syntax (e.g. mandatory curly braces)] by requiring curly braces around subqueries and without introducing a keyword, no objections or abstentions 16:54:19 issue #4 16:54:25 -bglimm 16:54:56 Zakim, who is on the phone? 16:54:56 On the phone I see TPAC_SPARQL, pgearon 16:54:57 TPAC_SPARQL has csma 16:55:02 hm, I'll try to dial in again 16:55:13 axel: have to name all the variables 16:55:38 and mention in the projection of the subquery 16:55:44 for bottom up approach 16:55:54 +bglimm 16:56:01 Zakim, mute me 16:56:02 bglimm should now be muted 16:56:36 axel: for ask subqueries this migh tbe aproblem, and want to have bindings come in 16:56:41 admin pause as we re-call phone 16:56:53 -TPAC_SPARQL 16:56:53 ok 16:56:55 -bglimm 16:57:09 zakim, dial suiteA 16:57:09 I am sorry, LeeF; I do not know a number for suiteA 16:57:11 zakim, dial suite A 16:57:11 I don't understand 'dial suite A', LeeF 16:57:15 Zakim, dial Suite-A 16:57:15 I am sorry, AxelPolleres; I do not know a number for Suite-A 16:57:32 -pgearon 16:57:33 SW_SPARQL(TPAC)11:30AM has ended 16:57:34 Attendees were +1.408.988.aaaa, LeeF, AxelPolleres, SteveH, kasei, DaveBeckett, dajobe, pgearon, +44.186.528.aacc, bglimm, csma 16:57:58 pgearon, bglimm, sorry, working through our technical difficulties 16:58:01 we're still doing phone stuff here 16:58:02 zakim, dial prospectorA 16:58:02 I am sorry, LeeF; I do not know a number for prospectorA 16:58:05 zakim, dial prospector_A 16:58:05 I am sorry, LeeF; I do not know a number for prospector_A 16:58:08 zakim, dial suite_A 16:58:08 I am sorry, LeeF; I do not know a number for suite_A 16:58:26 axel's recalling the bridge 16:58:30 SW_SPARQL(TPAC)11:30AM has now started 16:58:36 +HCLSf2f 16:58:37 bglimm, pgearon, we're back online 16:58:41 ok 16:58:51 zakim, HCLSf2f is TPAC_SPARQL 16:58:51 +TPAC_SPARQL; got it 16:59:22 back to meeting 16:59:23 issue #4 16:59:28 zakim, TPAC_SPARQL has SteveH, kasei, leef, dajobe, cdsm 16:59:28 +SteveH, kasei, leef, dajobe, cdsm; got it 16:59:37 axel: not sure what that means till we decide what a subquery is 16:59:38 +pgearon 16:59:46 +bglimm 16:59:53 kasei: not sure what ask sub queries are 16:59:53 Zakim, mute me 16:59:53 bglimm should now be muted 16:59:55 -bglimm 17:00:15 kasei: would use ask subquery for ASK NOT EXISTS? 17:00:32 axel: have an issue wehter you would be allowe SELECT queries in FILTER to get 1 value 17:00:48 LeeF: lets close this one for now and revisit if necesasr 17:01:31 bglimm, yeah, it's not working too well 17:01:54 PROPOSED: Resolve [http://www.w3.org/2009/sparql/track/issues/4 What is the variable scope between main queries and subqueries?] by noting that only variables projected from a subselect are visible outside the subselect and that all other variables and all blank nodes within the subselect are local to the subquery. 17:02:44 SteveH: wondering about blank nodes, cose they are graphs coped 17:02:53 ... already a bit wierd, this isn't any worse (paraphrasing) 17:03:02 I think I give up dialing in. It now complains about my handset, but it is ok. I can call my mobile with it at least 17:03:18 pgearon: fine 17:03:22 RESOLVED: Resolve [http://www.w3.org/2009/sparql/track/issues/4 What is the variable scope between main queries and subqueries?] by noting that only variables projected from a subselect are visible outside the subselect and that all other variables and all blank nodes within the subselect are local to the subquery, no objections or abstentions 17:03:51 axel: next issues are for subqueries - #5 17:03:54 issue #8 17:04:14 http://www.w3.org/2009/sparql/track/issues/8 17:04:21 What determines the RDF dataset for subqueries? 17:04:31 lee: people same to agree it uses same dataset as parent 17:04:40 axel: propose close with previous agreement 17:05:02 PROPOSED: Close ISSUE-8 noting consensus that subqueries inherit the parent query's dataset and cannot have FROM & FROM NAMED clauses of their own 17:05:16 RESOLVED: Close ISSUE-8 noting consensus that subqueries inherit the parent query's dataset and cannot have FROM & FROM NAMED clauses of their own, no objections or abstentions 17:05:44 axel: inforamlly agreed on explciit grouping 17:05:53 issues #11 #12 17:06:18 grammar cannot now detect between agg function and regular in projection 17:06:24 if cna't tell difference, could not enforce this 17:06:52 implicit/default can be one big group, group by 1 17:07:01 SteveH: lean twoards sql approach - 1 big group 17:07:24 having to write GROUP BY 1 would be annoying if you had an agg function there 17:07:40 issue is about IMPLICIT group 17:08:45 SELECT ?bar and I don't have GROUP BY ?bar then it is implicitly... 17:09:08 looking at first example in http://www.w3.org/2009/sparql/track/issues/11 17:11:00 proposal is 'group by 1' default and otherwise you have to be explicit 17:11:18 ... prohibit to project on functions or funcitons of varioables that are not mentioned in the group by 17:12:03 PROPOSED: In the absence of a GROUP BY clause, the entire solution set acts as a single group 17:12:13 RESOLVED: In the absence of a GROUP BY clause, the entire solution set acts as a single group 17:13:52 swh: you can't pass a aggregated variable into a scalar function, or project it 17:14:29 PROPOSED: It's prohibited to project a variable, V, or a scalar function on a variable, V, if V is not included in the GROUP BY clause 17:14:39 PROPOSED: In an aggregate query, tt's prohibited to project a variable, V, or a scalar function on a variable, V, if V is not included in the GROUP BY clause 17:14:49 PROPOSED: In an aggregate query, it's prohibited to project a variable, V, or a scalar function on a variable, V, if V is not included in the GROUP BY clause 17:15:44 PROPOSED: In an aggregate query, you can't project an expression, E, unless that expression is a GROUP BY term 17:17:25 discussing whether to have GROUP BY ?var or GROUP BY expr(.) 17:17:33 and then writing the rules 17:17:42 axel: note from the viewpoint of expressivite group by expressions aren't necessary, grouping by variables + subqueries/project expressions seem sufficient 17:19:22 kasei: what about doing aliasing in the GROUP BY clause ? 17:19:39 lots of choices here 17:19:58 1. do it like sql 17:20:02 drop requirements for sample 17:20:17 2. require the same syntactic form which is grouped & projected 17:20:23 3. only allow group by ?var 17:20:58 4. aliasing in group by (GROUP BY Expr as ?var) 17:21:01 - 17:21:50 #4 would look wierd still.. but may still require forbidding functions over agg vars 17:21:57 in the projection 17:22:02 so it would be like #3 then 17:22:12 axel: 4. seems to imply similar restrictions as 3. 17:23:08 SteveH: propose # for now 17:23:14 and use subqueries to get expressions 17:24:48 lee: want to add to issue, get feedback from group by expr impl 17:24:56 kasei: I do this but don't do a lot of erro checking (!) :) 17:25:40 zakim, who is on the phone? 17:25:40 On the phone I see TPAC_SPARQL, pgearon 17:25:41 TPAC_SPARQL has SteveH, kasei, leef, dajobe, cdsm 17:25:42 ACTION: Steve to summarize 4 options relating to grouping by expressions on the mailing list and solicit information on what existing implementations do 17:25:42 Created ACTION-130 - Summarize 4 options relating to grouping by expressions on the mailing list and solicit information on what existing implementations do [on Steve Harris - due 2009-11-09]. 17:27:06 -TPAC_SPARQL 17:27:08 zakim, dial suite_a 17:27:08 ok, AxelPolleres; the call is being made 17:27:09 +Suite_a 17:27:14 we have RalphS in da house 17:27:17 SELECT ?x WHERE { { SELECT (?x + ?y) AS ?group WHERE { ?x :foo ?y } GROUP BY ?group } - or soemthing in that space 17:27:37 zakim, drop Suite_a 17:27:37 Suite_a is being disconnected 17:27:38 -Suite_a 17:28:16 it dailled the wrong number we think 17:28:21 .. looking at query 17:28:53 steve your query misses a t least one } 17:28:59 yeah :-/ 17:29:01 SteveH: the above is how you would do it , if we didn't allow group by expr 17:29:18 there is a crucial } missing, hold on 17:29:55 .. still no phone working, redialling in 17:30:12 [anyone want to write a sparql IRC validator ?] 17:30:14 +TPAC_SPARQL 17:31:28 11, 12 already mentioned 17:31:30 SELECT ?group 17:31:30 WHERE { 17:31:30 { 17:31:31 SELECT ?x+?y AS ?group 17:31:31 WHERE { 17:31:31 ?x :foo ?y . 17:31:33 } 17:31:34 } GROUP BY ?group 17:31:37 } 17:31:51 axel: no more query-related ones we can close, it seems 17:32:08 #12 17:32:12 we want a HAVING clause 17:32:33 move syntax stuff to editors 17:32:46 kasei: what we name it. ref to SQL 17:33:02 SteveH: don't see need for HAVING as we have FILTER 17:33:08 there are things you can't have in both 17:33:20 you can't put an agg function in a filter 17:33:37 could make them syntactically the same 17:34:00 axel: why do we have a list of constraints in HavingClause (grammar)? 17:34:11 .. the only obvious difference 17:34:32 SteveH: in theory you could ban agg functions in FILTER and not inside HAVING but this makes grammar very ugly 17:34:33 'HAVING' HavingCondition+ 17:34:41 why's the +? 17:37:15 SteveH: in sql, it needs a different keyword because of the syntax of sql 17:37:23 discussing what's easy for users to understand 17:38:20 ... it's essentially a group filter 17:39:33 SELECT ?o WHERE { ?s ?p ?o } GROUP BY ?o FILTER ?x > 10 17:39:39 [my formulation] 17:39:54 SteveH: ... the semantics of FILTER in the place of "HAVING" is the same as the normal FILTER... no need for a separate keyword 17:39:58 vs SELECT ?o WHERE { ?s ?p ?o } GROUP BY ?o HAVING ?x > 10 17:40:18 steve and greg lean towards only having FILTER 17:40:20 oops, igore ?x and pretend I wrote ?o 17:40:42 pgearon: coming from sql, having is familiar 17:40:49 axel tends to agree, unless other findings which really prove it different. 17:41:54 I also tend to HAVING because it is familiar from sql 17:42:38 ...but we could just tell them HAVING is called FILTER in sparql 17:43:12 ... should be further discussed, no decision should be made in the small group we have now. 17:43:45 HAVING will make it easier for people in the future when they move from SPARQL and try to learn SQL for the first time :-) 17:44:28 dave: does every implementation call it FILTER 17:44:29 ? 17:44:39 seems there aren't that many 17:46:37 more discussion of impl of this 17:46:46 arq and virtuso and others prob follow sql and use having 17:46:57 steve point out that both HAVING and FILTER are the same operation in the algebra. 17:47:04 next issue 17:47:08 aggregrate details 17:47:13 http://www.w3.org/2009/sparql/track/issues/16 17:47:16 distinct and * 17:47:26 35, 41, 50 17:47:40 35 "Can aggregate functions take DISTINCT as an argument a la SELECT COUNT(DISTINCT ?X)?" 17:47:49 http://www.w3.org/2009/sparql/track/issues/35 17:48:50 trying to see if consensus in room 17:48:58 my implementation will allow for this, but I don't know about the general case 17:49:00 lee: allow distinct to all agg 17:49:08 lee: my impl allows distinct to all agg 17:49:59 (topic is issue-35) 17:51:27 distinctness is applied before the rows are handed off to the agg functions 17:51:32 ^agg 17:52:05 makes sense for COUNT DISTINCT and SUM DISTINCT and probably others, including extension agg funcitons 17:52:39 Note: we actually discussed ISSUE-41 in the context of ISSUE-11 already. 17:53:06 in sql the distinct applies to the variable not the function 17:53:50 so would it then be COUNT DISTINCT(...) or COUNT (DISTINCT ... ) ? 17:53:53 kasei: but for some cases you'd want to optimize count distinct rather than mateiralises the distinct values 17:54:46 SELECT COUNT(DISTINCT ?x, ?y) 17:55:31 THere seems to be again a reduncancy wrt. subqueries, since the bahaviour could be achieved with a DISTINCT subselect as well. 17:55:55 want to do distinct but not sure how it works with multipel arguments 17:55:59 all the builtin funcs have 1 arg 17:56:11 if it was allowed over 1 var, still could do it with subselects 17:56:47 axel: if we don't have consensus, given the redundancy, I'd be happy enough to leave DISTINCT in aggregates out. 17:57:06 discussion of what sql allows 17:57:08 ... unless someone claims it in. 17:59:20 ... Lee does claim it in, it seems. 17:59:24 SELECT COUNT(DISTINCT ?x) COUNT(?y) { ?key :p1 ?x . OPTIONAL { ?key :p2 ?y } } GROUP BY ?key 18:00:57 count *: counts rows aka sparql solutions 18:01:01 count ?var counts values 18:01:08 dont think other functions can use/need * 18:01:16 comparing to sql 18:03:43 consensus in room on distinct with 1 arg 18:03:48 with agg funcs 18:08:11 there is no way in the current grammar we have in FPWD to write something like COUNT ( ?x ?y) all aggregates are about 1 expression, aren't they? 18:08:24 ACTION: Lee to summarize strawman of how aggregates, DISTINCT, and * work (per Glitter's behavior) 18:08:24 Created ACTION-131 - Summarize strawman of how aggregates, DISTINCT, and * work (per Glitter's behavior) [on Lee Feigenbaum - due 2009-11-09]. 18:10:37 lee: suggest that we have signatures for aggregates as for other functions. 18:12:29 curreng builting agg funcs have 1 arg 18:12:32 only count makes sense with * 18:12:40 and for sql that's a diff operation - couting rows, not values 18:12:48 so maybe should be a 5th builtin agg function 18:13:31 I'm attempting to track issues we discuss which seem to have consensus from F2F attendees but for which we're not resolving issues on this wiki page: http://www.w3.org/2009/sparql/wiki/F2F2_Issue_Discussions 18:15:42 SteveH and axel discuss count(*) 18:15:49 which apparently is wierd in SQL 18:17:03 seem to see that there is consensus that count* is special 18:17:17 and the only agg function that needs it, so don't need to allow it for extension agg functions 18:17:25 otherwise distinct is allowed for all agg functioons 18:17:30 built in and extension 18:17:36 they can all take multiple expression arguments 18:17:44 count ?X { :bob a :Person OPTIONAL { :bob :mbox ?X } } is different from count * { :bob a :Person OPTIONAL { :bob :mbox ?X } } 18:17:56 on graph {:bob a :Person} 18:18:21 ... that is indeed a bit weird, yes. 18:19:09 this was some of #35 which we think we have consensus, but not resolve it 18:19:12 http://www.w3.org/2009/sparql/wiki/F2F2_Issue_Discussions 18:22:07 the above doc is to capture the consenus at the f2f to bring to wider group 18:22:26 41 ... http://www.w3.org/2009/sparql/track/issues/41 18:22:36 we've covered that 18:22:50 point to options for issue #11 18:24:38 50 ... http://www.w3.org/2009/sparql/track/issues/50 18:26:42 that's so MEAN 18:27:34 I suggest following SQL on this one. If Excel uses "MEAN" then that's a good reason to use AVG, isn't it? 18:29:10 ISSUE-50: advice to editors is to keep it like SQL (AVG) 18:29:10 ISSUE-50 Should the average/arithmetic mean aggregate be called AVG, MEAN, both, or something else? notes added 18:29:15 trackbot, close ISSUE-50 18:29:15 ISSUE-50 Should the average/arithmetic mean aggregate be called AVG, MEAN, both, or something else? closed 18:30:05 # Mixed datatypes left 18:30:08 and "Syntax" 18:30:14 whether custom aggs should have a keyword 18:30:42 no issue to track this 18:30:45 discusing that now 18:30:53 want to allow people to define agg functions with uris 18:30:55 issue #15 18:31:00 http://www.w3.org/2009/sparql/track/issues/15 18:31:08 ... do we do this same was as extension functions 18:31:14 (lee) or introduce some keyword 18:31:32 e.g. ..(AGG foo:bar(DISTINCT args)) 18:31:41 where foo:bar is the uri of the extension funcs 18:32:18 discussing about whetehr need keyword from people in room 18:32:21 SteveH: doesn't carea 18:32:34 axel; useful for service description for defining agg funcs for signature of them 18:33:06 ... or maybe not for our service description. discussion of htat in room 18:33:52 dajobe: I would like keyword, they are so diff from functions 18:33:57 e.g. rules on pasing in vars and checking rules 18:34:58 the problem: is how you distinct custome aggregates from custom scalar functions and casts 18:35:12 SELECT ?foo ex:bar(?baz) 18:35:13 there are different checks for each of agg/funcs/casts 18:35:15 question is how to distinguish custom aggregates from custom scalar functions/casts... 18:35:58 casts are limited to a certain set of URIs, aren't they? 18:36:12 pgearon: not for user datatypes? 18:36:16 SELECT ?foo ex:bar{?baz} 18:36:43 ... for aggregates... might raise ambiguities, not sure 18:38:19 SELECT ?foo AGG ex:bar (DISTINCT ?baz) 18:38:20 or 18:38:27 SELECT ?foo AGG(ex:bar, DISTINCT ?baz) 18:38:33 AGG(ex:bar(?x, ?y)) 18:38:37 AGG(ex:bar(DISTINCT ?bar ?blah)) 18:38:56 AGG ex:bar(DISTINCT ?bar ?blah) 18:42:01 e.g ex:bar[DISTINCT ?bar ?blah] 18:42:04 ^- my suggestion 18:42:18 or all agg funcs 18:42:22 COUNT[?var] etc. 18:42:30 s/or/for/ 18:42:55 COUNT <- NO 18:43:31 choices 18:43:46 1. bare function SELECT ex:bar(DISTINCT ?bar ?blah) 18:44:10 2. keyworded SELECT AGG/AGGREGATE ex:bar(DISTINCT ?bar ?blah) 18:44:25 3. add syntax to make extension functions look different SELECT ex:bar[DISTINCT ?bar ?blah] 18:44:45 ... and apply that to all builtin agg funcs/extension agg funcs 18:45:24 tangental discussion of not wanting QL to depend on service desc 18:45:37 .. especially as some impls won't have a service 18:46:00 the world of sparql functions is defined in the sparql ql spec 18:46:06 the service desc, describes that 18:46:13 with some pre-defined agg funcs 18:50:28 how common is this? steve wants it. lee: pretty common 18:51:33 Option1: keyword for all aggregates 18:51:33 Option2: keyword for external aggregates only 18:51:34 Option3: no keyword 18:51:55 .... let's leave it to the editors to pick one and then discuss further. 18:53:13 Option4: [ ] 18:53:17 15-20 min break 18:53:31 -pgearon 18:53:33 -TPAC_SPARQL 18:53:36 SW_SPARQL(TPAC)11:30AM has ended 18:53:38 Attendees were SteveH, kasei, leef, dajobe, cdsm, pgearon, bglimm, Suite_a, TPAC_SPARQL 19:00:25 LukeWM has joined #sparql 19:03:21 LukeWM has joined #sparql 19:03:47 LukeWM has joined #sparql 19:15:16 we're still missing a couple of people here, maybe 5mins 19:15:48 ted has joined #sparql 19:16:08 we'll restart soon 19:16:16 and if we can get zakim to call us, that would be super 19:16:43 it didn't work last 2 times 19:17:13 SW_SPARQL(TPAC)11:30AM has now started 19:17:14 +Suite_a 19:17:38 ted has left #sparql 19:17:48 zakim, who's on the phone? 19:17:48 On the phone I see Suite_a 19:19:43 AxelPolleres has joined #sparql 19:20:28 +bglimm 19:20:42 Ican call now from the UK 19:20:52 Zakim, mute me 19:20:52 bglimm should now be muted 19:22:04 scribenick: kasei 19:22:49 LeeF: I think any solution that has aggregate functions returning multiple results per group is horrible. 19:22:59 SteveH: I agree. 19:23:22 topic: mixed datatypes & aggregates 19:23:26 LeeF summarizing the issue for observers. 19:23:49 LeeF: Possibility - return a row per datatype. 19:23:59 ... link somewhere on a summary of the issue. 19:24:24 http://lists.w3.org/Archives/Public/public-rdf-dawg/2009AprJun/0250.html 19:25:09 LeeF: Option 1 - (all in the context of MIN) impl can pick one of the datatypes and take MIN of those values and ignore everything else 19:25:47 dajobe: some things will be discarded, some things will give you a numeric value? 19:26:04 ... going to provide semantics for built-in functions. custom ones can do whatever they like. 19:26:07 csma has joined #sparql 19:26:31 LeeF: addressing this for built-ins, especially for MIN and MAX 19:26:55 SteveH: framework for aggregates should imply agg functions only return one value. 19:27:10 dajobe: so important issue is determining how you decide which one value you return. 19:27:28 SteveH: need to sort out cases with unbound values and type errors. 19:27:46 LeeF: taking MIN of lots of values (ints, dates, unbound, ...) 19:28:09 ... pick a values space for MIN based on first encountered datatype. ignore any other values that can't be compared with that value space. 19:28:52 dajobe: can promote from int to decimal, e.g., if you encounter int first and then decimal. 19:29:25 LeeF: yes. numerics would be ok, but ignore dates and strings. 19:29:36 dajobe: unportable based on whatever you see first. 19:29:43 MIN(xsd:dateTime, ?x) 19:30:05 is redundant w.r.t. MIN(xsd:dateTime(?x)) 19:30:09 LeeF: for every value in list, if it has a safe cast to datatype, convert and use less than, otherwise ignore. 19:30:50 Axel: should not behave differently than explicit cast. 19:31:20 dajobe: subtle difference between type promotion and casting. 19:31:42 Axel: that was option 2 19:32:49 dajobe: could have min-date, min-numeric, min-string 19:33:01 SteveH: could be based on ORDER BY sorting 19:33:07 http://www.w3.org/TR/rdf-sparql-query/#modOrderBy 19:33:23 SteveH: only gives a partial ordering 19:34:31 LeeF: doesn't help with mixed literals and datatypes 19:35:08 LeeF: another option is simply an error if you have datatypes that aren't comparable. 19:35:19 ... need to ask what happens if this error is encountered. 19:36:14 ... could say its the same as ORDER BY and let implementations sort out any total orderings (same as ORDER BY now) 19:37:05 Our experience shows that it's good to have a "quiet cast" that either casts to a desired datatype (if possible) or return NULL (if there's no way); where plain cast signals an error, "quiet cast" returns NULL. Good to compute at least something on RDF mess... 19:38:11 looks like I can't dial in for a couple of hours. I may be on later, but if not, I'll be back tomorrow morning. Have fun 19:39:24 reads ugly, but, if we had IF, we could... MIN(IF(xs:int(?X)>0;xs:int(?X);0)) keeps it all at the user to catch errors, so that would make Option 4 work 19:39:37 LeeF: my preference for MIN/MAX is same as ORDER BY, with some bits being implementation defined. 19:39:48 dajobe: for SUM you can delegate to + 19:39:56 ... AVG would be also be + 19:40:06 SteveH: mode/median would be tricky, but might not have those 19:40:54 LeeF: anyone not happy with that? 19:41:18 Zakim, unmute me 19:41:18 bglimm should no longer be muted 19:43:25 LeeF: what happens when a type error bubbles up into the project level? 19:44:38 SteveH: if you don't have a soft cast (per iv_an_ru) you have to filter at a lower level 19:45:56 LeeF: three obvious answers 19:46:01 ... the whoel query is an error 19:46:05 ... treated as an unbound 19:46:16 Options on error: 19:46:19 ... invent some sort of type error value 19:46:41 dajobe: "FAIL"^^xsd:typeError 19:46:59 SteveH: collapsing to unbound is most sensible 19:47:19 LeeF: one more option, "fail the row" 19:47:20 "OMG"^^xsd:typeError ? 19:47:49 dajobe: could choose between type errors and null. 19:47:54 iv_an_ru, :) 19:48:21 LeeF: concern with coalesce - will it treat unbound and type errors the same? 19:48:38 SteveH: point of coalesce is that you get back a thing you can work with. 19:49:33 Axel: what's wrong with treating it as unbound? 19:49:47 LeeF: lose ability to distinguish the two. 19:50:33 ... when I implemented IF, I have three branches for true, false, and error. 19:50:50 ... could add an ISERROR() akin to BOUND() 19:50:54 unbound(X), smells_bad(X), can_eat(X)... 19:51:16 SteveH: discarding the row seems better than failing the whole query. 19:51:34 kasei, +1 19:51:34 LeeF: does anyone think type errors should fail the whole query? 19:52:00 I would like if the user can find ou whether some values were discarded 19:52:31 or explicitly gives permission to discard rows 19:54:32 dajobe: could use coalesce with a sentinel value 19:54:38 Fortunately, ODBC does not give me a way to transfer a value of type "error", so I don't have to worry. I can't make it metter than now, despite of what we'll write in the document. 19:55:02 s/metter/better/ 19:55:28 dajobe: SELECT FAILED(...) ? 19:55:51 each suggestion I've invented seems worse than the previous idea 19:56:22 SteveH: what do we lose if we collapse to unbound values? 19:56:44 LeeF: could have custom functions that return unbound. 19:58:44 SteveH: can we agree to have ISERROR and COALESCE? 19:58:54 dajobe: isn't it only useful with IF? 20:00:40 SteveH: COALESCE takes any number of arguments, returning the first that's not unbound and not a type error. 20:01:08 LeeF: I've implemented COALESCE and IF. Treats ubound and type errors as the same thing. 20:01:36 the issue about bound() behaviour on error, didn't arise so far, because bound() could only take variables which - prior to projectexpressions - couldn't ever be errors... 20:01:58 dajobe: this is the mechanism to turn the dropping of rows into using all rows with a sentinel value. 20:02:53 SELECT COALESCE(?x) returns rows 20:03:05 SELECT ?x discards rows with type errors 20:03:12 SELECT COALESCE(?x) AS ?y 20:03:17 yeah what SteveH said 20:03:19 ?y will be unbound if ?x is a type error 20:04:10 SELECT COALESCE(SUM(?x)) AS ?y 20:04:18 to handle type error rows 20:04:20 hmm! 20:05:36 COALESCE() -> unbound, COALESCE(type error, ...) -> COALESCE(...), COALESCE(unbound, ...) -> COALESCE(...), COALESCE(val, ...) -> val 20:05:54 SUM(COALESCE(xsd:decimal(?x), 0)) 20:07:22 SteveH: can you use a scalar function as an argument to an aggregate function? 20:07:46 SUM(?x + ?y) 20:08:17 SUM(?x, ?y) 20:08:20 implies that + takes either a pair of scalars and returns a scalar, or pair of vectors and returns a pair of vectors 20:08:32 SUM(?x * ?x) 20:08:52 SUM(COALESCE(?x * ?x, 0)) 20:11:02 SELECT MIN(?val + 3) 20:11:02 WHERE { 20:11:02 ?x :val ?val 20:11:02 } GROUP BY ?x 20:15:04 question is, are "aggregates" functions or operators that look like functions 20:15:06 Axel: summarizing - errors drop rows 20:15:51 ... supporting coalesce would be a solution to handling type errors. 20:16:20 dajobe: don't like the naming. 20:16:38 LeeF: does anybody not want COALESCE? 20:17:31 SteveH: should do what people expect it to do, despite error vs. typing issues different than SQL. 20:18:11 Axel: COALESCE would handle errors and treat them the same as unbound. 20:18:18 our coalesce would convert errors to nulls, ok, got it. 20:19:44 SteveH: can we determine if aggregate functions take a singel value or a set? 20:20:47 BTW there's a known SQL analog to "errors drop rows", namely "best effort union". When a middleware queries multiple remote parties to form longest possible union and some of remotes may be down, BEST EFFORT UNION steps over dead corps and continue to run. 20:21:38 SteveH: in MIN(?val + 3), is ?val a value or a set? 20:21:42 AndyS has joined #sparql 20:22:09 LeeF: semantics aren't in + dealing with sets/vectors, it's in the application of MIN and + in the context of aggregation. 20:22:56 dajobe is diagraming the two interpretations. 20:23:05 hi AndyS 20:24:05 RRSAgent, make logs public 20:24:10 RRSAgent, pointer? 20:24:10 See http://www.w3.org/2009/11/02-sparql-irc#T20-24-10 20:24:20 FYI, AndyS - also see http://www.w3.org/2009/sparql/wiki/F2F2_Issue_Discussions 20:24:23 if you want :) 20:25:33 LeeF: to support expressions in aggregates would involve pass by reference for the expression. 20:25:53 SteveH: aggregate operation would take as arguments and expression and a solution set. 20:26:32 Axel: existing algebra for aggregates take multiset as input. 20:26:43 SteveH: would need to change that to also take an expression. 20:27:57 Axel: multiset vs. sequence in aggregate operations is an issue. 20:28:03 ... multisets don't have an order. 20:28:29 SteveH: lots of things in the current algebra is wrong. 20:29:42 LeeF: there's no ordering for an aggregate operation. ordering happens after that. 20:30:07 ... e.g. GROUP-CONCAT doesn't have any deterministic ordering. 20:30:26 ... multisets, not sequences, are used for aggregates. 20:31:10 SteveH: think we're agreed that aggregate functions take a solution set and a pass by reference expression. 20:31:27 implication is that aggregate functions take a pass-by-reference expression and a solution set (implied) as arguments are return a scalar 20:31:32 what kasei said 20:32:28 LeeF: do we allow expressions in aggregates, then? 20:32:49 ZAkim, mute me 20:32:49 bglimm should now be muted 20:33:32 ... seems useful. 20:33:53 SteveH: almost essential in arguments to agg functions, possible not needed in GROUP BY. 20:34:04 dajobe: current syntax in 1.1 has this already. 20:34:44 SteveH: algebra needs work to properly explain this. 20:35:23 ACTION: Steve to make sure algebra has some position on what aggregate functions are & do (w.r.t. expressions by reference) 20:35:23 Created ACTION-132 - Make sure algebra has some position on what aggregate functions are & do (w.r.t. expressions by reference) [on Steve Harris - due 2009-11-09]. 20:39:54 topic: Project Expressions syntax 20:40:36 SteveH: not convinced all expressions need an alias 20:40:51 ... would just name them by the expression 20:40:59 dajobe: need to change result formats, then. 20:44:02 and all the software apis 20:44:09 and define a canonical form for serializing sparql expressions 20:45:22 LeeF: syntax options 20:46:16 (expr AS ?alias) 20:46:32 (expr) AS ?alias 20:46:52 , expr AS ?alias , 20:47:35 dajobe: don't care as long as it's not ambiguous. 20:47:56 SteveH: not mutually exclusive. 20:48:13 LeeF: without parens, commas are needed. 20:48:48 dajobe: would prefer parens to aid lex/yacc 20:48:58 PrimaryExpression 'AS' Var ... should work, or what do I miss? 20:49:34 .... with or without commas?!? 20:50:16 because the grammar becomes contextual? does it? 20:50:17 LeeF: easiest to require brackets and alias all the time 20:50:19 SELECT ?x+?y AS ?plus WHERE { ... } 20:50:44 SELECT ?x +?y AS ?plus ... 20:51:38 SELECT ?x , +?y AS ?plus ... 20:51:44 last 2 are the same and project 2 vars 20:52:14 so BrackettedExpression 'AS' Var 20:53:49 dajobe: using expressions where variables used to be means we'll be using lots of brackets anyway 20:55:01 '(' Expression AS Var ')' vs. BrackettedExpression 'AS' Var 20:55:54 I think "SELECT ?x?y?z" is probably legal today 20:55:59 SteveH: Can live with (expr AS ?alias) 20:57:10 SELECT FOO ?x expr1 ?y ... 20:57:43 dajobe: if the syntax was reversed ambiguity would be gone. 20:57:46 SELECT FOO ?plus ?x+?y 20:57:50 s/FOO/LET :-) 20:58:24 no, this is a mess 20:58:27 kasei: still the same problem with whitespace before the '+' 20:58:46 SELECT FOO(?plus, ?x+y) 20:59:01 RENAME(foo, ?x+?y) 20:59:17 SELECT (?plus as ?x+?y) 20:59:27 or SELECT ?plus as (?x+?y) 21:00:25 break for lunch... 21:00:29 Zakim, unmute me 21:00:29 bglimm should no longer be muted 21:00:38 Lunch. 21:00:39 -bglimm 21:38:32 DanC has joined #sparql 21:49:13 AxelPolleres has joined #sparql 21:50:36 SteveH_ has joined #sparql 21:53:13 csma has joined #sparql 21:57:04 LeeF has joined #sparql 21:57:21 zakim, who's on the phone? 21:57:21 On the phone I see Suite_a 21:57:59 LukeWM has joined #sparql 21:58:51 dajobe has joined #sparql 22:03:11 without comma: 22:03:12 Option1: ((BrackettedExpression 'AS')? Var)+ 22:03:12 Option2: Var || ('('Experession 'AS' Var ')')+ 22:03:12 with comma: 22:03:12 Option3: projection := BrackettedExpression 'AS')? Var | projection ',' projection 22:03:14 22:04:32 Option 3 means alternatively having the normal Varlist, where no project expressions are present. 22:06:26 ... projection := (Expression 'AS')? Var | projection ',' projection 22:06:39 (that was the corrected version of Option3) 22:09:37 scribenick: LeeF 22:15:24 s/WF/WD 22:15:39 SteveH_: don't like ASK inside FILTERs (or NOT EXISTS inside FILTERs) 22:16:30 AxelPolleres: What about the case where you wanted to combine other conditions with the ASK ? 22:16:40 SteveH_: Seems weird to have ASK and not other subqueries in the FILTER 22:18:19 discussion is also tapping on issue-6 ... 22:18:45 LeeF: I'd probably do without any subqueries in FILTERs 22:20:22 AxelPolleres: select subqueries in filters are probably redundant with subselects, but it might be easier to write some things tha tway 22:20:29 ... if there was an IN operator 22:22:07 DanC has joined #sparql 22:22:18 kasei: motivation for having not exists in FILTER was to be able to easily combine it with other conditions (w/o duplicating it across UNIONs, etc.) 22:24:01 kasei: I have EXISTS and NOT EXISTS in both graph patterns and filters and it doesn't seem too complicated 22:24:15 SteveH_: I can't build an optimizing version of NOT EXISTS in FILTER 22:26:33 SteveH_: algebraic style negation is expressively different from filter style 22:26:42 ... but filter style is same expressivity as actually being a FILTER 22:29:42 AxelPolleres: subqueries within FILTERs - is there any need? 22:29:47 ... 2 possible needs 22:29:54 ... 1) EXISTS (boolean subqueries in FILTERs) 22:30:10 ... 2) 1-variable SELECTs tied to one value usable in comparison expressions or potential IN expressions 22:31:02 dajobe: would add another type (array of values), which would need to be encounted for everywhere 22:31:43 AxelPolleres_ has joined #sparql 22:31:56 FILTER( EXISTS { ?x :foo :y } ) 22:32:14 FILTER( EXISTS { ?x :foo :y . FILTER( ?y = 3) } ) 22:33:34 kasei: is the distinction here just a syntax issue? 22:34:48 AxelPolleres: who wants FILTER EXISTS ? 22:39:06 LeeF: Why don't we report back a general feeling from today that we'd like to avoid this complexity if possible, and ask for any advocates to speak up? 22:39:42 AxelPolleres: boolean subqueries in FILTERs and SELECT subqueries in FILTERs should be questioned 22:39:51 kasei: SELECT in FILTER doesn't make sense without extra operators 22:41:33 subtopic: CONSTRUCT queries in FROM [NAMED] clause 22:41:55 SteveH_: is there any extra capabilities here? 22:42:18 kasei: consider several files to load and map the vocabularies into your own vocabulary 22:44:09 http://www.polleres.net/publications/poll-etal-2007.pdf my example is on p.6 22:44:44 CONSTRUCT { ?a knows ?b . ?a foaf:name ?aname . ?b foaf:name ?bname . } 22:44:45 FROM { CONSTRUCT { _:auth foaf:name ?n . ?p aux:hasAuthor _:auth . } 22:44:45 FROM WHERE { ?p dc:creator ?n . } } 22:44:45 WHERE { ?p aux:hasAuthor ?a . ?a foaf:name ?aname . 22:44:45 ?p aux:hasAuthor ?b . ?b foaf:name ?bname . FILTER ( ?a != ?b ) } 22:44:55 DanC has joined #sparql 22:48:50 discussion of above query from page6 of paper PDF above 22:49:00 axel: seems necessary for social network like queries 22:51:00 SteveH_: thinks this can be done with sub-queries and some work 22:54:24 ACTION: Axel to followup with Chilleans re: not including sub-constructs in FROM clauses 22:54:24 Created ACTION-133 - Followup with Chilleans re: not including sub-constructs in FROM clauses [on Axel Polleres - due 2009-11-09]. 22:56:56 discussion that Axel seems to be the main - perhaps sole - proponent of sub-constructs in FROM clauses in the WG 23:03:41 Lee: Would " SELECT ( _:b1 AS ?blank) ... " solve Axel's use case? 23:03:44 Axel: yes. 23:04:09 ... if it has the same semantics as blanknodes in CONSTRUCT 23:04:27 ACTION: Steve and Andy to figure out what happens with SELECT ( _:b1 AS ?blank) 23:04:27 Created ACTION-134 - And Andy to figure out what happens with SELECT ( _:b1 AS ?blank) [on Steve Harris - due 2009-11-09]. 23:04:34 Lee: you could also write SELECT ( [] AS ?blank) ... " of course 23:07:33 SELECT ( ?var = _:B1 AS ?foo ) 23:09:00 s/SELECT ( ?var = _:B1 AS ?foo )/YOU NEVER SAW THIS 23:09:08 hey! that's legal 23:09:16 RRSAgent, this meeting spans midnight 23:14:05 ACTION-134: this should probably do the same thing as CONSTRUCT, i.e. mint new bnodes for each solution 23:14:05 ACTION-134 And Andy to figure out what happens with SELECT ( _:b1 AS ?blank) notes added 23:16:32 23:18:27 ISSUE-10: obviated by EXISTS, F2F2 noted this is not too helpful anyway 23:18:27 ISSUE-10 ASK queries in graph patterns? notes added 23:18:31 trackbot, close ISSUE-10 23:18:31 ISSUE-10 ASK queries in graph patterns? closed 23:23:52 topic: issue-39 23:25:10 SELECT ?a (?a AS ?b) (?c as ?b) 23:25:25 legal or not, vote now! 23:26:41 discussion of project variables in these kind of cases, esp in subqueries 23:26:54 { SELECT (?x + ?y AS ?sum) (?sum * ?qty as ?price) } 23:27:03 ^- illegal in lee and steve's engine 23:27:18 ... ?sum and ?price only appear in parent scope - the oute r{} 23:30:40 ...also illegal / doesn't work in kasei's impl 23:33:48 LeeF: open question of whether doing this (same variable in query and as an alias) is an error or not 23:34:13 ...alternative would be that it's just a separate variable universe 23:38:55 -Suite_a 23:38:56 SW_SPARQL(TPAC)11:30AM has ended 23:38:56 Attendees were Suite_a, bglimm 23:39:30 csma has joined #sparql 00:15:10 Zakim has left #sparql 00:15:52 AxelPolleres has joined #sparql 00:15:58 discussing with HCLS. 00:16:12 mention of property paths. 00:17:05 discuss that we need to take care of cycles, need for path lengths, how that relates to subsumption reasoning, etc. 00:17:31 eric now explaining basic federation 00:20:07 update, service description, graph management protocol, entailment 00:25:46 LeeF has joined #sparql 00:36:33 HCLS asks for something like functional syntax, Lee mentions its being discussed at the moment, mayb end up as a note. 00:40:22 AxelPolleres has joined #sparql 01:06:07 AxelPolleres has joined #sparql 01:27:41 AxelPolleres has joined #sparql 03:50:11 AxelPolleres has joined #sparql 04:04:49 LeeF has joined #sparql