- From: elf Pavlik via GitHub <sysbot+gh@w3.org>
- Date: Wed, 04 Oct 2017 16:27:20 +0000
- To: public-hydra-logs@w3.org
I think `"@container": "@graph"` suggestion from my side came as bit of a distraction. Server could respond with expanded and flattened JSON-LD or client could even negotiate for Trig or N-Quads. I just found it interesting as a possible way to format example snippets in an elegant way. What I find important to this case here relates to the *shared understanding* between clients and servers. In case of *liking a video* or *having interest in an event* or *having attended an event*, it seems that interaction would rely on shared understanding of particular instance of `rdf:Property`, for liking something like `sor:likes` and for interests something like `cco:interest`. In addition [hydra Collection Design](https://www.w3.org/community/hydra/wiki/Collection_Design) provides `hydra:manages` block which can reference any instance of `rdf:Properety` with `hydra:property`. Having that shared understanding, to create particular relationship (expressed with particular instance of `rdf:Property`) client would have to 'add' to the collection which `hydra:manages` that property for intended resource. For liking on Vimeo, each person has such collection explained in https://developer.vimeo.com/api/endpoints/likes#GET/users/{user_id}/likes I see one possible *gotcha* here, to have the `hydra:manages` block work as intended, for collection: ```json { "@context": { ... }, "@id": "/users/elfpavlik/likes", "manages": { "subject": "/users/elfpavlik", "property": "sor:likes" }, "member": [...] } ``` We want to IRI denoting the video to appear as member, not the new resource we would PUT, so ` "member": ["/videos/144522067"]` NOT ` "member": ["/users/elfpavlik/likes/144522067"]` (which differs from how `ldp:contains` works in LDP). If instead of having a resource (named graph) like ```http GET /users/elfpavlik/likes/144522067 ``` ```json { "@context": { ... }, "@graph": [ { "@id": "/users/elfpavlik", "sor:likes": "/videos/144522067" } { "@id": "/users/elfpavlik/likes", "member": "/videos/144522067" } ] } ``` We would like to have a resource representing a [Qualified Relation](http://patterns.dataincubator.org/book/qualified-relation.html) ('foo:Liking' or whatever), it seems that it would not work any more with intended design of `hydra:manages` block. We can't anymore rely on direct (binary) relationships expressed with instances of `rdf:Property`. IMO we shouldn't expect that vocabularies on which *shared understanding* depends will provide qualified version for each relationship. If for cases like above, we intend `hydra:member` to work more like `ldp:contains`, we might need to adjust `hydra:manages` to always have `subject`, `property`, `object` where either `s` or `o` would have an array. something like: ```json { "@context": { ... }, "@id": "/users/elfpavlik/likes", "manages": { "subject": "/users/elfpavlik", "property": "sor:likes", "object": ["/videos/144522067"] }, "member": ["/users/elfpavlik/likes/144522067"] } ``` In above, client still don't know which resource it would have to `DELETE` to remove triple with particular `object` (as unlike), so we might needs something like: ```json [ { "@id": "https://media.example/users/elfpavlik/likes", "@graph": [{ "@id": "https://media.example/users/elfpavlik/likes", "http://www.w3.org/ns/hydra/core#manages": { "http://www.w3.org/ns/hydra/core#subject": "https://media.example/users/elfpavlik", "http://www.w3.org/ns/hydra/core#property": "http://purl.org/net/soron/likes", "http://www.w3.org/ns/hydra/core#object": ["https://media.example/videos/144522067"] }, "http://www.w3.org/ns/hydra/core#member": ["https://media.example/users/elfpavlik/likes/144522067"] }] }, { "@id": "https://media.example/users/elfpavlik/likes/144522067", "@graph": [{ "@id": "https://media.example/users/elfpavlik", "http://purl.org/net/soron/likes": "https://media.example/videos/144522067" }] } ] ``` `"@container": "@graph"` seemed to me like a potential alternative but possibly leaving to much implicit ```json { "@context": { ... }, "@id": "/users/elfpavlik/likes", "manages": { "subject": "/users/elfpavlik", "property": "sor:likes" }, "member": { "/users/elfpavlik/likes/144522067": "/videos/144522067" } } ``` But at least here client knows clearly which resource it has to `DELETE` to remove which member. -- GitHub Notification of comment by elf-pavlik Please view or discuss this issue at https://github.com/HydraCG/Specifications/issues/134#issuecomment-334212460 using your GitHub account
Received on Wednesday, 4 October 2017 16:27:10 UTC