- From: Ruben Verborgh <ruben.verborgh@ugent.be>
- Date: Thu, 11 Feb 2016 21:11:48 +0100
- To: Markus Lanthaler <markus.lanthaler@gmx.net>
- Cc: public-hydra@w3.org
>> - In general, we need definitions of:
>> - collection
>> - view
>> - viewtemplate
>> It's important to know what exactly we are talking about.
>> In particular, we need to know whether a view is a collection,
>> and from the reuse of properties, this seems to be the case here.
>
> No, IMO a view wouldn't be a collection. I would define a collection as a
> set of resources that somehow belong together.
Fair enough.
> A view is a specific
> representation of a resource (in our discussion here of a collection).
…containing a set of resources that somehow belong together
(because they are together in one view).
I know it sounds like nitpicking, but it's really important
that we nail unambiguously what a view is,
and if it should not be a collection,
that this directly follows from that definition.
>> - Maybe the examples can be enhanced a bit with plaintext,
>> to understand what exactly the intended semantics are.
>
> Sure. Any suggestions on what to add?
The meaning of the new predicates introduced.
What does "view" etc. mean.
(Because see below: it both points to a subset of a collection
and a control to achieve such a subset.)
>> - In GET /markus/friends, I don't understand view/ViewTemplate.
>> What is this supposed to express?
>> "The friends have a view that is a template that."?
>> I see conceptually what is going on,
>> but I have trouble linking this with the view predicate.
>
> The resource /markus/friends has various views. Some of them might be
> referenced via a direct link, other via more complex, parameterizable
> hypermedia-controls.
I think we then conflate a view and a control to generate such a view;
we are conflating controls and the resources their instantiations point to.
>> - What is the domain of filterSpecification?
>> Is it something like "Expression"?
>
> Yes, perhaps a BooleanExpression.
>
>
>> If so, does "operands" also take an expression?
>> (I.e., can we compose recursively?)
>
> Yes, I would suggest to allow that.
Note that the operands are not boolean expressions.
(In the example, they evaluate to variable values.)
>> - Will the operators receive IRIs?
>> I.e., can I assume that "AND" is hydra:AND,
>> or was it intended as the string "AND"?
>
> I'm fine either way. If we make it a BooleanExpression, the value space will
> be closed and strings might be simpler in practice.
No no, they are two different things.
This is an expression (that evaluates to a boolean value):
{
"operator": "AND",
"operands": [
{ "variable": "first" },
{ "variable": "last" }
]
}
"AND" / hydra:AND would be an operator.
Note that the above is slightly underspecified:
the notion of "equality" is not expressed.
I.e., the above is meant to say
“this expression evaluates to TRUE for a given item iff either
1) both first and last are not specified
2) first is specified and equal to item.first
3) last is specified and equal to item.last
4) both 2 and 3”
>> - Is there a default semantics for viewtemplate? (AND?)
>
> No. I don't think that buys us much in this design.
I disagree.
Nobody will botter to specify filterSpecification all the time,
and if that's a requirement, I see ViewTemplate not being used altogether.
In absence of other indicators, the semantics should IMHO be
– AND
– exact equality (if parameter specified, always TRUE otherwise)
>> - With regard to naming, we still seem to have a "filter" concept.
>> We could/should get rid of this by renaming "filterSpecification".
>
> Where do you see the "filter" concept? Or do you mean the filter in
> *filter*Specification?
Yes.
> If that's the case, what would you renaming it to?
No strong opinion; just an opportunity to ged rid of a concept we don't use.
Could be "expression" or "matcher" or "condition".
>> - In GET /markus/friends?first=Ruben,
>> I think the view flaw really becomes apparent.
>> The thing seems to have two views. That's not right.
>
> Why is that not right?
Conflation of "view" and "control to generate a view".
>> - GET /markus/friends?first=Ruben does not explicitly say
>> that Ruben is part of the view.
>> This might or might not be necessary.
>> I would argue it is necessary for transparency:
>> if the thing is attached to the view,
>> clients can just read its elements,
>> without having to care whether something is a collection or a view.
>
> Not sure I follow... are you saying the response should say
>
> /markus/friends?first=Ruben hydra:member /ruben
>
> instead?
Yes.
> I think that would defeat the purpose of the view concept.
Not really.
A view gives access to a specific part of a collection.
(Closely related to my question if it is at all possible
to define a view such that it is not a collection.
If this is not possible, views are subcollections.)
> The
> server doesn't return any new data, it just gives a client a different
> perspective on a resource.
There's no requirement for data to be new.
> I don't want views to be tied to certain classes like collections.
Try to define it as such then ;-)
I think it will be really hard _not_ to make a view a collection.
> he only way for a
> client to get the number of items on a specific page would be to count them.
> Is everyone fine with that?
I'm not. Let's just define a predicate for items per page, like we had before.
It's very common on pagination anywhere else on the Web.
Best,
Ruben
Received on Thursday, 11 February 2016 20:12:21 UTC