On 2017-10-08 11:18, Andy Seaborne wrote:
> Please - a complete, verifiable, minimal example.
I will try to compile one simple :(
> Complete query, small amount of data.
>
> Snippets remove details that may matter.
>
> With a complete, verifiable, minimal example we can agree on what the
> question is.
>
> Indeed, it is not clear your output is even from Jena. The JSON
> formatting is not as Jena emits it.
I just used the Jena one. Only remove newlines in vars to make it shorter.
> Andy
>
> On 08/10/17 01:37, George News wrote:
>> Hi,
>>
>> Forget the last one. I've just realized again I included a mistake....
>> this is the good one (I hope ;))
>>
>> # Case 1)
>> select ?id ?value ?latitude ?longitude
>> where {
>> ......
>> }
>> ----------
>> {
>> "head": {
>> "vars": [
>> "id", "value", "latitude", "longitude"
>> ]
>> },
>> "results": {
>> "bindings": [
>> ]
>> }
>> }
>>
>> # Case 2)
>> select ?id (MAX(?ti) as ?time) ?value ?latitude ?longitude
>> where {
>> ......
>> }
>> ----------
>> {
>> "head": {
>> "vars": [
>> "id", "time", "value", "latitude", "longitude"
>> ]
>> },
>> "results": {
>> "bindings": [
>> {}
>> ]
>> }
>> }
>>
>> Now you can see the difference I was noticing. In the first case
>> bindings is an empty array (resultset.hasNext() -> false) and the second
>> is an array with an empty object (resultset.hasNext() -> true).
>>
>> Why is this behaviour? Hope you now understand the issue which in my
>> opinion is a kind of a bug.
>>
>> Regards,
>> Jorge
>>
>> On 2017-10-08 00:15, George News wrote:
>>> Hi Andy,
>>>
>>> Now I understand the misunderstanding between you and me. The responses
>>> I included in my original mail where wrong :( Please accept my
>>> apologizes.
>>>
>>> These are the right query/responses:
>>>
>>> # Case 1)
>>> select ?id (MAX(?ti) as ?time) ?value ?latitude ?longitude
>>> where {
>>> ......
>>> }----------
>>> {
>>> "head": {
>>> "vars": [
>>> "id", "time", "value", "latitude", "longitude"
>>> ]
>>> },
>>> "results": {
>>> "bindings": [
>>> {}
>>> ]
>>> }
>>> }
>>>
>>> # Case 2)
>>> select ?id (MAX(?ti) as ?time) ?value ?latitude ?longitude
>>> where {
>>> ......
>>> }----------
>>> {
>>> "head": {
>>> "vars": [
>>> "id", "value", "latitude", "longitude"
>>> ]
>>> },
>>> "results": {
>>> "bindings": [
>>> ]
>>> }
>>> }
>>>
>>> Now you can see the difference I was noticing. In the first case it is
>>> an empty array (resultset.hasNext() -> false) and the second is an array
>>> with an empty object (resultset.hasNext() -> true).
>>>
>>> Why is this behaviour? Hope you now understand the issue which in my
>>> opinion is a kind of a bug.
>>>
>>> Regards,
>>> Jorge
>>>
>>>
>>>
>>>
>>>
>>> On 2017-10-06 16:11, Andy Seaborne wrote:
>>>>
>>>>
>>>> On 06/10/17 12:26, George News wrote:
>>>>> On 2017-10-06 11:25, Andy Seaborne wrote:
>>>>>> The two result sets you show both have one row, with bindings. That's
>>>>>> consistent with aggregation of nothing (no groups, or if no GROUP
>>>>>> BY, no
>>>>>> results from the WHERE pattern.
>>>>>
>>>>> I don't see it the same way. The first one (without max) is an empty
>>>>> array, while the second (with max) has an array with one object
>>>>> (empty).
>>>>
>>>> "results": {
>>>> "bindings": [
>>>> {}
>>>> ]
>>>> }
>>>>
>>>> both times.
>>>>
>>>> An array of rows, a row is {} i.e. no keys, no variables.
>>>>
>>>> But the query isn't legal so I don't know what is actually happening.
>>>>
>>>>>
>>>>>>
>>>>>> MAX() of nothing is unbound but for any aggregation, there always is
>>>>>> a row/
>>>>>>
>>>>>> c.f. COUNT(*) is 0 when there are no solution.
>>>>>>
>>>>>> It's just MAX(...) can't return a "there isn't anything value"
>>>>>>
>>>>>> Andy
>>>>>>
>>>>>
>>>>> I see your point as this gives a wrong idea on the result set as it
>>>>> really is empty. If I dont get any time I cannot calculate the max of
>>>>> nothing. In principle this is what Jena is returning as the object is
>>>>> empty, but there should be a way to not get this empty object
>>>>> within the
>>>>> array of bindings.
>>>>>
>>>>> Is there anyway I can check the resultset pointer to get the next()
>>>>> value without moving the pointer? I need to know in advance to
>>>>> retrieve
>>>>> all the results if there are or aren't any.
>>>>>
>>>>>
>>>>>>
>>>>>> On 06/10/17 10:15, George News wrote:
>>>>>>> Hi all,
>>>>>>>
>>>>>>> I am executing a SPARQL with MAX aggregate function and I'm facing a
>>>>>>> strange behaviour, or at least I think it is.
>>>>>>>
>>>>>>> The snipset of the select variables is the following:
>>>>>>>
>>>>>>> select ?id (MAX(?ti) as ?time) ?value ?latitude ?longitude
>>>>>>> where {
>>>>>>> ......
>>>>>>> }
>>>>>>
>>>>>>>
>>>>>>> If I launch the SPARQL query and there are results matching there
>>>>>>> is no
>>>>>>> problem and I get the expected answer.
>>>>>>>
>>>>>>> However if I launch the same query over another database and there
>>>>>>> should be no match I get the following:
>>>>>>>
>>>>>>> {
>>>>>>> "head": {
>>>>>>> "vars": [
>>>>>>> "id", "time", "value", "latitude", "longitude"
>>>>>>> ]
>>>>>>> },
>>>>>>> "results": {
>>>>>>> "bindings": [
>>>>>>> {}
>>>>>>> ]
>>>>>>> }
>>>>>>> }
>>>>>>>
>>>>>>> As you can see, although the resultset seems to be empty it is
>>>>>>> not. It
>>>>>>> is returning one empty object. Actually by checking
>>>>>>> resultset.hasNext()
>>>>>>> within the code it returns true.
>>>>>>>
>>>>>>> If I remove the MAX function from the variables everything is ok,
>>>>>>> and no
>>>>>>> empty object shows up.
>>>>>>>
>>>>>>> select ?id ?value ?latitude ?longitude
>>>>>>> where {
>>>>>>> ......
>>>>>>> }
>>>>>>> ----------
>>>>>>> {
>>>>>>> "head": {
>>>>>>> "vars": [
>>>>>>> "id", "value", "latitude", "longitude"
>>>>>>> ]
>>>>>>> },
>>>>>>> "results": {
>>>>>>> "bindings": [
>>>>>>> {}
>>>>>>> ]
>>>>>>> }
>>>>>>> }
>>>>>>>
>>>>>>> Why is happening that? Is this the expected behaviour? I guess it
>>>>>>> shouldn't. When you use COUNT funtion it returns 0, but MIN/MAX/etc
>>>>>>> arer
>>>>>>> different functions and if there is no result nothing should appear.
>>>>>>>
>>>>>>> Any help/tip is more than welcome.
>>>>>>>
>>>>>>> Regards,
>>>>>>> Jorge
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>
>>>
>