- From: Ruben Verborgh <ruben.verborgh@ugent.be>
- Date: Sun, 10 Jan 2016 20:58:26 +0100
- To: Markus Lanthaler <markus.lanthaler@gmx.net>
- Cc: public-hydra@w3.org
Hi Markus,
Thanks for continuing to think about hydra:filter.
Unfortunately, I like the previous line of thought much more,
in which hydra:filter is a subproperty of hydra:search
and gives access to a derived (sub)collection of things.
I don't see the added value of having a view construct in between;
because after all, the result of filtering is just another collection
that is no more special than the initial collection.
The only "special" thing is that the result collection
has a relation to the original collection,
namely it has been passed through a filter,
and that filter is a hypermedia control clients can use.
Detailed comments below.
> What we want to describe are different views onto an
> (abstract) resource - in our case a collection. This is similar to
> representations in REST but not the same. Representations don't have
> identifiers in the form of URLs - our views do. In other words, a view is a
> derived resource, not a representation.
I don't mean to lecture about REST,
but it is necessary to point out that the arguments are not sound.
Even though I agree that a "view" as you propose it,
would be a resource, it is not for the argument you present.
The relation resource–representation is a relative one.
What is a representation from one viewpoint,
can be a resource from another.
Example:
"This video is really funny, but the audio in its AVI version is broken."
Then we have the video resource:
/videos/funny-video
which has several representations (AVI, MOV, MP4).
In order to make the statement above,
we also need to identify the "representation",
which thereby acts as a resource:
/videos/funny-video.avi
This resource itself can have representations in turn.
> We have been discussing introducing a hydra:filter property that takes a
> IriTemplate as value to reach such a filtered view. While this would
> technically work, I don't think it would be the best solution. It doesn't
> generalize nicely and is difficult to compose with other features.
I don't see why not.
A filter that acts as a hypermedia control,
describing how client input goes from one collection resource to another,
is perfectly composable and generalizable.
> Here's a simple example illustrating how I imagine it to work. Let's assume
> we have a collection /friends and want to filter it by the gender. This
> could be described as follows:
>
> @id: /friends
> member: [ ... ]
> view: {
> @type: ViewTemplate, IriTemplate
> template: /friends{?gender}
> mapping: {
> variable: gender
> property: http://schema.org/gender
> filter: true
> }
The alternative with hydra:filter as proposed before:
@id: "/friends",
filter: {
template: "/friends{?gender}",
mapping: {
variable: "gender",
property: "http://schema.org/gender"
}
}
> One such use case might be to only return some
> fields of a resource:
>
> @id: /person/markus
> ...
> view: {
> @type: ViewTemplate, IriTemplate
> template: /friends{?fields}
> mapping: {
> variable: fields
> fieldSelector: true
> anyOf: [ name, birthdate, address, ... ]
> }
Alternative:
@id: "/person/markus",
filter: {
template: /friends{?fields},
fieldSelector: {
variable: "fields",
anyOf: [ "name", "birthdate", "address" ]
}
}
Plus: filters are recursively composable;
an AND filter can be composed of OR filters, etc.
Is this the case with the filter-as-view proposal?
> You might wonder what the result of a GET on the ViewTemplate is. My current
> thinking is that, in the case of a collection, it should be a
> PartialCollectionView.
Alternative: simply a hydra:Collection,
indicating that it is part of the parent collection.
To summarize, I think that:
– expressivity and generalizability are no different
– the proposal needs (too) complex views
In general, this makes me wonder what the difference is
between a collection and a partial collection view.
Do we really need to distinguish?
Seems much simpler is everything is just a collection,
with a relation to its parent collection.
Way fewer classes; much easier to explain.
Best,
Ruben
PS For paging, I see the use of a partial view:
after all, there are more "parts" in the series.
But for filters, there's just one part: the parent,
and a possible child, which is just another filter.
Received on Sunday, 10 January 2016 19:58:53 UTC