- From: John Walker <john.walker@semaku.com>
- Date: Wed, 3 Sep 2014 19:26:46 +0200 (CEST)
- To: public-hydra@w3.org
Hi All,
A couple of weeks back I decided to have a go at writing some API documentation
using Hydra primarily as a learning-by-doing exercise.
I started with a blank slate and settled on describing an API for managing SKOS
thesauri.
This kind of ties into a prototype implementation I'm working on hopefully the
two will come together at some point.
Maybe also could serve as a reference for others.
I have not made anywhere near as much progress as I'd like, paying work takes
priority :)
Anyway I decided to share the work in progress on this list for comment and
feedback:
https://github.com/jaw111/skos-api
To be honest I found it took a good while to get my head around Hydra, but
things are slowly making sense.
Essentially what I understood is that Hydra defines a (meta)model that I can use
to model my API.
Unfortunately I based myself on the draft spec, so I've not used the new
proposed collection design.
I have to say that a point for confusion is how to deal with information
resources vs. non-information resources.
I'm half-tempted to sidestep the issue and not bother to make the distinction,
but feel that is taking the easy way out.
Note I don't want to get into any re-discussion of httpRange14, hash v slash and
all that stuff.
I've used slash pattern in the examples here and assume the relevant redirects
are in place, but hash pattern would serve equally well.
Imagine I have a representation of a concept, I'd expect the Turtle
representation to be something like:
<doc/concepts/1> a foaf:Document ;
foaf:primaryTopic <id/concepts/1> ;
dct:created "2014-08-08T00:00:00Z"^^xsd:dateTime ;
dct:modified "2014-09-03T00:00:00Z"^^xsd:dateTime ;
dct:creator <id/users/7> .
<id/concepts/1> a skos:Concept ;
skos:prefLabel "Classical music" ;
skos:topConceptOf <id/conceptSchemes/1> ;
skos:narrower <id/conceptSchemes/2> , <id/conceptSchemes/3>,
<id/conceptSchemes/4> .
That all seems pretty simple and would be pretty easy to make into a nice
JSON-LD representation too.
Imagine that I now want to split out my list of narrower concepts into a
separate hydra:Collection resource, how would one go about linking to that
collection resource?
My (maybe naive) approach would be to modify the representation to:
<doc/concepts/1> a foaf:Document ;
foaf:primaryTopic <id/concepts/1> ;
dct:created "2014-08-08T00:00:00Z"^^xsd:dateTime ;
dct:modified "2014-09-03T00:00:00Z"^^xsd:dateTime ;
dct:creator <id/users/7> ;
hydra:collection <doc/concepts/1/narrower> .
<doc/concepts/1/narrower> a hydra:Collection ;
hydra:manages [
hydra:property skos:narrower ;
hydra:subject <id/concepts/1> .
] .
<id/concepts/1> a skos:Concept ;
skos:prefLabel "Classical music" ;
skos:topConceptOf <id/conceptSchemes/1> .
Then when dereferencing the collection, the representation would be:
<doc/concepts/1/narrower> a hydra:Collection ;
hydra:manages [
hydra:property skos:narrower ;
hydra:subject <id/concepts/1> .
] .
<id/concepts/1> skos:narrower <id/conceptSchemes/2> , <id/conceptSchemes/3>,
<id/conceptSchemes/4> .
Does this seem reasonable.
I'm also wondering how one could best go about deleting an individual statement
such as "<id/concepts/1> skos:narrower <id/conceptSchemes/2>".
Would it be a best practice to have this as a separate resource that can be
DELETEd, if so how to link to that resource?
Or have the client PUT a new collection minus that statement (probably won't
scale well)?
Are there other options worth considering link HTTP LINK/UNLINK methods?
Ideas/feedback welcome!
Cheers,
John
Received on Wednesday, 3 September 2014 17:27:11 UTC