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
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
> 

Reply via email to