- From: Markus Lanthaler <markus.lanthaler@gmx.net>
- Date: Sat, 18 Apr 2015 19:53:14 +0200
- To: <public-linked-json@w3.org>
On Friday, April 10, 2015 11:30 PM, Ron Siemens wrote:
> I'm looking for some help to create context for my objects and links.
> I gave this a shot myself on the json-ld playground, but haven't got
> far. Maybe this is child's play for an experienced "json-ld'er"? Or
> if you'd like some bounty (small... this is just an experiment) to
> help out, get in touch.
Let me try :-)
> I have a data model with 3 object types: Tree, Branch, and Leaf. A
> tree has one "root" branch. Each branch can have a set of child
> branches and a set of leaves. A leaf just has some attributes.
The first thing you'd normally do is to express this data model in the form
of a vocabulary.. which in principle means nothing else than giving each of
those concepts an unambiguous URL. So, e.g, Tree would be mapped to
something like http://www.example.com/vocab#Tree (is used fragment
identifiers to keep all definitions in a single document). You can have a
look at an exemplary vocabulary definition here:
https://github.com/HydraCG/Specifications/blob/master/spec/latest/core/core.
jsonld
> I can query the data model through a REST interface as below.
>
> http://biohost1:3777/v1/growths9/tree/{tree_name}
>
> http://biohost1:3777/v1/growths9/branch/{branch_name}
>
> http://biohost1:3777/v1/growths9/leaf/{leaf_name}
>
> The JSON looks like this
>
> A tree...
> {
> "id":"100",
> "name":"maple",
> "root":"root_branch"
> }
>
> A branch...
> {
> "id":"200",
> "name":"root_branch",
> "branches":[ { "id":"201", "name":"sub1_branch" },
> { "id":"202", "name":"sub2_branch" } ],
> "leaves":[ { "id":"500", "name":"leaf1" },
> { "id":"501", "name":"leaf3" },
> { "id":"502", "name":"leaf4" } ],
> "age":"20"
> }
>
> A leaf...
> {
> "id":"500",
> "name":"leaf1",
> "area":"10",
> "age":"3"
> }
>
> As you can see, the "id" and "name" fields are overloaded in the
> different object types (but have no relationship to one another /
> there's not a global scope for ids or names).
That's not a problem...
> I'd like a separate @context for each. Something that I could use for
> a header-linked context that exposes the links into the structure.
.. but this won't work if you also want to be able to browse the resulting
documents as a client wouldn't know how to expand "leaf3" to a full URL.
Would it be a problem to change the names to include the directory
("leaf/leaf3" instead of just "leaf3")?
> Once I have that, what would I need to browse this? Is there off-the-
> shelf Javascript that will do this?
Yes, you can use the HydraConsole for instance [1-2].
> Create and update are also
> supported by the interface: would further extension of the context
> allow me to manipulate the structure with an off-the-shelf tool?
Just a context isn't enough but you can complement it with a Hydra API
Documentation to achieve that [3].
Here's how you could express a branch in JSON-LD
{
"@context": {
"@vocab": "http://www.example.com/vocab#",
"@base": "http://biohost1:3777/v1/growths9/",
"name": "@id"
},
"id": "200",
"name": "branch/root_branch",
"branches":[
{ "id": "201", "name": "branch/sub1_branch" },
{ "id": "202", "name": "branch/sub2_branch" }
],
"leaves":[
{ "id": "500", "name": "leaf/leaf1" },
{ "id": "501", "name": "leaf/leaf3" },
{ "id": "502", "name": "leaf/leaf4" }
],
"age": "20"
}
You can also load it directly into the HydraConsole: http://bit.ly/1Dw4BgN
HTH,
Markus
[1] http://www.markus-lanthaler.com/hydra/console/
[2] http://bit.ly/hydra-console-event-api
[3] http://www.hydra-cg.com/spec/latest/core/
--
Markus Lanthaler
@markuslanthaler
Received on Saturday, 18 April 2015 17:53:43 UTC