- From: Dietrich Schulten <ds@escalon.de>
- Date: Wed, 08 Oct 2014 10:45:45 +0200
- To: public-hydra@w3.org, John Walker <john.walker@semaku.com>
- Message-ID: <90r1gcuhyb5t1j758rg6lwtg.1412755685515@email.android.com>
Hi John, ---- John Walker schrieb ---- > Hi Dietrich, > > > > Some comments on the RDF side of things inline. > > > > John > > > > > > On October 7, 2014 at 9:03 AM Dietrich Schulten <ds@escalon.de> wrote: > > > > > > -----BEGIN PGP SIGNED MESSAGE----- > > Hash: SHA1 > > > > Hi, > > > > I'm toying with the event API demo > > http://bit.ly/hydra-console-event-api. I want to share a few > > observations and ideas, backed by my experience with designing ReST APIs. > > Disclaimer: I have some basic knowledge about rdfs, but my ideas > > simply might not work as linked data. > > > > The meat of the event-api is at > > http://www.markus-lanthaler.com/hydra/event-api/vocab. > > Observation: the vocab is quite lengthy for a simple use case. 241 > > LOC, much of it seems repetitive. > > > > We are talking about a pretty standard situation: you can POST, PUT > > and DELETE to the /events resource. If you POST or PUT, your request > > should contain an object that has attributes as defined by > > http://schema.org/Event. Only some of them are required, most are not > > supported. > > > > > > Your /events page would be a hydra:Collection of schema:Event 'instances'. > > As such you would presumably only allow GET and POST methods on the collection. > > PUT and DELETE would be more suited for use on the schema:Event instances. > > > > My general feeling is: it should not be necessary to maintain such a > > large description. Somehow we must leverage convention over > > configuration and the existing vocabs in such a way that I only need > > to define things I cannot take for granted. And we must be more DRY. > > > > I want to keep my context short so I can embed it. With Javascript > > clients in mind, I'd rather have everything in the resource that is > > needed to work with it. > > > > In the following I want to discuss the EntryPoint, the EventCollection > > and the Event. > > > > - ------------------------ > > > > In my ideal world this could be the EntryPoint: > > > > { > > "@context": { > > "@vocab" : "http://schema.org", > > "hydra" : "http://www.w3.org/ns/hydra/core#" > > }, > > "@id": "http://www.markus-lanthaler.com/hydra/event-api/", > > "@type": "hydra:EntryPoint", > > "event": { > > "@id": "http://www.markus-lanthaler.com/hydra/event-api/events/", > > "@type": "hydra:Link" > > } > > } > > (I prefer full urls because they work in stock rest clients.) > > > > Short, no external context, no site-specific vocab. > > The question is, is this valid from a Linked Data point of view? > > > > > > Here you are saying the resource http://www.markus-lanthaler.com/hydra/event-api/events/ has rdf:type hydra:Link, which does not seem correct. Yes, it seems I cannot put hydra:Link into the json, it belongs into a site-specific vocab or ApiDocumentation. > > I would expect that resource to have rdf:type hydra:Collection instead. > > > > Note that the event property is now http://schema.org/event, no longer > > EventCollection. > > > > > > By doing this I would expect the thing you link to with schema:event is a schema:Event, but seems that you link to a hydra:Collection of events. I mean to link to a multitude of events since that seems a possible value for schema:event. My idea was that the server is free to present the events as a hydra:Collection or a hydra:PagedCollection, e.g. to make them searchable, or to add other links to the collection as needed. After all, the response does contain a list of events, only decorated by some additional affordances. If the response were an html page, the only requirement would be that it contains schema:Event instances which are annotated to be recognizable as such. My general idea so far is: a vocabulary is about the meaning of things, not (necessarily) about strong types. In that sense a hydra:Collection might be a list of schema:Event at the same time. Is a link to a json of type hydra:Collection which somewhere inside contains an array of schema:Event a possible value for schema:event? > > > > First of all, http://schema.org/event appears on Place, Organization > > and a number of Actions. In RDF, are we free to use schema:event on an > > EntryPoint? Can I state > > > > "schema:event rdfs:domain hydra:EntryPoint" > > > > somewhere in my context to allow this usage? And do I have to, don't I > > say that already by using schema:event on a hydra:EntryPoint? In the > > json world no "static typing" exists that would prevent me from adding > > any attribute. > > > > > > This is not wrong per-se, but would entail that all resources this property is used on have rdf:type hydra:EntryPoint which does not seem correct. > > If you used the sematically weaker schema:domainIncludes property, it would be OK from an RDF perspective. > > However I'd have to question if/why you would want to link from an API entry point to an event, unless you have conferences about an API of course :) > > > > An alternative could be not to use hydra:EntryPoint, but Organization > > or Place as @type of the index resource. Now that I think of it, that > > also makes a lot of sense. Probably the owner of the events wants to > > tell something about himself on the index resource anyway. But the > > question remains: may we attach event to EntryPoint at all? > > > > > > Indeed linking direct from an Organization or Place to an associated Event make perfect sense. > > The idea here is to link the list/collection of all registered events to the EntryPoint, not a specific Event instance. > > > > Second: Assuming that we are allowed to use http://schema.org/event: > > Values of > > schema:event are expected to be of type Event, not of type @id. It > > would be easy to program clients so that they understand the > > difference and transparently resolve links for data. But does RDF > > allow that? Is it correct to use a link to events instead of embedding > > the events themselves? If not, can Hydra introduce such a convention? > > Or can I at least redefine > > > > "schema:event rdfs:range jsonld:@id" > > > > somewhere in my @context? > > > > > > Suggest to go re-read the JSON-LD spec as it seems you misinterpret how @id is used. Yes. Meanwhile I have learned that @id is not a type identifier, and saying @type:@id is just an idiom in *a term definition* to say that an attribute value should be interpreted as a link, not a proper type statement. Thank you for the clarification. Best regards, Dietrich
Received on Wednesday, 8 October 2014 08:46:18 UTC