Warning:
This wiki has been archived and is now read-only.

Chatlog 2010-03-26

From SPARQL Working Group
Jump to: navigation, search

See original RRSAgent log and preview nicely formatted version.

Please justify/explain all edits to this page, in your "edit summary" text.

00:19:47 <LeeF> LeeF has joined #sparql
00:33:09 <AndyS> AndyS has joined #sparql
00:45:07 <SteveH> SteveH has joined #sparql
00:52:24 <Zakim> Zakim has left #sparql
05:01:22 <AxelPolleres> AxelPolleres has joined #sparql
05:13:29 <AxelPolleres> AxelPolleres has left #sparql
12:01:44 <RRSAgent> RRSAgent has joined #sparql
12:01:44 <RRSAgent> logging to http://www.w3.org/2010/03/26-sparql-irc
12:01:46 <trackbot> RRSAgent, make logs world
12:01:46 <Zakim> Zakim has joined #sparql
12:01:48 <trackbot> Zakim, this will be 77277
12:01:48 <Zakim> ok, trackbot; I see SW_(SPARQLF2F)8:00AM scheduled to start now
12:01:49 <trackbot> Meeting: SPARQL Working Group Teleconference
12:01:49 <trackbot> Date: 26 March 2010
12:01:49 <LeeF> zakim, this will be SPARQL
12:01:49 <Zakim> ok, LeeF; I see SW_(SPARQLF2F)8:00AM scheduled to start now
12:03:32 <Souri> Souri has joined #sparql
12:07:38 <LeeF> topic: SPARQL 1.1 Query
12:07:43 <LeeF> subtopic: Aggregates
12:08:02 <dcharbon2> dcharbon2 has joined #sparql
12:08:12 <kasei> scribenick: kasei
12:08:13 <AxelPolleres> http://lists.w3.org/Archives/Public/public-rdf-dawg/2010JanMar/0499.html
12:08:38 <kasei> AxelPolleres: multiset proposal from AndyS
12:08:50 <kasei> ... examples in email.
12:08:52 <MattPerry> MattPerry has joined #sparql
12:09:25 <kasei> SteveH: scribenick: LeeF
12:09:28 <kasei> oops
12:09:28 <LeeF> scribenick: LeeF
12:10:02 <LeeF> SteveH: there are some things in the mail that needs discussion
12:10:37 <LeeF> ...ignroe mail because it's out of line with the current spec
12:10:44 <LeeF> ...currently: aggregates take a list of expressions
12:10:48 <LeeF> ...evaluated with respect to the binding table
12:12:44 <pgearon> pgearon has joined #sparql
12:13:36 <LeeF> ...end up with an NxM list of values
12:13:41 <LeeF> ...gets passed to the aggregate value
12:13:46 <LeeF> ...which returns scalar results
12:14:00 <LeeF> ...doesn't usefully let you deal with multi-argument aggregates
12:14:10 <LeeF> ...Andy's proposal is that instead of producing a big multiset
12:14:17 <LeeF> ...you'd have a multiset of lists
12:14:30 <LeeF> ...where each list is the evaluation of the expressions in the aggregate with respect to the binding table
12:16:02 <SteveH> ?x = 1,2   ?y = 3, 4
12:16:02 <SteveH> and AGG(?x, ?y)
12:16:02 <SteveH> gives AGG({(1, 3), (2, 4)})
12:17:07 <LeeF> LeeF: what's the alternative?
12:17:12 <SteveH> {1, 3, 2, 4}
12:17:35 <LeeF> LeeF: definitely prefer Andy's proposal
12:17:43 <SteveH> SteveH: me too
12:17:45 <LeeF> AndyS: works well for geospatial examples
12:18:12 <LeeF> SteveH: complicates the definition of the set functions a bit
12:18:22 <LeeF> Axel: Seems to be consensus aorund this
12:19:34 <LeeF> AxelPolleres: referring to ISSUE-3, how are errors and unbounds handled?
12:19:44 <LeeF> AxelPolleres: we need to decide per aggregate, right?
12:19:47 <LeeF> SteveH: not necessarily
12:20:14 <LeeF> AxelPolleres: should we go through the list of aggregates?
12:20:25 <LeeF> SteveH: I think it depends on what we decide happens with error values 
12:20:38 <LeeF> ...I like Andy's proposal for minting a unique symbol, but don't like passing them into the aggregate
12:20:45 <LeeF> ...would rather pass a flag or a count of evaluation errors
12:21:01 <AndyS> Builin aggregates in grammar currently: http://www.w3.org/2009/sparql/docs/sparql-grammar-11.html#rAggregate (any missing?)
12:21:42 <AxelPolleres> evaluation of unbound leaves an error, so hard/impossible to distinguish.
12:22:31 <SteveH> ?x = 1, e  ?y = 3, 4
12:22:31 <SteveH> and AGG(?x, ?y)
12:22:31 <SteveH> gives AGG({(1, e), (2, 4)})
12:22:31 <SteveH> or    AGG({(2, 4)}) + 1 error
12:23:03 <LeeF> SteveH: pretend e is something that evaluates to an error
12:23:16 <LeeF> ...choices are a list with the error value in it, or else a list of the OK ones + an indication of the error
12:23:28 <LeeF> ...or (e, e) as a value passed to the aggregate
12:23:33 <SteveH> or (e,e), (2,4)
12:24:37 <LeeF> SteveH: this would mean that the aggregate would take a multiset of lists and a count of errors
12:24:54 <LeeF> bglimm: example should really be (1, 3) and (e, 4) 
12:25:00 <AndyS> Correction : AGG({(1, 3), (e, 4)})
12:25:02 <LeeF> AxelPolleres: why is the number of errors important?
12:25:20 <LeeF> AndyS: tells you the difference between the number of items in the partition and [too quiet for scribe to hear]
12:25:39 <LeeF> ...lets you do COUNT(*) like things
12:26:05 <LeeF> AxelPolleres: is this helpful for extending aggregates?
12:26:06 <LeeF> AndyS: yes
12:26:17 <LeeF> AxelPolleres: multiset with errors in place conveys more information
12:26:40 <LeeF> ...if you throw that information away, then in the algebra you've already made a decision for someone else who wants to define a custom aggregate on which information you have access to
12:26:48 <LeeF> SteveH: yes
12:26:55 <LeeF> AndyS: yes, but gives you uniform treatment of errors
12:27:36 <LeeF> AxelPolleres:  but what if someone wants to define an aggregate where you want to act differently depending on if an error occurs in the first or second argument?
12:27:44 <LeeF> SteveH: idea is to make all aggs behave in the same way 
12:27:51 <LeeF> ...can alter behavior with, e.g., COALESCE
12:28:34 <LeeF> q+ to ask if Axel has a use case for needing the other behavior
12:28:46 <LeeF> AxelPolleres: would suggest different aggregates for different behavior
12:28:47 <LeeF> ack me
12:28:47 <Zakim> LeeF, you wanted to ask if Axel has a use case for needing the other behavior
12:29:33 <LeeF> LeeF: asks if Axel has a use case for the other behavior 
12:29:35 <LeeF> AxelPolleres: No
12:29:45 <LeeF> LeeF: happy with the design that passes errors separately from the multiset of lists
12:31:28 <LeeF> AxelPolleres: is everyone happy with the solution? you have a multiset of lists with no errors, and the number of rows where an error occurred
12:31:53 <LeeF> Souri: do you have a concrete example?
12:32:21 <AxelPolleres> COUNT ( ?X ?Y )
12:32:21 <LeeF> ... perhaps COUNT with 2 columns
12:32:44 <LeeF> MattPerry: how does this effect the results of aggregates?
12:33:15 <LeeF> LeeF: my guess is it doesn't affect the semantics of the built-in aggregates, rather it affects whta's available to extension aggregates
12:33:46 <LeeF> s/ISSUE-3/ISSUE-53
12:33:50 <LeeF> (way back up high)
12:34:01 <SteveH> ?a    ?b
12:34:01 <SteveH> 1      2
12:34:01 <SteveH> 3      A
12:34:01 <SteveH> COUNT(xsd:integer(?a), xsd:integer(?b))
12:34:02 <SteveH> COUNT({(1, 2)}, errors = 1
12:34:25 <SteveH> answer : 2
12:34:41 <LeeF> IvanH: why would the answer be 2?
12:34:45 <LeeF> SteveH: the answer would be 1
12:34:59 <LeeF> s/SteveH: the answer would be 1/SteveH: because there are 2 elements
12:35:04 <AxelPolleres> COUNT ( * ) here would be 2, yes?
12:35:08 <LeeF> AndyS: I would expect the answer to be 1
12:35:16 <LeeF> bglimm: 1 results + 1 error row = 2 results
12:35:22 <AndyS> We haven't completely decided if we allow multiple args to COUNT - a discussion for the specifics of COUNT later
12:35:24 <LeeF> SteveH: COUNT(*) is a completely special case
12:35:45 <AndyS> In SQL, it seems agg(any error) is error.  agg of nulls is skipped.
12:35:47 <MattPerry> count(*) = 2, count(?x, ?y) = 1, right?
12:35:49 <LeeF> SteveH: I would expect COUNT on multiple values to count the # of values, not the number of rows
12:36:14 <AndyS> COUNT(COALESCE(?x,?y))
12:36:19 <LeeF> LeeF: I implement COUNT on multiple values to be the number of rows with at least one bound value
12:36:23 <AxelPolleres> would a row (e,e) be counted?
12:36:34 <LeeF> AndyS, yes, that's basically what I do :)
12:37:20 <AndyS> That is how to get the other effect of count when one or more is defined/non-error
12:39:00 <SteveH> COUNT({(1, 2)}
12:39:14 <AndyS> and the error count?
12:39:16 <SteveH> + errors = 1
12:39:43 <AxelPolleres> ?a ?b
12:39:43 <AxelPolleres>  1  2
12:39:44 <AxelPolleres>  3  A
12:39:44 <AxelPolleres>  B  C
12:40:27 <LeeF> q+ to ask about relation to what happens to errors in solution set
12:40:34 <LeeF> SteveH: counting tuples seems to be what people expect
12:40:36 <SteveH> COUNT() will count the number of tuples
12:40:45 <LeeF> AxelPolleres: COUNT only counts tuples without errors
12:40:54 <LeeF> AxelPolleres: special case is COUNT(*) which counts ...
12:40:57 <AndyS> COUNT(*) is special
12:41:03 <LeeF> SteveH: it's defined as counting the number of rows in the solution set
12:41:08 <AxelPolleres> q?
12:41:12 <LeeF> ack me
12:41:12 <Zakim> LeeF, you wanted to ask about relation to what happens to errors in solution set
12:42:09 <LeeF> SELECT (1/0 AS ?X) --> get one row with no binding for ?X
12:42:38 <LeeF> LeeF: given that behavior, I would expect COUNT({(1, 2)}, errors = 1  to give a COUNT of 2
12:43:56 <AndyS> we can define SELECT (1/0 AS ?X) differently - it's an independent decision - can go either way
12:44:58 <LeeF> ?a   ?b 
12:44:58 <LeeF> 1    2
12:44:58 <LeeF> 3    A
12:44:59 <AxelPolleres> Do I get that right?
12:44:59 <AxelPolleres> ?a ?b
12:45:00 <AxelPolleres>  1  2
12:45:00 <AxelPolleres>  3  A
12:45:00 <AxelPolleres>  B  C
12:45:00 <AxelPolleres> COUNT_Steve(?a ?b) -> 3
12:45:02 <AxelPolleres> COUNT_Lee(?a ?b) -> 2
12:45:04 <AxelPolleres> COUNT_Andy(?a ?b) -> 1
12:45:24 <LeeF> q+ to work through my opinion over Axel's case
12:45:48 <AxelPolleres> should be COUNT(xsd:integer(?a), xsd:integer(?b))
12:45:49 <AndyS> q+
12:46:05 <LeeF> SELECT (xsd:integer(?a) AS ?a_int) (xsd:integer(?b) AS ?b_int)
12:46:35 <MattPerry> count(*) = 2, count(?x, ?y) = 1, right?
12:46:43 <LeeF> SELECT (COUNT(xsd:integer(?a), xsd:integer(?b)) ?count)
12:47:08 <LeeF> LeeF: would expect to COUNT to give me the number of rows from the former case that have at least one OK value
12:47:09 <MattPerry> MattPerry has joined #sparql
12:47:17 <LeeF> s/to COUNT/COUNT
12:47:33 <LeeF> ack AndyS
12:47:36 <LeeF> ack me
12:47:36 <Zakim> LeeF, you wanted to work through my opinion over Axel's case
12:47:44 <AxelPolleres> q?
12:47:45 <LeeF> AndyS: we can decide either way what an error in the select expression does
12:47:51 <LeeF> ... i thought the preference was to keep it unbound
12:48:01 <LeeF> ... so SELECT is not acting like a FILTER
12:48:16 <AxelPolleres> q+ ta ask on what's the status of errors in SELECT expressions
12:48:32 <AxelPolleres> q+ to ask on what's the status of errors in SELECT expressions
12:48:32 <SteveH> q+
12:48:38 <LeeF> AndyS: I don't see the need to align the two behaviors
12:49:11 <LeeF> ack SteveH
12:49:26 <LeeF> SteveH: I would expect COUNT to be more similar to FILTER with which you lose a row with an error
12:49:57 <AndyS> ??example; SELECT ... HAVING COUNT(xsd:integer(?a), xsd:integer(?b)) > 0
12:50:08 <Souri> Souri has joined #sparql
12:50:32 <LeeF> LeeF: I would want COUNT in Axel's example to be 2 because in the non-aggregate case you would have 2 rows that have at least one binding
12:50:43 <LeeF> ... (you have a 3rd row with no bindings)
12:51:29 <AndyS> LeeF, you can get it withj COUNT(COALESCE(int(?x),int(?y))  -- all answers are COALESCE
12:51:47 <LeeF> AndyS, yes, I can, it's not what my impl (or intuition) does though :)
12:52:07 <AxelPolleres> q?
12:52:09 <LeeF> ack AxelPolleres
12:52:10 <Zakim> AxelPolleres, you wanted to ask on what's the status of errors in SELECT expressions
12:52:11 <AxelPolleres> ack Axel
12:52:54 <LeeF> For me, the semantics of COUNT involve COUNTing rows that have _something_ in it
12:53:00 <LeeF> s/For me/LeeF: For me/
12:53:05 <LeeF> Souri: that is like in SQL 
12:53:36 <LeeF> ... it's like doing a COUNT(*) limited to the sliced multiset
12:53:50 <LeeF> ... if you do COUNT(X) in SQL and X has a null value, it's not counted
12:53:54 <AndyS> We coudl define COUNT(?x) as single arg only 
12:53:54 <LeeF> LeeF: that's where my intuition comes from
12:53:58 <dcharbon2> q+ 
12:54:22 <AxelPolleres> OPTION 1 : FILTER view, result = 1
12:54:23 <AxelPolleres> OPTION 2 : projection view, result = 3 (always the same as COUNT(*))
12:54:23 <AxelPolleres> OPTION 3 : count rows with at least one unbound, result =2 
12:54:31 <AxelPolleres> q?
12:54:38 <LeeF> ack dcharbon
12:54:48 <LeeF> dcharbon2: tried to figure out what i thought the meaning of some of these results is
12:54:56 <AndyS> Under option 2, COUNT(?x) == COUNT(*) ??
12:55:19 <LeeF> ... with OPTION 1: you're counting complete tuples - then you can use COALESCE to get the count of tuples with any content - you're still missing a way to get the COUNT of all tuples including empty ones
12:55:26 <LeeF> ... there are probably use cases for all 3
12:55:27 <bglimm> As I see it, the only difference is whether something like xsd:integer(nonInteger) inserts a null/unbound value or whether it takes the row out in which nonInteger occurred
12:55:56 <SteveH> I think you can think of them options as:
12:55:57 <SteveH> COUNT(xsd:integer(?a) + xsd:integer(?b))
12:55:57 <SteveH> COUNT(COALESCE(xsd:integer(?a), xsd:integer(?b)))
12:55:57 <SteveH> COUNT(1)
12:56:03 <SteveH> not (1)...
12:56:06 <SteveH> that's wrong
12:56:43 <LeeF> dcharbon2: I like OPTION 1 because I think it gives you the flexibility to do all of the approaches
12:57:05 <LeeF> LeeF: that doesn't match my intuition, but I find dcharbon2's reasoning compelling
12:58:19 <kasei> q+
12:58:38 <LeeF> ack kasei
12:58:56 <LeeF> kasei: OPTION 1 does not count any row with an error anywhere in the tuple
12:59:18 <LeeF> LeeF: is this just errors, not unbounds?
12:59:24 <LeeF> SteveH: no it's the same, because eval(unbound) = error
12:59:34 <LeeF> LeeF: that's kind of weird to me
12:59:42 <LeeF> SteveH: also not happy, but would be difficult to change
13:00:14 <LeeF> AndyS: you could change it by special casing aggregate arguments that just take a variable 
13:00:40 <bglimm> SELECT COUNT(xsd:integer(?x)) AS ?count with ?x/abc, ?x/efg gives ?count/0
13:00:57 <LeeF> LeeF: <convinces himself that this is OK>
13:00:59 <AxelPolleres> PROPOSED: go for Option 1 on COUNT and allow multi-argument counts.
13:01:04 <SteveH> +1
13:01:20 <dcharbon2> +1
13:01:22 <bglimm> +1
13:01:23 <ivan> +1
13:01:28 <Souri> 0
13:01:50 <pgearon> 0
13:01:57 <LeeF> AxelPolleres: With this approach, we don't need to introduce errors into our value system
13:02:10 <AndyS> OPTION 1 : error anywhere in tuple -> tupe not passed down (~whole tuple an error) ==> result = 1
13:02:47 <MattPerry> q+
13:02:53 <AxelPolleres> PROPOSED: go for Option 1 (error anywhere in tuple -> tupe not passed down (~whole tuple an error)) on COUNT and allow multi-argument counts.
13:03:14 <bglimm> +1
13:03:20 <SteveH> +1
13:03:21 <dcharbon2> +1
13:03:22 <AndyS> +1
13:03:27 <LeeF> MattPerry: does this mean that for the purpose of aggregates, unbound and error are the same thing?
13:03:30 <LeeF> AxelPolleres: yes
13:03:33 <MattPerry> +1
13:03:51 <AxelPolleres> RESOLVED: go for Option 1 (error anywhere in tuple -> tupe not passed down (~whole tuple an error)) on COUNT and allow multi-argument counts.
13:04:51 <LeeF> Souri abstaining
13:05:14 <LeeF> AxelPolleres: other aggregates?
13:05:36 <LeeF> SteveH: i think we need to agree which ones, then I can go reword the spec in terms of the discussion today, but don't think we should go through all of them today - most are obvious
13:05:59 <LeeF> AxelPolleres: should we go through them and discuss what happens with errors ?
13:06:08 <AndyS> SUM(?x,?y) = SUM(?x+?y) under this design : any error => error => no tuple regardless of cause.  Nice
13:06:09 <LeeF> s/with errors/???/
13:06:13 <AxelPolleres> rermaining aggregates SUM, MIN, MAX, AVG, GROUP_CONCAT, and SAMPLE
13:06:46 <SteveH> Definition : Sum
13:06:47 <SteveH> The Sum aggregate function is used by the SUM function in the syntax.
13:06:47 <SteveH> The Mutiset argument to Sum is regarded as a sequence of values, S, and Sum is defined such that:
13:06:47 <SteveH> Sum(S) = op:numeric-add(S0, Sum(S1..n)) when |S| > 1
13:06:47 <SteveH> Sum(S) = S0 when |S| = 1
13:06:47 <SteveH> Sum(S) = 0 when |S| = 0
13:06:49 <SteveH> In this way, Sum({1, 2, 3}) = op:numeric-add(1, op:numeric-add(2, 3)).
13:07:13 <LeeF> q+ to suggest that we PROPOSE to resolve ISSUE-53 noting that tuples with errors are excluded from the multiset of lists passed to aggregate functions, and that the count of such excluded errors is passed to the aggregate function
13:07:23 <MattPerry> ack me
13:07:55 <LeeF> ack me
13:07:55 <Zakim> LeeF, you wanted to suggest that we PROPOSE to resolve ISSUE-53 noting that tuples with errors are excluded from the multiset of lists passed to aggregate functions, and that the
13:07:56 <kasei> so you can Sum over a single bnode?
13:07:59 <Zakim> ... count of such excluded errors is passed to the aggregate function
13:08:20 <SteveH> kasei, good point
13:08:24 <LeeF> PROPOSED: resolve ISSUE-53 noting that tuples with errors are excluded from the multiset of lists passed to aggregate functions, and that the count of such excluded errors is passed to the aggregate function
13:09:14 <LeeF> SUM(_:haha) = _:haha
13:09:37 <AxelPolleres> +
13:09:38 <sandro> maybe SUM(X) is X-X+X  :-)
13:09:38 <AxelPolleres> +1
13:09:47 <kasei> Sum(S) = op:numeric-add(S0, 0) when |S| = 1
13:09:50 <LeeF> PROPOSED: resolve ISSUE-53 noting that tuples with errors are excluded from the multiset of lists passed to aggregate functions, and that the count of such excluded errors is passed to the aggregate function
13:09:58 <SteveH> SUM(x) = op:numeric-add(x, 0)
13:10:45 <LeeF> RESOLVED: resolve ISSUE-53 noting that tuples with errors are excluded from the multiset of lists passed to aggregate functions, and that the count of such excluded errors is passed to the aggregate function, no abstentions or objections
13:11:04 <AxelPolleres> close ISSUE-53
13:11:04 <trackbot> ISSUE-53 How are unbounds and errors treated in aggregate evaluation? closed
13:11:15 <LeeF> ISSUE-53 : resolved that tuples with errors are excluded from the multiset of lists passed to aggregate functions, and that the count of such excluded errors is passed to the aggregate function, no abstentions or objections
13:11:15 <trackbot> ISSUE-53 How are unbounds and errors treated in aggregate evaluation? notes added
13:11:28 <LeeF> subsubtopic: SUM
13:11:48 <LeeF> AxelPolleres: (1) any non-numeric value in SUM is not considered
13:12:00 <LeeF> ... (2) do we allow multi-argument SUM?
13:12:07 <LeeF> SteveH: my temptation is to sum over the tuple and then sum the sums
13:12:30 <LeeF> LeeF: that's what I do
13:13:03 <Souri> q+
13:13:04 <AxelPolleres> multi-argument SUM to be defined in the straightforward way, i.e. sum arguments 
13:13:19 <AxelPolleres> ?
13:13:34 <LeeF> ack Souri
13:13:51 <AxelPolleres> q+ to ask whether we need that at all
13:14:14 <LeeF> q+ to wonder if our resolution to ISSUE-53 makes multi-argument SUM act weird
13:14:23 <AxelPolleres> SUM ( ?X ?Y )  = SUM (?X+?Y ... same amount of characters.
13:14:38 <SteveH> ?a    ?b
13:14:38 <SteveH> 1      2
13:14:38 <SteveH> 3      A
13:14:38 <SteveH> SUM(?a, ?b) = 3
13:14:50 <kasei> q+
13:15:06 <Souri> sum(?a+?b) vs sum(?a,?b) ?
13:15:15 <kasei> SUM(?x,?y) is different from SUM(?x+?y) in the case of error/unbound, right?
13:15:40 <kasei> dropping a pair vs. dropping a single element...?
13:16:20 <Souri> do we need multi-arg sum ?
13:16:26 <kasei> ignore me. LeeF caught me up, but it brings up another issue.
13:16:26 <kasei> q-
13:17:07 <AxelPolleres> ack Axel
13:17:07 <Zakim> AxelPolleres, you wanted to ask whether we need that at all
13:17:19 <kasei> +1 Souri
13:17:45 <SteveH> happy to have SUM() syntactically limited to a single argument
13:18:03 <MattPerry> +1 single argument SUM() only
13:18:08 <LeeF> SELECT (SUM(?fingerLength, ?toeLength) AS ?sum) {
13:18:08 <LeeF>   { ?person :fingerLength ?fingerLength }
13:18:08 <LeeF>   UNION
13:18:08 <LeeF>   { ?person :toeLength ?toeLength}
13:18:08 <LeeF> }
13:18:30 <LeeF> LeeF: the above use case ends up passing nothing at all to SUM 
13:18:37 <LeeF> ... because every tuple has an unbound variable
13:18:38 <kasei> LeeF, I was just thinking of summing on OPTIONAL ?age.
13:18:39 <LeeF> ... which turns into an error
13:18:56 <iv_an_ru> iv_an_ru has joined #sparql
13:19:27 <kasei> SELECT (SUM(COALESCE(?fingerLength,0), COALESCE(?toeLength,0)) AS ?sum) ...
13:19:51 <AxelPolleres> q?
13:19:56 <AxelPolleres> ack LeeF
13:19:56 <Zakim> LeeF, you wanted to wonder if our resolution to ISSUE-53 makes multi-argument SUM act weird
13:21:07 <AndyS> q+
13:21:52 <LeeF> ack AndyS
13:22:00 <LeeF> AndyS: you can also do it by passing the sum into the union
13:22:11 <LeeF> ...by using the same variable
13:22:32 <Souri> +1
13:22:36 <LeeF> AxelPolleres: can we just keep SUM as a single argument aggregate?
13:22:55 <LeeF> SteveH: don't see a reason to, but won't object
13:22:56 <AndyS> +0
13:23:01 <LeeF> AxelPolleres: would anyone object to multi-argument SUM?
13:23:03 <LeeF> Souri: I would.
13:23:04 <SteveH> +0
13:23:19 <LeeF> AxelPolleres: Suggest based on this we keep SUM as single argument.
13:23:40 <AxelPolleres> PROPOSED: keep SUM as a single argument aggregate, no SUM(*)
13:23:44 <pgearon> +1
13:23:47 <MattPerry> +1
13:23:50 <AndyS> 0
13:23:53 <AlexPassant> +1
13:23:54 <SteveH> 0
13:23:56 <LeeF> abstain
13:24:01 <Souri> +1
13:24:52 <AxelPolleres> RESOLVED: keep SUM as a single argument aggregate, no SUM(*), 3 abstain, no objections
13:25:12 <SteveH> Definition : Min
13:25:13 <SteveH> The multiset of values passed as an argument is converted to a sequence S, this sequence is ordered as per the ORDER BY ASC clause.
13:25:13 <SteveH> Min(S) = S0
13:25:40 <LeeF> SteveH: believe this came out of difficulty coming up with something at F2F2
13:26:09 <LeeF> LeeF: agree this was the emerging but not overwhelming consensus at the last F2F
13:26:20 <LeeF> SteveH: can meet most use cases with casting and coalesce
13:27:59 <SteveH> so, MIN({(1, 2), (3, 4)} = MIN({1, 2, 3, 4})
13:28:25 <kasei> SteveH, are there use cases that can't be met with single-arg MIN/MAX if we have IF() ?
13:28:43 <kasei> I support multi-arg, but want to understand the options.
13:30:17 <SteveH> MIN(?x, COALESCE(?y, ?x))
13:30:46 <AndyS> LeeF: Notes that passing in tuples with error in val slot allows each aggregate to decide 
13:31:26 <LeeF> LeeF: in particular, whereas errors failing the tuple feels somewhat natural, innocent unbound variables now also yank out other nice values along with them
13:31:28 <AxelPolleres> MIN(COALESCE(?x,?y, ?z), COALESCE(?y, ?z, ?x) COALESCE(?z, ?x ?y))
13:31:38 <kasei> q+ to get clarification from SteveH
13:31:40 <Souri> Souri has joined #sparql
13:32:21 <SteveH> MIN(min(?x, ?y)) also works when ?x and ?y are numbers
13:32:22 <AndyS> Sometimes MIN(?x,?y) -> fn:min(MIN(?x),MIN(?y)) and does a reasonable (not quite same) thing
13:32:29 <SteveH> s/min/fn:min/
13:32:53 <kasei> is fn:min a thing?
13:33:01 <pgearon> it is for me
13:33:02 <LeeF> SteveH: I believe that multiargument MIN inwhich one of the variables is sometimes unbound is a corner case
13:33:05 <LeeF> LeeF: Granted
13:33:06 <AndyS> function fn:min comes from F&O
13:33:14 <LeeF> s/inwhich/in which/
13:33:15 <AndyS> IIRC
13:33:23 <kasei> right, but it's not a standard yet...?
13:33:32 <pgearon> +q
13:33:40 <AndyS> (actually it takes sequence? - rat hole)
13:34:09 <LeeF> AxelPolleres: (1) only allow single arugment MIN (2) reconsider resolution to ISSUE-53 
13:34:15 <AxelPolleres> q?
13:34:18 <LeeF> ack kasei
13:34:18 <Zakim> kasei, you wanted to get clarification from SteveH
13:34:39 <LeeF> kasei: re: use cases for multiargument MIN. Would an IF function address these use cases?
13:35:15 <LeeF> SteveH: my use cases involve not knowing the type of the values involved
13:35:44 <AxelPolleres>  greg says, you can use "<" + IF?
13:36:04 <AxelPolleres> leeF: ORDER BY is more powerful than "<"
13:36:16 <SteveH>  _:b < "foo"
13:36:51 <AndyS>  _:b < "foo" is an error : ORDER will give _:b before "foo"
13:37:00 <LeeF> ack pgearon
13:37:42 <LeeF> pgearon: fn:MIN(MIN(?a), MIN(?b)) - why is this not identical to MIN(?a, ?b)? because of ORDER BY semantics? errors? something else?
13:38:01 <LeeF> AndyS: fn:min is an aggregate function in F&O - it takes one argument - a sequece
13:38:06 <LeeF> ... we don't have sequence types in SPARQL
13:41:38 <LeeF> AxelPolleres: how would people feel about re-opening ISSUE-53 to pass errors to the aggregates?
13:41:39 <LeeF> q?
13:41:41 <LeeF> q+
13:41:51 <LeeF> ... COUNT would be defined to exclude thoes
13:41:56 <LeeF> ... MIN and MAX would exclude just those values
13:43:03 <LeeF> ack me
13:43:19 <AndyS1> AndyS1 has joined #sparql
13:43:51 <LeeF> LeeF: My concern is more that errors and unbounds are treated the same way - unbounds in SPARQL seem so natural and innocnet that I don't see why they should have such a strong negative effect on the rest of a tuple passed to an aggregate
13:43:58 <kasei> so this is AndyS' idea of using something other than Eval() in aggregate evaluation?
13:44:12 <LeeF> AndyS: we would need to change aggregate eval to special case an expression that was just a variable
13:44:22 <LeeF> SteveH: we'd also need a token for the unbound variable
13:44:53 <AxelPolleres> -.05 on introducing NULL in SPARQL
13:45:58 <AndyS> ?x and ?x+0 (?x always a number or unbound) are then different
13:46:10 <AxelPolleres> PROPOSED: reconsider the resolution on ISSUE-53 noting that tuples with errors passed to aggregate functions, and that the the aggregate function needs to define how tuples with errors are dealt with. COUNT excludes tuples with errors passed to the aggregate function
13:46:23 <AxelPolleres> for whom that wouldn't work?
13:47:24 <LeeF> I would prefer to continue as we are now rather than go with that proposal, AxelPolleres
13:47:53 <LeeF> I'm not too happy with having to introduce an unbound token, either
13:50:20 <LeeF> AxelPolleres: notes conensus around multiargument MIN and MAX
13:50:26 <SteveH> SUM() will flatten the tuples, and apply ORDER BY semantics over the list
13:50:43 <LeeF> s/SUM/MIN
13:50:48 <SteveH> s/SUM/MIN and MAX()/
13:51:07 <AxelPolleres>  AVG, GROUP_CONCAT, and SAMPLE
13:51:08 <SteveH> Definition : Avg
13:51:09 <SteveH> Avg(M) = Sum(M) / Count(M)
13:51:27 <LeeF> OK with me 
13:51:59 <LeeF> AxelPolleres: this would limit us to single argument AVG
13:52:07 <LeeF> SteveH: potentially a reason for multiargument SUM
13:52:16 <SteveH> implies that AVG() is single argument too
13:52:20 <LeeF> bglimm: or an argument for all single argument aggregates!
13:52:27 <LeeF> AndyS: what about lots of zeroes?
13:52:27 <SteveH> need special case for |M| = 0
13:53:02 <AxelPolleres> div by 0 is just an error, no special case needed.
13:53:12 <SteveH> Definition : GroupConcat
13:53:12 <SteveH> The multiset of values passed as an argument is converted to a sequence S.
13:53:12 <SteveH> GroupConcat(S) = fn:string-join(S, sep)
13:53:44 <SteveH> sep is currently suggested as " ", but ", " is better
13:54:15 <SteveH> we have a proposal for more syntax: GROUP_CONCAT["|"](?x)
13:54:20 <kasei> AndyS, do you want GROUPCONCAT or something else?
13:55:01 <AndyS> kasei, yes - I'd write a GroupConcat as I write isIRI but case insensitive keywords
13:55:25 <sandro> ☃
13:56:30 <SteveH> 2nd alt. GROUP_CONCAT[seperator="|"](?x)
13:57:17 <dcharbon2> SEPARATOR("|",GROUP_CONCAT(?x))
13:57:24 <SteveH> 2nd alt. GROUP_CONCAT[seperator="|", order_by="desc"](?x)
13:57:49 <kasei> on consideration, I think I like Andy's GroupConcat
13:58:04 <bglimm> Why not GROUP_CONCAT(?s, "|")
13:58:07 <dcharbon2> scratch mine, I don't like it
13:58:16 <AxelPolleres> GROUP_CONCAT("|")[?x]
13:58:25 <AxelPolleres> MIN[?X] ...
13:58:31 <dcharbon2> require the separator and place it as the first arg
13:58:32 <AxelPolleres> SUM[?X] ....
13:58:33 <AndyS> Custom agg example?
13:58:42 <SteveH>  custom:agg[?x]
14:00:10 <AndyS> q+
14:00:18 <kasei> SUM«?x» :)
14:01:05 <LeeF> AxelPolleres: what about square brackets for all aggregates?
14:02:13 <AxelPolleres> ivan, steveH: people expect to see '(' ')' for aggregates.
14:02:26 <SteveH>  custom:agg[](?x)
14:02:56 <AndyS> or custom:agg[?x]   
14:03:03 <ivan> group_concate[","](asfasfa)
14:03:07 <kasei> i like the idea of supporting order_by, also, though.
14:03:43 <LeeF> GROUP_CONCAT(x SEPARATOR ",")
14:03:49 <kasei> q+
14:03:57 <AxelPolleres> q+ to claim that GROUP_CONCAT(?x "|") would work
14:04:03 <ivan> sandro's idea: group_concat(a,b,c,separator=",')
14:04:24 <dcharbon2> +1 to group_concat(a,b,c,separator=",")
14:04:26 <sandro> I like the keyword better than the square brackets.
14:04:26 <LeeF> ack AndyS
14:04:51 <LeeF> AndyS: problem with the use of a keyword is we need to define the keywords... if group_concat is special, i find it odd that you can't write a custom function that could do the same thing as group_concat
14:05:28 <dcharbon2> back to liking group_concat(",",a,b,c) - separator is req'd and is first arg
14:05:28 <sandro> group_concat(list(a,b,c), ",")
14:05:30 <SteveH> group_concat(a,b,c separator=",") is nicer IMHO
14:05:48 <AxelPolleres> q?
14:06:03 <LeeF> ack kasei
14:06:17 <AndyS> GroupConcat(?a,?b,?c [",",true])   # true is order desc
14:06:25 <LeeF> kasei: i like the ability of providing ordering, or at least being flexible enough to do it in custom aggregate functions
14:06:33 <AxelPolleres> q?
14:06:53 <AxelPolleres> GROUP_CONCAT(?x "|") 
14:07:17 <AndyS> q+
14:07:34 <AndyS> ack AxelPolleres
14:07:34 <Zakim> AxelPolleres, you wanted to claim that GROUP_CONCAT(?x "|") would work
14:08:11 <sandro> (in RIF they don't need commas, much to my annoyance.)
14:08:12 <kasei> GROUP_CONCAT[ ex:seperator "|" ; ex:order_by ?x ]( ?x ) # has issues with order by expressions, but runs with the similarity to bnode syntax.
14:08:22 <SteveH> GROUP_CONCAT[seperator="|", order_by="desc"](?x)
14:08:40 <SteveH> or GROUP_CONCAT["|", "desc"](?x)
14:09:06 <MattPerry> can't you just do ORDER BY  on a subquery and then GROUP_CONCAT that
14:09:16 <SteveH> MattPerry, yeah, you can
14:09:22 <sandro> I'm very happy with named arguments, but maybe that's because I use python.
14:09:35 <SteveH> MattPerry, actually, no, aggregates can't preseve order
14:09:59 <LeeF> I think the most extensible thing is square bracket swith named params that affect the behavior of a function
14:10:11 <SteveH> LeeF, +1
14:10:12 <AxelPolleres> GROUP_CONCAT["|" "desc"](?x)
14:10:17 <LeeF> don't care too much where the square brackets go, mainly because I think it's somewhat hideous in all cases :)
14:10:19 <sandro> GROUP_CONCAT(a,b,c;d,e,f)     (one more option... note the semi.   I don't like it as much as names.)
14:10:46 <AndyS> q+ to speak about names
14:11:28 <AxelPolleres> I like sandros GROUP_CONCAT(a,b,c;d,e,f)  ; 
14:11:39 <LeeF> ack AndyS
14:11:39 <Zakim> AndyS, you wanted to speak about names
14:11:44 <AxelPolleres> q?
14:12:13 <kasei> q+
14:12:51 <LeeF> q+ to add propose that we not include GROUP_CONCAT in SPARQL 1.1 Query
14:13:06 <AxelPolleres> break
14:13:11 <AndyS> Arbitrary keywords make tokenizing hard :: select= ...
14:16:11 <sandro> There's no need for URIs or namespacing of argument names, decentralized extensibility, because they are scoped by the function name.
14:29:05 <LeeF> I'm not sure if it's on our agenda, but I think we ought to discuss the semantics of grouping by expressions
14:31:53 <pgearon> pgearon has joined #sparql
14:44:56 <AndyS> Nice trick:  use query string to URIs for custom aggs <http://foo/agg?sep=,>(?x, ?y)
14:45:14 <AxelPolleres> OPTION 1: agree on separation between two argument lists (Agg, Func) 
14:45:15 <AxelPolleres> OPTION 1.1:  agg[Func](Agg) - steveH1
14:45:15 <AxelPolleres> OPTION 1.2:  agg(Agg; Func) - sandro1
14:45:15 <AxelPolleres> OPTION 1.3:  agg[FuncNamed](Agg) - steveH2, here FuncNamed is a list of named functional arguments (e.g. f1=Func1, f2=Func2)
14:45:15 <AxelPolleres> OPTION 1.3:  agg(Agg FuncNamed) - sandro2 
14:45:16 <AxelPolleres> OPTION 2: drop functionally parametrises Aggs at all
14:45:18 <AxelPolleres> OPTION 2.1: we can still include GROUP_CONCAT without separator character (would still allow to solve Steve's use case, but without order)
14:46:02 <AndyS> While I like named arguments, I think there are practical difficulties.
14:47:29 <LeeF> OPTION 2.2: omit GROUP_CONCAT from SPARQL 1.1 Query
14:47:44 <AxelPolleres> s/OPTION 1.3:  agg(Agg FuncNamed) - sandro2/OPTION 1.4:  agg(Agg FuncNamed) - sandro2/
14:49:03 <LeeF> scribenick: AlexPassant
14:50:38 <AxelPolleres> OPTION2.3: GROUP Concat with fixed separator 
14:52:12 <AxelPolleres> once again all options...
14:52:13 <AxelPolleres> OPTION 1: agree on separation between two argument lists (Agg, Func) 
14:52:14 <AxelPolleres> OPTION 1.1:  agg[Func](Agg) - steveH1
14:52:14 <AxelPolleres> OPTION 1.2:  agg(Agg; Func) - sandro1
14:52:14 <AxelPolleres> OPTION 1.3:  agg[FuncNamed](Agg) - steveH2, here FuncNamed is a list of named functional arguments (e.g. f1=Func1, f2=Func2)
14:52:15 <AxelPolleres> OPTION 1.4:  agg(Agg FuncNamed) - sandro2 
14:52:16 <AxelPolleres> OPTION 2: drop functionally parametrises Aggs at all
14:52:18 <AxelPolleres> OPTION 2.1: we can still include GROUP_CONCAT without separator character (would still allow to solve Steve's use case with the multi-argument version and then removing the trailing separator, but without order )
14:52:21 <AxelPolleres> OPTION 2.2: omit GROUP_CONCAT from SPARQL 1.1 Query
14:52:23 <AxelPolleres> OPTION 2.3: GROUP_CONCAT with fixed separator
14:55:05 <AxelPolleres> Andy, steveH discussing parsing/grammar of FuncNamed
14:55:26 <AlexPassant> AxelPolleres: Summary of options
14:55:46 <AlexPassant> ... overall design decision
14:55:55 <AlexPassant> ... allow or not extra functional arguments
14:55:59 <AlexPassant> ... option 1 and 2
14:56:02 <AlexPassant> ... + suboptions
14:56:25 <AlexPassant> ... any objection re. we need the fonctional parameter
14:56:37 <AlexPassant> ivan: we need it
14:56:37 <pgearon> I object to option 2
14:56:47 <LeeF> pgearon, why?
14:56:49 <AlexPassant> ... limites use if we dont have it
14:56:58 <LeeF> 2.2!
14:57:07 <AlexPassant> ... option 2 only if 2.2
14:57:26 <AxelPolleres> q?
14:57:29 <LeeF> ack kasei
14:57:30 <AlexPassant> AxelPolleres: agreement on the suboptions ?
14:57:33 <sandro> q?
14:57:34 <pgearon> I agree with LeeF's use case. I also think that it's useless without being able to specify the separator
14:57:34 <LeeF> ack LeeF
14:57:34 <Zakim> LeeF, you wanted to add propose that we not include GROUP_CONCAT in SPARQL 1.1 Query
14:57:46 <AlexPassant> LeeF: designing new stuff that we have not done yet
14:57:55 <SteveH> q+
14:58:02 <kasei> q+
14:58:02 <AlexPassant> ... group_contact extremely useful but dont know the degree of extensibility
14:58:12 <AlexPassant> ... maybe should not do it 
14:58:23 <AlexPassant> SteveH: disagree with LeeF and ivan 
14:58:31 <AlexPassant> ... useful and stupid not to have it
14:58:47 <AlexPassant> ... would lead to lots of incompatible implementation if not standardised
14:59:07 <AxelPolleres> q?
14:59:13 <AxelPolleres> ack SteveH
14:59:22 <AlexPassant> LeeF: fixed sep not a good idea
14:59:23 <sandro> q+ to argue that named arguments are extensible, and just put them at the end.
14:59:34 <AlexPassant> ... ', ' if fixed separater
14:59:47 <AlexPassant> ... but still get implementations changing it to make it useful
15:00:19 <AlexPassant> kasei: extensions will have this need
15:00:32 <AlexPassant> ... encouraging implementations to pursue on their own
15:00:44 <AlexPassant> LeeF: different approaches, but will learn from it for next time
15:01:00 <AlexPassant> ivan: not talking about something really complex
15:01:08 <AlexPassant> ... all prog. languages have it
15:01:10 <AxelPolleres> objections to OPTION 2.3 Lee, Greg ? objection to OPTION 2.2 Steveh?
15:01:11 <AlexPassant> ... trivial detail
15:01:24 <AxelPolleres> q?
15:01:26 <AlexPassant> ... would generally be happy with any suboption
15:01:33 <AlexPassant> LeeF: disagree - not trivial
15:01:38 <AxelPolleres> q?
15:01:57 <AxelPolleres> ack kasei
15:01:58 <AlexPassant> kasei: ivan summarised my point
15:02:17 <AlexPassant> ... clearly needed, fairly simple thing
15:02:23 <AlexPassant> ... issue is syntax based
15:02:25 <ivan> ack kasei
15:02:57 <SteveH> q+
15:03:08 <AlexPassant> pgearon: semantics is straightforward
15:03:11 <ivan> ack sandro 
15:03:11 <Zakim> sandro, you wanted to argue that named arguments are extensible, and just put them at the end.
15:03:15 <AlexPassant> ... concern is the syntax
15:03:28 <AlexPassant> sandro: keyword argument is straightforward
15:03:31 <AlexPassant> ... cf python
15:03:37 <AlexPassant> ... extensibility: dont need to be URI
15:03:49 <AlexPassant> ... the function specifies how you interpret the keywords
15:04:04 <AlexPassant> AxelPolleres: arguing for 1.1 ?
15:04:08 <AlexPassant> ivan: yes
15:04:12 <AndyS> If sandro arguing to chnage all function in SPARQL?
15:04:26 <AlexPassant> sandro: not sure of punctiation between arguments, but yes
15:04:37 <AxelPolleres> sandro arguing for OPTION 1.4
15:04:39 <AlexPassant> AxelPolleres: arguments should be named ?
15:04:41 <AlexPassant> sandro: yes
15:04:42 <AxelPolleres> q?
15:05:04 <AlexPassant> SteveH: they're not functions, they're aggregates
15:05:16 <AlexPassant> ... nervous about combining function syntax and aggregated syntax
15:05:17 <LeeF> ack SteveH
15:05:34 <AxelPolleres> steveH "foo=bar" looks lot like an Expression ?
15:05:57 <AlexPassant> SteveH: not evaluated as functions
15:06:03 <pgearon> +q
15:06:16 <AlexPassant> ... execution model is different
15:06:22 <dcharbon2> q+ to compare FuncNamed option 1.4 to Ruby map arguments
15:06:23 <AlexPassant> ... helps if we're clear about that
15:06:24 <AxelPolleres> q+ to ask about  foo=bar really different from Expressions?
15:06:26 <AxelPolleres> q?
15:06:35 <ivan> ack pgearon 
15:06:53 <AlexPassant> pgearon: already understand what the evaluation is supposed to be
15:07:00 <AlexPassant> ... matter of syntax for expressing what we want
15:07:08 <AlexPassant> ... fine w./ having a fixed separator
15:07:16 <AlexPassant> ... can be syntactically clear about what we want
15:07:22 <AlexPassant> ... fine with sandro proposal
15:07:22 <ivan> group_concat(a,b,c,d ; separator=",')
15:07:32 <sandro> s/fixed separator/argument separator
15:07:34 <AlexPassant> s/fixed separator/fixed argument separator
15:07:46 <AxelPolleres> paul fine with separator character, e.g. Option 1.2?
15:08:13 <AlexPassant> AxelPolleres: 2 things: functional arguments shoud be named or not + separator
15:08:21 <SteveH> q+ to ask about ; specifically
15:08:41 <AxelPolleres> OPTION 1.5 = OPTION1.2+OPTION 1.4
15:08:51 <dcharbon2> doSomething(a,b, :foo => "bar", :fiz => "baz") in Ruby - keywords aren't fixed
15:08:52 <AndyS> group_concat(a,b,c,d ; separator=",", desc=true)  ????
15:09:24 <LeeF> q+ to wonder why we wouldn't do this same thing for scalar functions if we really do this
15:09:41 <AxelPolleres> q?
15:09:51 <dcharbon2> q-
15:09:52 <AlexPassant> dcharbon2: not familiar w/ python but sounds good
15:10:01 <AxelPolleres> ack Axel
15:10:01 <Zakim> AxelPolleres, you wanted to ask about  foo=bar really different from Expressions?
15:11:32 <AlexPassant> AxelPolleres: looks like expressions
15:11:53 <AlexPassant> ... personally not in favor of the " keywords = "
15:12:03 <AlexPassant> ... objections re. existing opsions ?
15:12:26 <ivan> group_concat(a,b ; separator -> ",") to make it look like rif ?
15:12:52 <AlexPassant> ... LeeF objects fixed separator
15:12:59 <AlexPassant> ... sandro objects with []
15:13:01 <LeeF> s/LeeF/LeeF and kasei/
15:13:08 <AlexPassant> ... left are: 1.2
15:13:17 <AndyS> ivan ,What does that mean in RIF (/me behind the times)?
15:13:23 <AlexPassant> ... 1.4 + 1.5
15:13:36 <AlexPassant> ... 2.1
15:13:47 <AlexPassant> ... group concat without separator
15:14:13 <AxelPolleres> OPTION 1.2:  agg(Agg; Func) - sandro1
15:14:23 <AxelPolleres> OPTION 2.1: we can still include GROUP_CONCAT without separator character (would still allow to solve Steve's use case with the multi-argument version and then removing the trailing separator, but without order )
15:14:48 <AlexPassant> ... 1.2 -> last option w/out objections
15:14:48 <LeeF> q?
15:15:12 <AlexPassant> AndyS: 1.2. is confusing
15:15:16 <AlexPassant> ... style-wise
15:15:19 <AlexPassant> SteveH: agrees
15:15:59 <ivan> group_concat(a,b ; separator -> ",")
15:16:15 <ivan> group_concat(a,b ; separator = ",")
15:16:42 <ivan> group_concat(a,b | separator -> ",")
15:16:59 <AlexPassant> SteveH: is ; an arbitrary choice ?
15:17:02 <ivan> group_concat(a,b | separator = ",")
15:17:15 <kasei> group_concat(a, b, separator = ",")
15:17:32 <Souri> ';' would be confusing
15:17:32 <AlexPassant> ... asking if there's a particular reason
15:17:39 <AxelPolleres> q?
15:17:47 <ivan> ack SteveH 
15:17:47 <Zakim> SteveH, you wanted to ask about ; specifically
15:17:47 <AxelPolleres> ack SteveH
15:17:50 <LeeF> ack me
15:17:50 <Zakim> LeeF, you wanted to wonder why we wouldn't do this same thing for scalar functions if we really do this
15:19:12 <AlexPassant> AxelPolleres: why the second one needs to be named, not the first one
15:19:22 <AlexPassant> ... would have been happy with ; without names
15:19:30 <AlexPassant> SteveH: names make more obvious there are different
15:19:32 <sandro> All in favor of group_concat(a, b, separator = ",")  ?
15:19:46 <Souri> q+
15:20:04 <AlexPassant> Souri: 2 kind of arguments
15:20:12 <sandro> All in favor of group_concat(a, b; separator = ",")  ?
15:20:12 <AlexPassant> ... different kind of parameters
15:20:20 <AlexPassant> ... why they cant have differnet ways of specifying ?
15:20:49 <SteveH> there's only expressions, and parameters, not two kinds of parameters
15:21:04 <AxelPolleres> Would anyone object against  either group_concat(a, b; separator = ",") or group_concat(a, b | separator = ",")
15:21:11 <SteveH> either is OK for me
15:21:18 <ivan> +1 +1
15:21:19 <AndyS> Pref ;
15:21:19 <Souri> 2nd one
15:21:28 <sandro> +1 "|"
15:21:32 <bglimm> either is ok
15:21:36 <kasei> +1 +0.5
15:21:42 <MattPerry> +1 "|"
15:21:43 <AxelPolleres> pref ;
15:21:50 <AlexPassant> ok for both
15:21:52 <pgearon> aesthetically, I like ; but I appreciate SteveH's concern and am happy with |
15:21:53 <dcharbon2> no pref
15:21:57 <Souri> q+ to allow a default
15:21:59 <ivan> group_concat(a, b | separator = ",") seems to have the majority
15:22:00 <AndyS> Isn't |  list tail in some languages isn't it?
15:22:04 <LeeF> no pref on separator, uncomfortable with the whole lot 
15:22:08 <SteveH> prefer |, but not strongly
15:22:12 <AlexPassant> yes AndyS 
15:22:46 <sandro> !    
15:22:48 <AndyS> f(a, 1|2, 3)
15:23:00 <kasei> I thought it was ||
15:23:01 <sandro> how about "--" as the separator
15:23:10 <AlexPassant> AndyS: dont have | at the moment, but...
15:23:55 <AxelPolleres> PROPOSED: GROUP_CONCAT syntax  shall be GROUP_CONCAT(a, b; separator = ",")
15:24:08 <sandro> +1
15:24:08 <bglimm> +1
15:24:12 <AxelPolleres> +1
15:24:13 <SteveH> +1
15:24:14 <kasei> +1
15:24:15 <AlexPassant> +1
15:24:16 <pgearon> +1
15:24:18 <ivan> amen = 1
15:24:24 <dcharbon2>  +1
15:24:38 <LeeF> 0
15:24:38 <Souri> q?
15:24:39 <AxelPolleres> RESOLVED: GROUP_CONCAT syntax  shall be GROUP_CONCAT(a, b; separator = ",")
15:24:42 <LeeF> I abstain.
15:24:43 <AlexPassant> AxelPolleres: also general mechanism for any parameterised function
15:24:56 <AlexPassant> Souri: wanted to mention the typical case
15:25:01 <AlexPassant> ... chose one character to be default
15:25:08 <AlexPassant> ... so 2nd part can be optional
15:25:13 <SteveH> +1 to a default
15:25:15 <AlexPassant> ... comma or space make sense
15:25:21 <AlexPassant> LeeF: comma is good
15:25:32 <AndyS> space
15:25:54 <AlexPassant> AxelPolleres: can we leave it to the editors ?
15:26:01 <AxelPolleres> dafault separator is currently " " 
15:26:06 <AxelPolleres> q?
15:26:09 <LeeF> ack Souri
15:26:09 <Zakim> Souri, you wanted to allow a default
15:26:11 <Souri> q-
15:26:13 <AxelPolleres> ack Souri
15:26:31 <AlexPassant> AxelPolleres: last aggregate - SAMPLE
15:26:42 <AlexPassant> ... multiparameter in group_concat ?
15:27:06 <Souri> no
15:27:19 <AlexPassant> btw, should we discuss AndyS's comment regarding _ in group_concat ?
15:27:35 <kasei> do we have a scalar CONCAT function?
15:27:42 <SteveH> kasei, not at the moment
15:27:48 <AxelPolleres> PROPOSED: to keep GROUP_CONCAT single expression
15:27:56 <SteveH> abstain
15:27:57 <kasei> then I think multi-expression is desirable
15:28:08 <Souri> group_concat(c1||c2||c3)
15:28:20 <AxelPolleres> +1
15:28:46 <AlexPassant> Souri: dont have a syntax
15:28:51 <AlexPassant> LeeF: part of the function library
15:28:56 <kasei> what I'd want is GROUP_CONCAT(CONCAT(" ", ?latitude, ?longitude))
15:29:30 <AlexPassant> LeeF: not decided but will probably be in the function library
15:29:31 <SteveH> kasei, GROUP_CONCAT(CONCAT(?key, "=", ?val)) is a good example of that
15:29:41 <SteveH> we do that a lot
15:29:45 <AndyS> function fn:string-join is two arg string concat
15:29:46 <kasei> yeah
15:29:46 <Souri> +1
15:29:54 <kasei> so let's just remember that we want a scalar CONCAT
15:29:58 <AlexPassant> AxelPolleres: can we resolve the single expression GROUP CONCAT ?
15:30:09 <AxelPolleres> RESOLVED: to keep GROUP_CONCAT single expression, one abstain, no objections
15:30:11 <AndyS> Sorry - I'm wrong - fn:concat N-ary
15:30:12 <AlexPassant> s/GROUP CONCAT/GROUP_CONCAT
15:30:21 <AlexPassant> AxelPolleres: next: SAMPLE
15:30:27 <AlexPassant> ... should be pretty clear
15:30:35 <AlexPassant> ... just need to figure out if that's multi expression
15:31:10 <LeeF> SteveH, pgearon abstaining to above resolution
15:31:35 <AxelPolleres> agreement to keep SAMPLE single expression
15:31:39 <AxelPolleres> ?
15:31:42 <kasei> +1
15:31:49 <Souri> q+
15:32:13 <kasei> COALESCE(SAMPLE(?name), SAMPLE(?fullname))
15:32:15 <AlexPassant> SteveH: e.g. want to pick some random names
15:32:33 <AlexPassant> ... not sure that's a strong enough usecase
15:33:01 <AxelPolleres> could be done with a UNION, it seems.
15:33:21 <pgearon> kasei - I don't understand the nested aggregates
15:33:24 <MattPerry> CONCAT(SAMPLE(?name), SAMPLE(?fullname))  ?
15:33:40 <Souri> sample(coalesce(?name,?fullname))
15:34:39 <Souri> q?
15:35:10 <AlexPassant> Souri: taking a sample with 4 values - some are NULL, can he SAMPLE select NULL as well ?
15:35:17 <Souri> q-
15:35:41 <AlexPassant> AxelPolleres: done with aggregates
15:35:48 <Souri> so did we agree on only single-arg sample?
15:35:55 <SteveH> yes
15:36:03 <AlexPassant> ... next: addressing extensibility in the spect
15:36:09 <AlexPassant> ... would like to leave this to the editors
15:36:19 <AlexPassant> ... "agregated extensibility" section
15:36:30 <AlexPassant> s/agregated/aggregates/
15:36:43 <AxelPolleres> aggregator extensibility section should go into spec... http://www.w3.org/mid/1777E22E-928C-4F75-8623-606FC0042454@deri.org
15:37:02 <AlexPassant> ... next: ISSUE-41
15:37:12 <AlexPassant> ... what do we allow in GROUP BY
15:38:17 <AlexPassant> SteveH: expressions are complicated
15:38:22 <AlexPassant> ... discussed in f2f2
15:38:50 <AlexPassant> kasei: used expressions in GROUP BY
15:38:52 <AlexPassant> ... was useful
15:39:19 <AlexPassant> ... pulled in out in the projection
15:39:51 <AlexPassant> AxelPolleres: use-case of Emmanuelle
15:39:54 <AlexPassant> ... related to the topic
15:40:00 <AndyS> Can do it with an assignment ^h^h^h^h^h^h^h subSELECT with expression
15:40:07 <MattPerry> can you project out of a subquery and then group by that in the outer query?
15:40:09 <kasei> is this dumb? and/or would it solve this problem? GROUP BY (?a+?b AS ?c)
15:40:20 <AndyS> ... but a bit ugly
15:41:20 <SteveH> { SELECT (?a + ?b AS ?c), * ... }
15:41:33 <AndyS> kasei - more consistent with SELECT needing AS but problem seems more to be about ?a and ?b scope in key/parition
15:41:37 <AlexPassant> AxelPolleres: not a variable that is projected
15:42:01 <kasei> AndyS, i would think they disappear and only ?c is relevant in the key/partition
15:43:02 <AlexPassant> ... could be solved with subselect that projects the variable
15:43:05 <AndyS> kasei - yes - that;s the mechanism I'd expect. (ARQ introduces vars if needed so AS isn't required)
15:43:07 <AlexPassant> ... would not lose expressivity
15:43:16 <Souri> example of Matt's suggestion in SQL: select max(deptno) from (select deptno, (case deptno when 10 then 'TEN' else 'OTHER' end) z from scott.emp) group by z;
15:43:22 <AlexPassant> ... propose to have only variables in GROUP BY
15:45:29 <AxelPolleres> Is the following currently possible?
15:45:33 <AxelPolleres> PREFIX : <http://books.example/> 
15:45:33 <AxelPolleres> SELECT  ?auth ?name (AVG(?numberOfBooks) AS ?averageNumberOfBooks)
15:45:33 <AxelPolleres> WHERE { ?auth :name ?name
15:45:33 <AxelPolleres>     {
15:45:34 <AxelPolleres>             SELECT ?auth (COUNT(?book) AS ?numberOfBooks)
15:45:34 <AxelPolleres>             WHERE {
15:45:36 <AxelPolleres>                     ?auth :wrote ?book .
15:45:38 <AxelPolleres>    }
15:45:40 <AxelPolleres>             GROUP BY ?auth
15:45:42 <AxelPolleres>            HAVING (?numberOfBooks > 5)
15:45:44 <AxelPolleres> }
15:45:53 <AxelPolleres> admittedly somewhat orthogonal
15:47:59 <AndyS>  Currently: [20]     GroupCondition     ::=     ( BuiltInCall  | FunctionCall  | '(' Expression  ( 'AS' Var  )? ')' | Var  )
15:49:38 <AlexPassant> AxelPolleres: re. emmanuelle comment - author and name are projected
15:49:44 <AlexPassant> ... would not be allowed ?
15:49:49 <AndyS> and [19]     GroupClause     ::=     'GROUP' 'BY' GroupCondition+
15:49:54 <AlexPassant> LeeF: cant do that
15:50:33 <AlexPassant> SteveH: legal in SQL
15:51:00 <AndyS> In SPARQL -- SELECT  ?auth SAMPLE(?name) (AVG(?numberOfBooks) AS ?averageNumberOfBooks)
15:51:52 <AndyS> because outer is a GROUP BY implicitly to get AVG 
15:52:38 <AxelPolleres> that query is allowed, but emanuele's intended behaviour could be achieved with a subquery 
15:55:34 <AxelPolleres> agreement to go forward with what's in the current grammar (variables and renames allowed in GROUP BY)
15:56:31 <AxelPolleres> PROPOSED: Close ISSUE-41 with the agreemen to go forward with what's in the current grammar (variables and renames allowed in GROUP BY)
15:56:41 <LeeF> +1
15:56:49 <kasei> so long as "renames" means expressions with optional renaming.
15:56:50 <AxelPolleres> +1
15:57:04 <AndyS> +1 -- as per kasei
15:57:39 <AndyS> Is GROUP BY (?a+?b) legal?  Yes.
15:57:46 <AxelPolleres> PROPOSED: Close ISSUE-41 with the agreemen to go forward with what's in the current grammar
15:57:49 <AxelPolleres> +1
15:57:54 <bglimm> +1
15:57:58 <Souri> +1
15:57:59 <AlexPassant> +1
15:58:03 <dcharbon2> +1
15:58:09 <pgearon> +1
15:58:12 <MattPerry> +1
15:58:16 <AxelPolleres> RESOLVED: Close ISSUE-41 with the agreemen to go forward with what's in the current grammar
15:58:21 <AxelPolleres> close ISSUE-41
15:58:21 <trackbot> ISSUE-41 Does GROUP BY allow variables or expressions, and does it allow mutiple expressions? closed
15:58:38 <AlexPassant> AndyS: question about HAVING
15:58:47 <LeeF>  ISSUE-41: resolved with the agreement to go forward with what's in the current grammar
15:58:47 <trackbot> ISSUE-41 Does GROUP BY allow variables or expressions, and does it allow mutiple expressions? notes added
15:59:04 <AndyS> What about the following: SELECT (COUNT(*) AS ?C) .... HAVING (COUNT(*) > 0 ) legal? I.e. same agg in two places, one HAVING
16:00:00 <AlexPassant> ... Is that allowed ? think so
16:00:12 <AlexPassant> SteveH: lots of complications
16:00:22 <SteveH> question about complications actually
16:00:35 <Souri> it becomes one group
16:01:16 <AxelPolleres> q?
16:01:46 <AlexPassant> AxelPolleres: is there an issue on that ?
16:01:50 <AlexPassant> AndyS: just checking if that works
16:01:59 <AxelPolleres> should we have a test case along these lines?
16:02:04 <AndyS> SELECT (COUNT(*) AS ?C) .... HAVING (?C > 0 )
16:02:43 <AlexPassant> AndyS: want to group something if the count is >0 and want also to return the count value
16:02:51 <kasei> i want to say projection happens too late for that
16:03:12 <AxelPolleres> main question is: Do we do HAVING before or after projection?
16:03:50 <AndyS> Agreement that not the second  not allowed.
16:03:51 <Souri> HAVING (?C > 0 ) would not work in SQL
16:03:52 <AlexPassant> AxelPolleres: agreement to allow the frst one, not sure about the 2nd
16:04:01 <kasei> if the first one happens, but projection happens before HAVING, then the COUNT(*) leaks through if you're not selecting it.
16:04:08 <AlexPassant> LeeF: fine 
16:04:30 <AxelPolleres> agreement to disallow projected variables being reused in HAVING
16:04:33 <AlexPassant> AxelPolleres: disallow projected variables in having
16:04:46 <AlexPassant> ... will be reflected in the spec
16:05:01 <AxelPolleres> ACTION: steveH to disallow projected variables being reused in HAVING in the spec
16:05:01 <trackbot> Created ACTION-209 - Disallow projected variables being reused in HAVING in the spec [on Steve Harris - due 2010-04-02].
16:05:25 <AlexPassant> ... looks like aggregates are done
16:05:35 <AxelPolleres> topic: NOT EXISTS vs. MINUS
16:05:54 <AlexPassant> ... next: NOT EXISTS / MINUS
16:06:33 <AlexPassant> SteveH: preference for the MINUS
16:06:37 <AxelPolleres> ACTION: Axel to draft a testcase for SELECT (COUNT(*) AS ?C) .... HAVING (COUNT(*) > 0 )
16:06:37 <trackbot> Created ACTION-210 - Draft a testcase for SELECT (COUNT(*) AS ?C) .... HAVING (COUNT(*) > 0 ) [on Axel Polleres - due 2010-04-02].
16:06:39 <AlexPassant> ... much easier to optimise
16:08:02 <AndyS> (5Store example - other engines differ)
16:08:11 <AlexPassant> ... OPTIONAL in NOT EXISTS
16:09:03 <AlexPassant> pgearon: also already implemented the MINUS semantics
16:09:56 <AlexPassant> SteveH: what happen in NOT EXISTS semantics if introducing a new variable ?
16:10:28 <SteveH> WHERE { <x> <p> ?o . NOT EXISTS { <a> ?p ?o } }
16:11:56 <AlexPassant> ericP: MINUS in the spec seems comparable to the one I have
16:12:07 <AlexPassant> ... right side has correspondence with the left side
16:12:16 <AlexPassant> ... substrct an empty set -> not eliminating anything
16:12:26 <AlexPassant> s/substrct/substract
16:14:39 <AlexPassant> .. cardinality for any particular solution is 0
16:16:27 <AlexPassant> SteveH: objection if NOT EXISTS only takes BGP + FILTER ?
16:16:39 <AlexPassant> kasei: can imagine also scoping to a Named Graph
16:17:30 <AndyS> NG with special case of GRAPH { ...} - several new grammar rules.
16:18:32 <AlexPassant> ericP: downside of using MINUS ?
16:18:42 <AlexPassant> AndyS: closest to the OPTIONAL NOT BOUND
16:18:43 <pgearon> q+
16:19:24 <kasei> yeah, def. would need new grammar rules. it's something like (GraphGraphPattern* + TriplesBlock* + Filter?)*
16:19:49 <AlexPassant> pgearon: trying to make algrbraic sound for construct that have no practical purposes
16:19:59 <AndyS> GraphGraphPattern needs to restrict to a TripleBlock not a general pattern
16:20:12 <AlexPassant> ... if different people implement diferently - it will not impact
16:20:24 <kasei> AndyS, yes, that too.
16:20:29 <kasei> very messy
16:20:50 <kasei> but simpler after you finish with parsing.
16:21:09 <pgearon> ack pgearon
16:21:46 <AlexPassant> ericP: does NOT EXISTS rely on compability f?
16:22:01 <AlexPassant> AndyS: no, like having a FILTER + sub-ask in it
16:22:12 <AlexPassant> ericP: algebra available?
16:22:44 <AndyS> http://www.w3.org/2009/sparql/docs/query-1.1/rq25.xml#defn_exists
16:23:25 <AlexPassant> AxelPolleres: feeling that won't get an agreement
16:24:00 <AlexPassant> sandro: can we just provide both semantics 
16:24:09 <AlexPassant> ... people coule implement either one and be correct
16:24:20 <AlexPassant> ... talking about the semantics not the syntax
16:24:33 <ericP> { a b c          { a b c      { a b c   7 7		   7 7	        8 8	   8 8	  MINUS    7 7 7 } =    8 8 8 } 7 7 7 8 8 8 }
16:24:53 <ericP> stupid linefeed compressing
16:25:39 <ericP> { a b c          { a b c      { a b c   7 7              7 7          8 8 8 8     MINUS    7 7 7 } =    8 8 8 } 7 7 7 8 8 8 }
16:25:48 <ericP> !!!
16:26:23 <ericP> { a b c          { a b c      { a b c
16:26:30 <ericP>   7 7              7 7          8 8
16:26:38 <ericP>   8 8     MINUS    7 7 7 } =    8 8 8 }
16:26:47 <ericP>   7 7 7
16:26:53 <ericP>   8 8 8 }
16:27:16 <ericP> what does NOT EXISTS do?
16:27:58 <LeeF> ericP, I don't think you can capture the difference solely by looking at solution sets
16:28:02 <LeeF> I think you need the query & the data
16:28:24 <LeeF> because I think the difference lies in how the Diff() operator is universally quantified over compatible solutions (or something like that)
16:28:33 <LeeF> (but i am likely very confused)
16:28:35 <kasei> LeeF, you may be right, but I'd guess that it's the same in this example.
16:28:37 <AlexPassant> sandro: both semantics and then editorial change if we can get both simpler ?
16:28:42 <LeeF> kasei, right, i agree
16:28:47 <sandro> (with the NOT EXISTS syntax)
16:29:40 <sandro> PROPOSED: Use the NOT EXISTS, with semantics which defined ONLY when the not-exists and minus semantics are the same.    Hopefully we'll find a clear way to express that in the spec.
16:29:49 <sandro> PROPOSED: Use the NOT EXISTS syntax, with semantics which defined ONLY when the not-exists and minus semantics are the same.    Hopefully we'll find a clear way to express that in the spec.
16:29:59 <sandro> PROPOSED: Use the NOT EXISTS syntax, with semantics which are defined ONLY when the not-exists and minus semantics are the same.    Hopefully we'll find a clear way to express that in the spec.
16:30:04 <AxelPolleres>  0
16:30:16 <kasei> regardless of the query, if you var-substitute the 7s and 8s on the lhs into whatever rhs patter you have, I think you know it will match given the rhs resultset from above.
16:30:56 <AndyS> I think they are the same in Eric's example but need to see query to be sure
16:31:19 <AlexPassant> LeeF: difference can not be explained easily
16:31:19 <pgearon> I'm OK with what Sandro proposes, but I prefer the MINUS syntax (since it's implicitly a binary operator, and a single word)
16:32:16 <AndyS> NOT EXISTS and restricted syntax ?
16:34:16 <AlexPassant> ericP: take advantage of existing implementaion of understanding ?
16:34:32 <AlexPassant> ivan:  more interested in people's understanding
16:34:35 <AxelPolleres> proposals on the table... 
16:34:39 <AxelPolleres> - agree on syntax NOT EXISTS, try to unify semantics (sandro)
16:34:39 <AxelPolleres> - agree on syntax MINUS, try to unify semantics (paul)
16:34:39 <AxelPolleres> - NOT EXISTS with restricted syntax (andy)
16:34:40 <AxelPolleres> ?
16:34:55 <pgearon> +q
16:34:56 <AlexPassant> SteveH: given none of us can distinguish NOT EXISTS and MINUS
16:35:03 <AlexPassant> ... issue re. how users would do it
16:35:18 <AlexPassant> ivan: how to explain without 'algebra', 'joint', etc.
16:35:36 <Souri> q+
16:35:38 <AlexPassant> SteveH: everything on the right is removed from the lest
16:35:43 <AlexPassant> s/lest/left
16:35:43 <AxelPolleres> {Left}  MINUS {�Right}
16:35:54 <AlexPassant> ... my point is that there's no different
16:35:59 <sandro> PROPOSED: Use the NOT EXISTS syntax, with semantics which are defined ONLY when the not-exists and minus semantics are the same.    Hopefully we'll find a clear way to express that in the spec.
16:36:13 <sandro> (I don't care which syntax, myself)
16:36:34 <AlexPassant> kasei: differnet implementers will find what's the easiest way to implement
16:36:45 <AlexPassant> ericP: concenred about the transformation challenge
16:37:05 <AlexPassant> ... easy in SQL semantics
16:37:11 <AlexPassant> ... need to get clear and simple semantics
16:37:28 <AlexPassant> AxelPolleres: 3 proposals
16:38:15 <AlexPassant> ... sandro ; pgearon -> sandro + s/NOT EXISTS/MINUS ; AndyS -> restrict the syntax
16:38:43 <sandro> Two question:   which syntax, and whether to restrict the syntax or just not specify the semantics where they conflict.
16:43:17 <AlexPassant> AndyS: SQL needs to get the same columns on left and right
16:43:22 <Souri> what are the diffs between SQL MINUS and proposed SPARQL1.1 MINUS?
16:43:44 <AlexPassant> ... set difference between the 2 cols
16:44:04 <AlexPassant> ericP: difference between SQL and SPARQL both in the joint and the minus
16:45:21 <AlexPassant> AxelPolleres: no convergence of the WG
16:45:31 <AlexPassant> ivan: same issue for the lst 6 months
16:45:40 <AlexPassant> ... will be in the same situation in 6 months
16:45:50 <AlexPassant> ... sandro's proposal makes sense
16:46:04 <AlexPassant> AxelPolleres: agree on the syntax ? what about the semantics ?
16:46:23 <AlexPassant> sandro: 2 proposals: (1) which syntax and (2) using "merge semantics"
16:47:21 <AlexPassant> AxelPolleres: conditions would be contextual ?
16:47:32 <AlexPassant> sandro: resolving syntax first ?
16:48:31 <AlexPassant> ericP: what about NOT FOUND insteand of NOT EXISTS ?
16:48:35 <AlexPassant> ... open world issue
16:48:52 <AxelPolleres> how about just NOT
16:48:54 <sandro> eric: "NOT EXISTS" is blood in the water to Open World folks.
16:49:16 <AlexPassant> AndyS: NOT EXISTS is negation by failure
16:49:30 <AxelPolleres> NAF
16:49:36 <LeeF> straw poll: what are your thoguhts on the syntax choice NOT EXISTS?
16:49:39 <pgearon> -1
16:49:40 <SteveH> 0
16:49:43 <dcharbon2> 0
16:49:44 <AndyS> +1
16:49:45 <LeeF> +1
16:49:46 <ivan> 1
16:49:47 <MattPerry> +1
16:49:47 <AxelPolleres> +!
16:49:47 <Souri> +1
16:49:47 <ericP> -1
16:49:48 <kasei> +1
16:49:50 <AxelPolleres> +1
16:49:51 <sandro> -1
16:49:53 <bglimm> 0
16:49:54 <AlexPassant> 0
16:50:14 <LeeF> +8 / 4 / -3
16:50:40 <LeeF> straw poll: what are your thoughts on the syntax choice MINUS?
16:50:41 <kasei> 0
16:50:43 <pgearon> +1
16:50:47 <AxelPolleres> 0
16:50:47 <AndyS> -1
16:50:48 <SteveH> +0.5
16:50:48 <ivan> 0
16:50:49 <LeeF> 0
16:50:49 <ericP> +1
16:50:51 <MattPerry> -1
16:50:53 <Souri> -1
16:50:54 <sandro> +1
16:50:56 <dcharbon2> 0
16:51:00 <bglimm> +1
16:51:07 <AlexPassant> +1
16:51:27 <LeeF> +6 / 5 / -3
16:52:03 <LeeF> PROPOSED: Negation syntax is via the "NOT EXISTS" keywords
16:52:10 <SteveH> +1
16:52:13 <AxelPolleres> +1
16:52:13 <ivan> +1
16:52:20 <bglimm> 0
16:52:22 <sandro> +0
16:52:23 <Souri> +1
16:52:31 <pgearon> +1 if someone can clearly specify the difference between the two semantics
16:52:52 <LeeF> RESOLVED: Negation syntax is via the "NOT EXISTS" keywords, bglimm and sandro abstaining
16:53:25 <ericP> +χ
16:56:06 <kasei> q+
16:56:32 <LeeF> PROPOSED: SPARQL 1.1 Query defines semantics of NOT EXISTS that give the same results for both algebraic and procedural approaches and leaves other cases undefined
16:57:38 <LeeF> ack pgearon
16:57:47 <AlexPassant> AxelPolleres: 2 semanitcs that are both informative
16:58:02 <AlexPassant> pgearon: ivan mentioned users / implementers difference
16:58:12 <AlexPassant> ... implementers doing it because of a use-case
16:58:27 <AlexPassant> ... asked by users to go that way
16:58:36 <AlexPassant> ... each implementation come from user requirements
16:58:41 <AxelPolleres> can we say "Normative only of OPTIONAL is not used in rhs"?
16:58:47 <AlexPassant> ivan: feeling is thqt 99% of use-cases will work with both semantics
16:59:03 <AlexPassant> pgearon: 100% will
16:59:06 <AxelPolleres> Can we say "Normative only if OPTIONAL is not used in rhs"?
16:59:09 <LeeF> ack Souri
17:00:52 <LeeF> ack kasei
17:01:22 <AlexPassant> Souri: diffeent from the MINUS in SQL based on what goes in both sides
17:01:28 <AlexPassant> ... simlar way to UNION differences
17:03:06 <AxelPolleres> Is that a reasonable way to go (rephrasing sandro)?
17:03:06 <AxelPolleres> - put both semantics in
17:03:06 <AxelPolleres> - put a *normative* restriction in that OPTIONAL is not allowed in rhs
17:03:07 <AxelPolleres> - put an *informative* section that describes the differences of the 
17:03:07 <AxelPolleres>   semantics when the restriction is dropped
17:03:51 <LeeF> { ?person a foaf:Person } NOT EXISTS { ?airplane a ex:Airplane } 
17:03:53 <AlexPassant> ivan: MINUS can have - in some cases - the effect of not returning anything
17:04:05 <AlexPassant> ... 'patch' that backfires in kasei's case
17:04:10 <AndyS> Problem case was { ?s ?p ?o } MINUS {} => nothing
17:04:14 <AlexPassant> kasei: ading it to MINUS is irrelevant
17:05:11 <ericP> { ?s ?p ?o } MINUS { ?x ?y ?z } => nothing
17:05:14 <ericP> (as well)
17:05:30 <Souri> +1
17:05:39 <Souri> Souri has joined #sparql
17:05:47 <AxelPolleres> break?
17:05:56 <AndyS> ericp: depends on data
17:05:57 <AxelPolleres> q?
17:06:01 <LeeF> ericP, is that how it is now? i thought the patch prevented that? or the patch ensures that?
17:06:06 <AndyS> sorry - see the point now
17:06:40 <AlexPassant> ericP: no intersecting domain -> nothing substracted
17:06:56 <LeeF> ericP, then wouldn't { ?s ?p ?o } MINUS { ?x ?y ?z } => everything ?
17:07:16 <pgearon> LeeF, yes
17:07:52 <LeeF>  { ?person a foaf:Person } NOT EXISTS { ?airplane a ex:Airplane } 
17:07:58 <Souri> {?s ?p ?o} NOT EXISTS {?x ?y ?z} => nothing
17:08:06 <AlexPassant> kasei: LeeF's pattern gives everyghin and NOT EXISTS gives nothing
17:08:24 <AlexPassant> ... ok with dropping optional in the right side but will affect implementations
17:08:51 <AndyS> "or dom(μ) and dom(μ') are disjoint"
17:08:53 <AxelPolleres> don't really see the use case for { ?s ?p ?o } MINUS { ?x ?y ?z }
17:09:07 <AndyS> Minus(Ω1, Ω2) =
17:09:07 <AndyS>     { μ | μ in Ω1 such that for all μ' in Ω2, 
17:09:07 <AndyS>     either μ and μ' are not compatible or dom(μ) and dom(μ') are disjoint }
17:09:35 <AlexPassant> LeeF: keep solutions on the left either not compatible not disjoint from the right
17:09:51 <pgearon> Axel, the only use-case I can think of is if a user defines the thing to take away from the LHS
17:11:04 <LeeF> reconvene at 10 to the next hour
17:11:06 <dcharbon2> Is this the email AndyS http://lists.w3.org/Archives/Public/public-rdf-dawg/2009JulSep/0137.html
17:11:32 <AndyS> Yes - thanks
17:12:43 <bglimm> http://lists.w3.org/Archives/Public/public-rdf-dawg/2009JulSep/0030.html
17:54:09 <AndyS>  Diff:             { μ | μ in Ω1 such that for all μ′ in Ω2, 
17:54:09 <AndyS>     either μ and μ′ are not compatible or μ and μ'
17:54:09 <AndyS>     are compatible and expr(merge(μ, μ')) has an effective boolean value 
17:54:09 <AndyS> 	of false }
17:54:26 <AndyS> (current 1.0 spec - diff is not exposed directly)
17:54:45 <sandro> it's probably a typo if there is no overlap in variables.
17:56:11 <AxelPolleres> ! EXISTS
17:56:15 <AxelPolleres> NOT EXISTS
17:56:18 <AxelPolleres> ?
17:56:40 <Souri> I like NOT EXISTS
17:57:19 <sandro> lee: why NOT EXISTS outside of FILTER?
17:57:29 <sandro> andy: It's just a nice shorter form.
17:57:40 <sandro> scribe: AxelPolleres 
17:57:44 <sandro> :-)
17:58:15 <AxelPolleres> Andy: I would like NOT EXISTS as shortcut for the FILTER ! EXISTS
17:58:17 <sandro> lee: I like to keep the mental models more clear
17:58:40 <AxelPolleres> andy: why not put in a pure form of MINUS then?
17:59:33 <LeeF> { ?person a ex:Person } MINUS { ?airplane a ex:Airplane }
17:59:51 <AxelPolleres> LeeF: people interested using the mental model of set subtract feel that in my example no persons should be lost
18:00:19 <AxelPolleres> Andy: happy with that, allows optimisation
18:00:40 <AxelPolleres> sandro: shouldn't that be a syntax error?
18:01:13 <AxelPolleres> LeeF: proposal ...
18:01:42 <LeeF> PROPOSED: Include MINUS as a binary graph pattern operator and include EXISTS and NOT/! EXISTS as FILTER functions/constructs
18:01:44 <ericP> +1
18:01:46 <AxelPolleres> ... include MINUS as binary graph pattern OP and include EXISTS as FILTER... 
18:01:48 <SteveH> +1
18:02:03 <AxelPolleres> +.99
18:02:07 <AxelPolleres> +1
18:02:08 <MattPerry> +1
18:02:20 <ivan> +1
18:02:21 <AlexPassant> +1
18:02:27 <AndyS> +0
18:02:31 <sandro> +1
18:02:44 <bglimm> +1
18:02:48 <Souri> +1
18:02:52 <LeeF> RESOLVED: Include MINUS as a binary graph pattern operator and include EXISTS and NOT/! EXISTS as FILTER functions/constructs, AndyS abstaining
18:03:22 <SteveH> marginal preference for !, dont dont care
18:03:44 <kasei> if we require FILTER keyword, I support !, not NOT
18:03:46 <AxelPolleres> Andy: ! Exists not possible outside the filter
18:04:08 <AxelPolleres> ... but ! EXISTS not really clear.
18:04:34 <AxelPolleres> Andy: why not just make NOT synonymous to !?
18:04:51 <AxelPolleres> EricP: don't want to dilute the grammar
18:05:49 <bglimm> s/Any/Andy/
18:06:00 <SteveH> q+
18:06:05 <LeeF> ack SteveH
18:06:05 <AxelPolleres> LeeF: preference in Boston on ! EXISTS
18:06:27 <SteveH> q-
18:06:39 <AxelPolleres> steve: if only in the FILTER then ASK could be reused instead of a new keyword.
18:07:18 <AxelPolleres> andy: that's not what I had agreed on
18:07:25 <ericP> s/on/to/
18:07:35 <LeeF> PROPOSED: The EXISTS filter function is negated with a ! 
18:07:38 <SteveH> +1
18:07:39 <kasei> q+
18:07:44 <LeeF> ack kasei
18:07:44 <AndyS> -1
18:08:21 <ericP> +1
18:08:34 <Souri> +1
18:08:43 <AndyS> q+
18:08:46 <AxelPolleres> greg: inside a FILTER it seems that '(' ')' enclosing the pattern would seem reasonable
18:09:01 <LeeF> ack AndyS
18:09:19 <AxelPolleres> LeeF: I suggest to ask the editors to come up with a proposal in the draft and move on to other issues
18:09:37 <AxelPolleres> Andy: curly braces because it is a pattern
18:10:47 <AxelPolleres> LeeF: maybe get to other issues than query for the moment to get a break
18:10:49 <LeeF> topic: Entailment Issues
18:11:12 <LeeF> http://www.w3.org/2009/sparql/track/issues/28
18:11:23 <AxelPolleres> Lee: ... talk about Entailment issues, we have a list of issues we probably can close.
18:12:44 <AxelPolleres> Axel: Birte suggests to not tackle entailment vs. updates for this time i.e. close ISSUE-28 and ISSUE-40 
18:12:58 <LeeF> PROPOSED: Close ISSUE-28 and ISSUE-40 by noting that our current work does not specify anything about the relationship between entailment regimes and SPARQL Update
18:13:03 <ivan> +1
18:13:09 <bglimm> +1
18:13:11 <sandro> +0
18:13:14 <SteveH> +0
18:13:14 <AndyS> +1
18:13:16 <Souri> Souri has joined #sparql
18:13:18 <AxelPolleres> 0
18:13:22 <AxelPolleres> q+
18:13:26 <ericP> ~0
18:13:42 <LeeF> RESOLVED: Close ISSUE-28 and ISSUE-40 by noting that our current work does not specify anything about the relationship between entailment regimes and SPARQL Update, sandro, steveh, axelpolleres abstraining
18:13:49 <LeeF> s/abstraining/ab straining
18:13:58 <LeeF> s/ab straining/abstaining
18:14:20 <sandro> axel: There would be a solution, to say for entailment we take the scoping graph for matching, then for update we use the ...
18:14:23 <LeeF>  ISSUE-20: resolved by noting that our current work does not specify anything about the relationship between entailment regimes and SPARQL Update
18:14:23 <trackbot> ISSUE-20 Graphs aware stores vs. quad stores for SPARQL/update (empty graphs) notes added
18:14:27 <LeeF>  ISSUE-28: by noting that our current work does not specify anything about the relationship between entailment regimes and SPARQL Update
18:14:27 <trackbot> ISSUE-28 Entailment regimes vs. update? notes added
18:14:30 <LeeF>  ISSUE-40: by noting that our current work does not specify anything about the relationship between entailment regimes and SPARQL Update
18:14:30 <trackbot> ISSUE-40 How can other entailment regimes plug in their semantics to SPARQL/Update? notes added
18:14:30 <sandro> axel: So you couldn;'t remove inferred triples
18:14:35 <LeeF> trackbot, close ISSUE-28
18:14:35 <trackbot> ISSUE-28 Entailment regimes vs. update? closed
18:14:39 <LeeF> trackbot, close ISSUE-40
18:14:39 <trackbot> ISSUE-40 How can other entailment regimes plug in their semantics to SPARQL/Update? closed
18:14:52 <sandro> +1 yeah, something like that sounds nice, but okay we're not ready to spec that.
18:15:06 <LeeF> Next issue: http://www.w3.org/2009/sparql/track/issues/34
18:15:26 <AxelPolleres> birte: problem is that we don't have time to write all options down and have other issues to focus on... i.e. time doesn't allow 
18:15:43 <AxelPolleres> Birte: on the nexty issue 34 ...
18:16:29 <AxelPolleres> ... we treat bnodes as blank nodes as skolem constants and so there's no issue.
18:16:42 <AxelPolleres> s/bnodes as//
18:17:11 <LeeF> PROPOSED: Close ISSUE-34 by accepting the current clearly defined semantics of blank nodes 
18:17:15 <AxelPolleres> ... proposes to close the issue since the behavior of bnodes is clearly defined by that.
18:17:23 <bglimm> +1
18:17:24 <AxelPolleres> +
18:17:25 <AxelPolleres> +1
18:17:38 <LeeF> RESOLVED: Close ISSUE-34 by accepting the current clearly defined semantics of blank nodes, no objections or abstentions
18:17:43 <AndyS> +1
18:17:46 <LeeF> trackbot, close ISSUE-34
18:17:46 <trackbot> ISSUE-34 How do other entailment regimes interact with aggregate grouping vis a vis blank nodes? closed
18:17:50 <AxelPolleres> no one objects/abstain
18:17:56 <LeeF> http://www.w3.org/2009/sparql/track/issues/42
18:18:16 <AxelPolleres> LeeF: RDFS and inconsistencies...
18:18:50 <AxelPolleres> Birte: applies to other entailment regimes with inconsistencies as well, all these have the same solution at the moment
18:19:16 <AxelPolleres> ... we don't enforce consistency checks, but say that if inconsistencies are checked that should be returned to the user.
18:19:32 <AxelPolleres> ... MAY in the RFC sense.
18:19:35 <Souri> q+
18:19:40 <LeeF> ack AxelPolleres
18:19:42 <LeeF> ack Souri
18:20:05 <AndyS> q+
18:20:21 <AxelPolleres> souri: we do actually point out if we find inconsistencies in OWL (at loading) 
18:20:30 <LeeF> ack AndyS
18:20:39 <LeeF> PROPOSED: Close ISSUE-42 noting the current text that says implementations MAY check for inconsistencies and SHOULD raise an exception if they come across an inconsistency
18:20:41 <AndyS> ack AndyS
18:20:45 <AxelPolleres> ... we could just answer with pointing out the inconsistencies
18:20:55 <sandro> +1
18:20:59 <AxelPolleres> Andy: if you have loaded correct data then it is not an issue.
18:21:00 <AndyS> +1
18:21:02 <bglimm> +1
18:21:03 <AxelPolleres> +1
18:21:04 <Souri> +1
18:21:06 <LeeF> RESOLVED: Close ISSUE-42 noting the current text that says implementations MAY check for inconsistencies and SHOULD raise an exception if they come across an inconsistency, no objections or abstentions
18:21:28 <ivan>  ISSUE-42: resolved by the current text in the document ( implementations MAY check for inconsistencies etc...)
18:21:28 <trackbot> ISSUE-42 TF-ENT What should happen for RDFS entailment in the face of inconsistencies? notes added
18:21:44 <AxelPolleres> subtopic: finite answer criteria
18:21:49 <ivan> trackbot, close ISSUE-42
18:21:49 <trackbot> ISSUE-42 TF-ENT What should happen for RDFS entailment in the face of inconsistencies? closed
18:21:51 <AxelPolleres> Birte: current state ...
18:22:08 <AxelPolleres> ... for RDF RDFS the main issues are infinite axiomatic triples.
18:22:45 <Souri> q+
18:22:51 <AxelPolleres> ... at the moment, we return graph vocabulary, RDF(S) vocabulary, but not those infinite rdf:_n properties unless they occur.
18:23:15 <AxelPolleres> ... RIF is more tricky, because infinity can occur through recursion over built-ins.
18:23:30 <AxelPolleres> ...  strongly safe fragment of RIF Core is fine.
18:24:04 <AxelPolleres> ... sandro asked whether finiteness criterion is really useful.
18:24:06 <Souri> q+ to ask about OWL 2 RL profile
18:24:54 <AxelPolleres> sandro: can't see practical reasons for finiteness criterion.
18:25:16 <AxelPolleres> ... think that's only from throeretical concerns.
18:25:41 <LeeF> ack Souri
18:25:41 <Zakim> Souri, you wanted to ask about OWL 2 RL profile
18:25:41 <AxelPolleres> LeeF: sandro, you think that we should not satisfy the finiteness criterion for RIF Core?
18:25:54 <LeeF> q?
18:26:09 <AxelPolleres> Souri: there's a separate issue for OWL2RL?
18:26:21 <AxelPolleres> Birte: OWL2RL is fine.
18:27:00 <AxelPolleres> Ivan: we felt in the Entailment-TF that we need the blessing of the group  to drop the finiteness restriction
18:27:29 <AxelPolleres> LeeF: extension mechanism says that we need to guarantee finiteness of answers
18:27:38 <AxelPolleres> q+
18:27:42 <LeeF> ack AxelPolleres
18:28:51 <sandro> ivan: weaken finiteness restriction from MUST to SHOULD
18:29:06 <AxelPolleres> Axel: I think we have to change the extension mechanism conditions in order to lift the restriction to finiteness.
18:29:17 <LeeF> PROPOSED: Update the SPARQL Query BGP entailment extension mechanism to weaken the requirement on finite answers to be a suggestion
18:29:22 <kasei> q+
18:29:28 <sandro> +1
18:30:48 <LeeF> ack kasei
18:31:26 <AxelPolleres> Axel: just asking whether there is a way to stream (infinite) results 
18:32:30 <AxelPolleres> Greg: for the RDF/RDFS case what if a term, that is entailed appears in the query but not in the queried graph, but is actually entailed?
18:32:54 <AxelPolleres> Birte: We can  take the graph + query vocabulary into account 
18:33:15 <AxelPolleres> ... that shouldn't be a problem.
18:33:17 <LeeF> PROPOSED: Update the SPARQL Query BGP entailment extension mechanism to weaken the requirement on finite answers to be a suggestion
18:33:21 <ivan> q?
18:33:29 <ivan> +1
18:33:34 <sandro> +1
18:33:34 <AxelPolleres> Axel: was thinking of that for D-entailment as well... taking the query vocab into account should solve that.
18:33:49 <LeeF> RESOLVED: Update the SPARQL Query BGP entailment extension mechanism to weaken the requirement on finite answers to be a suggestion, no objections or abstentions
18:34:03 <ivan> s/MUST/SHOULD/ is the proposed text for Andy, probably...:-)
18:34:24 <LeeF> ACTION: Birte to email out the text change needed to weaken the finite answer criteria in SPARQL Query
18:34:24 <trackbot> Created ACTION-211 - Email out the text change needed to weaken the finite answer criteria in SPARQL Query [on Birte Glimm - due 2010-04-02].
18:34:53 <AxelPolleres> Andy: make sure that it's carefully worded.
18:34:57 <LeeF> http://lists.w3.org/Archives/Public/public-rdf-dawg/2010JanMar/0468.html
18:36:19 <AxelPolleres> Birte: please let's first discuss the other condition in the extension mechanism which says that the scoping graph needs to be uniquely defined...
18:37:07 <AndyS> is uniquely specified and is E-equivalent to AG.
18:37:24 <AxelPolleres> ... should be rephrased
18:37:51 <AxelPolleres> Birte: I suggest to send a rephrasing proposal for that one as well
18:37:58 <LeeF> ACTION: Birte to propose change to unique specified extension criteria
18:37:58 <trackbot> Created ACTION-212 - Propose change to unique specified extension criteria [on Birte Glimm - due 2010-04-02].
18:38:11 <AxelPolleres> (along the lines uniquely defined up to graph equivalence ?)
18:38:13 <LeeF> http://lists.w3.org/Archives/Public/public-rdf-dawg/2010JanMar/0468.html
18:38:17 <AxelPolleres> q+
18:38:21 <LeeF> ack AxelPolleres
18:38:59 <LeeF> AxelPolleres: Since there are RDF stores that support datatype handline but not RDFS entailment... (1) this is not D-entailment (because that sits on top of RDFS entailment)
18:39:13 <LeeF> ... (2) what these stores do is convert literals with data types to an internal canonical form
18:39:20 <bglimm> "1.00"^^xsd:decimal is the same value as "1.0"^^xsd:decimal, but different lexical form
18:39:24 <LeeF> ... some of these would return the lexical forms of the original graphs and others would return only the canonical forms
18:39:29 <LeeF> ... two questions
18:39:37 <LeeF> ... Q1: does this influence the destination of D-entailment?
18:39:41 <LeeF> ... Birte convinced me "no"
18:39:44 <LeeF> ... so Q1 is fine
18:40:04 <LeeF> ... Q2: Should we also define a mini-entailment regime for these RDF stores that do datatype but not RDFS entailment?
18:41:39 <AxelPolleres>  G: :s :p 1
18:42:12 <AxelPolleres>  Q: ASK { :s :p "1.000"^^xs:decimal }
18:42:52 <AxelPolleres> according to the current SPARQL document, I understand that this would return "NO"
18:43:02 <AxelPolleres> (on simple entailment)
18:44:12 <AxelPolleres> sandro: I would like to support something like D^-.
18:44:34 <AxelPolleres> Andy: I wouldn't be implementing corner cases, probably.
18:44:37 <sandro> Sandro: I think its important the RDF stores be allowed to store only their internal form of the data values.       I don't want to force people to remember all the trailing zeros and whether it's xs:int vs xs:integer.
18:44:58 <AxelPolleres> Paul: I store as much as I can of the original structure.
18:45:01 <AxelPolleres> q+
18:45:34 <AxelPolleres> Paul: i internally convert a number to union of all the internal representations of that number.
18:45:36 <AndyS> AndyS: my stores store value for convenient ranges (e.g. +- 56 bits of precision for an integer)
18:45:47 <AxelPolleres> sandro: isn't that expensive
18:46:03 <AxelPolleres> paul: not that expensive.
18:46:09 <AndyS> and just store lexicial form style otherwise (out of range, bad lexical)
18:46:28 <AndyS> "3"^^xsd:byte
18:46:30 <AxelPolleres> greg: how do you ask for 3 as a number?
18:47:29 <AxelPolleres> sandro: If I put in 3.0000000....000000 you store all that?
18:47:40 <AxelPolleres> paul: yes, because I got complaints
18:47:42 <AndyS> Value stores vs derived datatypes
18:47:50 <AxelPolleres> q?
18:48:09 <AndyS> Also, currently because of NaN and Inf, TDB does not do xsd:double or xsd:float.
18:48:10 <Souri> q+
18:48:15 <LeeF> ack AxelPolleres
18:49:09 <LeeF> ack Souri
18:50:28 <AxelPolleres> Andy: how does D-entailment require RDFS?
18:50:38 <AndyS> (found it)
18:50:57 <AndyS> Except for XMLLiterals.
18:51:01 <AxelPolleres> Axel: D-interpretat�ions are rdfs-interpretations 
18:51:17 <sandro> souri: if you have a join of "0.3000000" and "0.3000" , do they match, and which do you return
18:51:19 <AxelPolleres> Souri: we do canonical value based matching in Oracle
18:51:26 <sandro> lee: in SPARQL 1.0 they don't match.
18:51:32 <AxelPolleres> ... so D^- would be welcome
18:52:02 <AxelPolleres> sandro: any reasonable implementaiton would do that.
18:52:51 <sandro> lee: "Value Entailment" ?
18:52:54 <AxelPolleres> ... maybe we need a better name.
18:53:22 <ivan> s/lee/Andy/
18:53:24 <sandro> +1 value entailment
18:53:26 <AxelPolleres> LeeF: seems we need no resolution, but consensus that we should go forward with that.
18:53:46 <AxelPolleres> .... i would prefer not to discuss rif:imports now.
18:54:02 <AxelPolleres> Birte/Axel: ok to move that to the entailment-TF
18:54:03 <sandro> (My expectation is that many/most serious SPARQL systems will do value-entailment only, since it's much more efficient.)
18:54:22 <AxelPolleres> topic: service description
18:54:57 <AxelPolleres> LeeF: what about saddle's supported resultformats part (we were asked in a comment) 
18:55:11 <sandro> uris like http://www.w3.org/ns/formats/rdfxml
18:55:15 <AxelPolleres> greg: eric and sandro are working on some proposal for URIs for that.
18:55:37 <sandro> a uri space for all formats that W3C  knows/cares about, we can make a URI for them here.
18:56:07 <AxelPolleres> ... we also will add mediatypes in the service description.
18:56:38 <AxelPolleres> ... i.e. we will go format with both resultformats and mediatypes.
18:56:51 <AxelPolleres> LeeF: more questions on that?
18:57:16 <AxelPolleres> Ivan/sandro: discussing namespace reservation...
18:57:35 <AxelPolleres> sandro: we need a resolution for that
18:58:28 <LeeF> PROPOSED: Request URIs of the form http://www.w3.org/ns/format/<foo> to represent graph formats and SPARQL XML and JSON result formats
18:58:37 <AxelPolleres> ivan: on andy's question for extensibility of formats such as TriG or N-Quads, that's not that simple.
18:58:40 <LeeF> PROPOSED: The SPARQL WG requests URIs of the form http://www.w3.org/ns/format/<foo> to represent graph formats and SPARQL XML and JSON result formats
18:59:10 <AxelPolleres> Andy: I was not asking for getting that in now, but just not to preclude that now. 
19:00:02 <AxelPolleres> Eric: we can't really do anything about the fact that ...
19:00:24 <AxelPolleres> (eric can you type that in, can't really follow the argument)
19:00:50 <LeeF> PROPOSED: The SPARQL WG requests URIs of the form http://www.w3.org/ns/format/<foo> to represent graph formats and SPARQL XML and JSON result formats
19:01:03 <ivan> +1
19:01:11 <AlexPassant> +1
19:01:17 <AxelPolleres> +1
19:01:30 <sandro> +1
19:01:34 <LeeF> RESOLVED: The SPARQL WG requests URIs of the form http://www.w3.org/ns/format/<foo> to represent graph formats and SPARQL XML and JSON result formats, no objections or abstentions
19:02:08 <AxelPolleres> ivan: scheme will be such that we can use non-graph formats as well
19:02:30 <AxelPolleres> ... N3 e.g. is not a standard, but there is a submission document, that'd work
19:02:47 <AlexPassant> ivan: got it thanks - http://www.w3.org/TeamSubmission/n3/
19:03:09 <AxelPolleres> sandro: as long as there's a stable spec for it, we're fine, practically.
19:03:37 <AxelPolleres> subtopic: vocabulary to describe datasets
19:03:45 <kasei> http://www.w3.org/2009/sparql/docs/service-description-1.1/xmlspec.xml
19:04:06 <AxelPolleres> greg: look at example in Section 4
19:04:26 <LeeF> http://www.w3.org/2009/sparql/docs/service-description-1.1/xmlspec.xml#id0x106c0320
19:04:48 <kasei> http://kasei.us/2009/09/sparql/sd-example.ttl
19:04:54 <AxelPolleres> http://www.w3.org/2009/sparql/docs/service-description-1.1/xmlspec.xml#id0x1f954840
19:05:35 <AxelPolleres> greg: explains the example.
19:06:45 <AxelPolleres> sandro: you're saying here that the name is the graph
19:07:04 <AxelPolleres> greg: two endpoints could have different local names for the same loaded graph
19:07:07 <sandro>             <sd:named rdf:resource="http://www.example/named-graph"/>
19:07:45 <AxelPolleres> greg: seems strange to me to put name in a string
19:08:03 <ivan> q+
19:08:18 <AxelPolleres> ... some pushback from people since these descriptions can get long.
19:08:29 <matt> matt has joined #sparql
19:08:33 <LeeF> q?
19:08:50 <LeeF> ack ivan 
19:09:13 <sandro> sandro: I have a problem with something have a "named" which is itself.      
19:09:28 <AxelPolleres> ivan: I wonder why you need a separate type for namedgraph and not just have a graph which happens to have a name property?
19:10:12 <ericP>  re: name as a literal: careful, this is area in which sandro has been painfully vigilant in the past
19:11:16 <AxelPolleres> greg: we need to derefernce by which name you can query the graph. 
19:11:42 <sandro> Instead of     			sd:named <http://xmlns.com/foaf/0.1/> ;        say:        sd:name "http://xmlns.com/foaf/0.1/"              
19:11:45 <AxelPolleres> ivan: i would be more comfortable on the statement about a string, not about the resource itself.
19:12:16 <AxelPolleres> greg: ok, if there's consensus on that, but strange to me.
19:12:18 <sandro> sandro: you're providing the name of the thing, not the thing itself.
19:12:25 <LeeF> sdLnamed <foo> vs. sd:named "foo"^^xsd:anyUri 
19:12:26 <LeeF> ?
19:13:34 <AxelPolleres> 0 (string representation conceptually better, but needs conversion from string to resource if you want to use it?)
19:14:11 <AxelPolleres> sandro: I think you need to put it in a literal to stop someone saying wrong things about the resource.
19:14:43 <LeeF> ACTION: Sandro to work with Greg on an example to investigate what happens when multiple descriptions of the same graph are merged together
19:14:43 <trackbot> Created ACTION-213 - Work with Greg on an example to investigate what happens when multiple descriptions of the same graph are merged together [on Sandro Hawke - due 2010-04-02].
19:14:45 <AxelPolleres> subtopic: powder
19:15:40 <AxelPolleres> ivan: powder can be used in a practical deployment, our description of a big dataset would be lenghy, in powder you could do it in a few lines.
19:16:33 <AxelPolleres> ivan: powder extends the RDF semantcis to bridge resources and their names.
19:17:11 <AxelPolleres> leeF: does that mean we don't say something about the practicality of that form of descriptions for larger graphs/datasets?
19:17:21 <AxelPolleres> ivan: we could put some text in the document.
19:17:42 <ivan> s/some text/some informative text/
19:17:55 <sandro> sandro: just use sparql to query the vast sparql service description.
19:18:03 <AxelPolleres> LeeF: so the answer is we could use POWDER for a lot of things, but it's not the default.
19:18:13 <LeeF> http://www.w3.org/2009/sparql/track/issues/43
19:18:23 <AxelPolleres> subtopic: ISSUE-43
19:19:17 <AxelPolleres> greg: the way this is modeled at the moment allows us to say in the context of this endpoint entailment X applies to that graph.
19:19:34 <AxelPolleres> ... if we collapse the description, we loose that feature.
19:21:15 <AxelPolleres> ivan: fine, I just asked why two different types of graphs.
19:23:37 <AxelPolleres> in the graph we have entailmentRegime (per graph) and defaultEntailmentregime (for named graph), but at the moment we can't model specific entailment regime only for the default graph.
19:24:05 <AxelPolleres> Greg: the vocabulary doesn't say you can request entailment, but that it is done on that graph.
19:26:06 <AxelPolleres> greg: the only way that entailment regime helps you is to know which entailment is already done on it.
19:26:13 <AxelPolleres> ... one entailment per graph
19:26:23 <AxelPolleres> ivan: why? seems unnatural to me.
19:26:57 <AxelPolleres> souri: we support parametric inference, i.e. you can ask that graph with that entailment...
19:27:18 <AxelPolleres> q+
19:27:24 <bglimm> q+ to say that you could have different endpoints per entailment regime
19:27:40 <sandro>    G1 |= G2
19:27:52 <sandro> query G1 or G2 as you like
19:28:01 <LeeF> ack AxelPolleres
19:28:10 <sandro>    G1 |=owl G2     G1 |=rdfs G3
19:29:03 <SteveH> ...or http://foo.example/graph?entailment=owl
19:29:14 <AxelPolleres> what you could do is  allow FROM <g,simple> or  FROM <g,rdfs> ...
19:29:21 <sandro>    G1 |=owl G4   AND   G1 |=rdfs G4         G4 has both owl and rdfs.
19:30:05 <sandro> I want to be able to write down   "|=" in the service description.
19:30:23 <Souri> q?
19:30:29 <sandro> q+
19:30:35 <AxelPolleres> greg: we agreed not to describe how to reauest entailment
19:30:41 <LeeF> ack bglimm
19:30:41 <Zakim> bglimm, you wanted to say that you could have different endpoints per entailment regime
19:30:57 <AxelPolleres> ivan: the information of how you can query a graph is valuable
19:31:22 <kasei> [ a sd:Graph ; sd:preEntailmentGraph <g1> ; sd:entailmentRegime ent:DL ]
19:31:23 <AxelPolleres> birte: another solution is that you can set up several endpoints, with several regimes, user chooses
19:32:02 <AxelPolleres> (remark.... that is orthogonal to the entailment specific uris mentioned before)
19:32:28 <AndyS> We currently do one graph (name) = one entailment regime.  Most commonly, entailment and base data. They actually share same base data but you can't tell.
19:32:59 <Souri> q+
19:33:37 <AxelPolleres> birte: we only allow OWL, no parameterisation
19:33:38 <LeeF> ack sandro
19:33:40 <sandro> q-
19:33:44 <LeeF> ack souri
19:33:54 <AxelPolleres> steveH: we only support RDFS in threestore
19:34:10 <AxelPolleres> souri: what about user defined rules.
19:35:03 <AxelPolleres> axel: that should be possible with rif:imports
19:35:25 <AxelPolleres> LeeF: so, do we want advertisement of entailmentregime per graph?
19:35:49 <AxelPolleres> greg: seems simple to me to do that, but other issues mentioned are not SD's job for the moment
19:36:12 <AxelPolleres> birte: what if a graph has several entailment regimes?
19:36:23 <AxelPolleres> andy: cardinality 1 makes sense 
19:37:00 <LeeF> q?
19:37:03 <AlexPassant> what about sd:defaultEntailment ent:xx ; sd:entailementRegime ent:YY 
19:37:29 <matt> matt has left #sparql
19:38:03 <AxelPolleres> axel: use case for multiple entailment regimes... you can always advertise additionally any "weaker entailments" than the strongest one you do, as long as the entailments strcitly subsume each other.
19:38:42 <LeeF> ACTION: greg to add ability to mark individual graphs with their entailment regime
19:38:42 <trackbot> Created ACTION-214 - Add ability to mark individual graphs with their entailment regime [on Gregory Williams - due 2010-04-02].
19:38:51 <AxelPolleres> q?
19:40:03 <AxelPolleres> q?
19:40:05 <AxelPolleres> q+
19:41:00 <AxelPolleres> q+ to ask whether we will have time to discuss further planning/publication (we need to)
19:41:21 <LeeF> http://lists.w3.org/Archives/Public/public-rdf-dawg/2010JanMar/0566.html
19:41:50 <AxelPolleres> LeeF: let's talk about further planning/publications rather on Tue in the next TC
19:42:01 <AxelPolleres> ... let's go around the table now.
19:42:06 <AndyS>  Update: {?x foaf:knows{2} ?y}  as triple pattern rewrite may not be so easy
19:42:15 <AxelPolleres> davidC: not filled in enough
19:42:21 <AxelPolleres> ivan: same
19:43:04 <AxelPolleres> leeF: restriction to retrieve duplicates might not be the right thing, e.g. following foaf:knows 8 times over several paths.
19:43:21 <AxelPolleres> .... fine with negated properties, etc., N3 syntax, etc.
19:43:41 <AxelPolleres> Alex: agree with allow duplicates, not up to dates with cycles.
19:44:54 <AxelPolleres> Paul: loop, I was thinking it did match, but not several times
19:45:11 <AxelPolleres> Souri: no duplicates is not a concern, allow duplicates also fine.
19:45:39 <AxelPolleres> matt: repition of nodes difficult.
19:45:50 <AxelPolleres> sandro: not followed.
19:46:06 <AxelPolleres> greg: 0-length paths scare me.
19:46:12 <AlexPassant> AndyS: with no duplicates, SELECT COUNT(*) WHERE {?x foaf:knows{2} ?y} return 1, right ? (in the 1st example)
19:46:40 <AndyS> yes - think so
19:46:57 <AlexPassant> ok so Im definitely for allowing duplicate, seems more coherent in that count use case
19:47:09 <LeeF> distinct!
19:48:01 <AxelPolleres> ?s :p? ?o
19:49:56 <AxelPolleres> Axel: duplicates worry me
19:50:19 <AxelPolleres> (see sixDegrees eaxample in my mail, that would blow up tremendously if we have duplicates)
19:50:33 <AxelPolleres> steve: I am fine with Andy's proposal so far.
19:51:09 <AxelPolleres> andy: can't think about anyting else important at the moment.
19:51:41 <AxelPolleres> LeeF: eric is 98% done with the basic federated query spec. 
19:51:51 <AndyS> cool
19:51:53 <AxelPolleres> Andy: are there implications on protocol?
19:52:05 <sandro> RRSAgent, make logs public
19:52:09 <sandro> RRSAgent, pointer?
19:52:09 <RRSAgent> See http://www.w3.org/2010/03/26-sparql-irc#T19-52-09
19:52:38 <AxelPolleres> LeeF: we want to go on Tue to ask editors for how documents are affected, how far we are from last call, 
19:53:02 <AxelPolleres> ... let's discuss all where we are in terms of schedule, not focus on technical issues.
19:54:20 <AxelPolleres> LeeF: thanks all, thanks hosts, thanks scribes!!! talk on on Tuesday
19:54:31 <AxelPolleres> adjourned
19:54:51 <AxelPolleres> rrsagent, make records public
19:57:44 <AndyS> AndyS has left #sparql
20:01:23 <kasei> SELECT * WHERE { ?s :* ?o }
21:32:48 <AndyS> AndyS has joined #sparql
22:34:37 <AndyS> AndyS has joined #sparql
22:34:52 <AndyS> AndyS has left #sparql
22:37:05 <SteveH> SteveH has joined #sparql
23:36:31 <LeeF> LeeF has joined #sparql
# SPECIAL MARKER FOR CHATSYNC.  DO NOT EDIT THIS LINE OR BELOW.  SRCLINESUSED=00001437