- From: Gregg Kellogg <gregg@greggkellogg.net>
- Date: Fri, 25 Apr 2014 12:24:34 -0700
- To: Markus Lanthaler <markus.lanthaler@gmx.net>
- Cc: public-hydra@w3.org
On Apr 25, 2014, at 10:29 AM, Markus Lanthaler <markus.lanthaler@gmx.net> wrote:
> On Thursday, April 24, 2014 7:47 PM, Gregg Kellogg wrote:
>> On Apr 24, 2014, at 7:31 AM, Markus Lanthaler wrote:
>>> This goes much further than searching or filtering collections. It's really
>>> querying them (or the complete API for that matter). For the moment, yeah,
>>> it is out of scope I would say as we have to get the other things right
>>> first. But I do see this as a potential future work item.. maybe for a Hydra
>>> Query vocabulary. If you want take a stab at it.. we can certainly also
>>> start working on that sooner. I just don't want us to be distracted to much
>>> till we get the basics right.
>>
>> Best leave it to the future, then. There are enough tough knots to chew on
> right now.
>
> OK, I've added it to ISSUE-20 for the time being:
>
> https://github.com/HydraCG/Specifications/issues/20
>
> [...]
>
>>> Currently, you can't associate templated links to a type and then have it
>>> applied on all instances of that type. The templated link needs to be
>>> associated with the instance. The reasoning behind that decision is that
>>> each templated link will likely look different (at least the template). If
>>> you just append query parameters, that assumption doesn't hold though.
>>> Should we raise an issue for this?
>>
>> Yes, I think this is a serious shortcoming, and violates the DRY principle. If I have 20
>> properties upon which I may interact, and a couple of different ways to filter them, not to
>> mention define operations on them, repeating this information in each instance can consume
>> a large percentage of the HTTP payload. This is where some of my attempts at defining
>> templates presuming either the URL of the resource to be affected, or have a way to
>> reference that URL to form a URL based on it. Relative-URL arithmetic may make this
>> difficult unless every resource ends in "/", which may be too big of an assumption.
>
> You can bind operations to properties and classes, so that's not a problem.
> What you can't currently do, is to bind IRI template mappings to a templated
> link:
>
> :property a hydra:TemplatedLink .
>
> # this doesn't work! The range of :property is hydra:IriTemplate not
> xsd:string
> /something :property "my/{template}" .
>
> # you need to do something like
> /something :property [
> hydra:template "my/{template}" ;
> hydra:mappings ....
> ] .
I explored this in my Querying collections email:
:InterestCollection a hydra:Class;
hydra:supportedProperty [
a hydra:SupportedProperty;
hydra:multiple false;
hydra:property hydra:member;
hydra:required false
], [
a hydra:SupportedProperty;
hydra:property :searchInterestCollection
], .
:searchInterestCollection a hydra:TemplatedLink;
hydra:search [
a hydra:IriTemplate;
hydra:template "{?collection}?likeKind={?kind}";
hydra:mapping [
a hydra:IriTemplateMapping;
hydra:variable "collection";
hydra:property :interestCollection;
hydra:required true
], [
a hydra:IriTemplateMapping;
hydra:variable "kind";
hydra:property :likeKind
hydra:required true
] .
Although, I confused where the actual :searchInterestCollection property/value would go, and it does seem that it needs to go within an instance of a :InterestCollection.
We could consider doing something like an owl:Restriction on :interestCollection that requires :searchInterestCollection to have a specific value. I could then define that value in the API and not have to repeat it in a collection instance.
We could instead define a value such as
:SearchInterestValue a hydra:IriTemplate;
hydra:template "{?kind}";
hydra:mapping [
a hydra:IriTemplateMapping;
hydra:variable "collection";
hydra:property :interestCollection;
hydra:required true
], [
a hydra:IriTemplateMapping;
hydra:variable "kind";
hydra:property :likeKind
hydra:required true
] .
Then define a restriction such as
:interestCollection;
rdfs:subClassOf [
a owl:Restriction;
owl:onProperty :searchInterestCollection;
owl:hasValue :SearchInterestValue
] .
(Although, there may be a Hydra-specific way to do this as part of a revised Constraint).
What this would do is say that if I have a :InterestCollection, I can infer that it has a :searchInterestCollection property who's value is :SearchInterestValue, and thus not have to repeat myself by actually manifesting this in each instance.
I think we need other restrictions such as owl:oneOf and owl:allValuesFrom anyway, so this is in keeping with that.
Gregg
> --
> Markus Lanthaler
> @markuslanthaler
>
>
>
>
Received on Friday, 25 April 2014 19:25:04 UTC