- From: Markus Lanthaler <markus.lanthaler@gmx.net>
- Date: Wed, 22 Apr 2015 21:06:52 +0200
- To: <public-linked-json@w3.org>
On Monday, April 20, 2015 8:11 PM, Ron Siemens wrote:
> Hi Markus. I appreciate the tips, thanks!
>
>> 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"
>> }
>
> ...
>
>>> 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")?
>
> It seems there must be other approaches to this, since I believe
> modifying an existing data model would be undesirable and a last
> resort.
Unfortunately there isn't any practicable other approach. The only
workaround would be to explicitly map leaf3 (and all other such "tokens") to
URLs in the context. But I assume that's not a viable solution unless you
generate a different context for each resource.
> In my case, these representations are used by existing
> systems that must remain compatible: which is why I'm going with the
> header-linked approach.
I understand the use case but we had to make a trade-off. We decided to
prefer to keep JSON-LD simpler than trying to be able to map any arbitrary
legacy JSON representation cleanly to JSON-LD with just a context.
> Can the context not help in some way here? Different namespaces for
> the various "name" fields perhaps? Or using the property names (
> "branches", "leaves" ) to disambiguate the values?
No.
> If the limitation is just due to off-the-shelf clients to browse this,
> I'd rather implement my own client than mess with my data model and
> representations.
The problem is that you have a data model that you only implicitly expose in
your JSON representations. The properties you use are context sensitive (in
the traditional sense; not talking about JSON-LD contexts here). name: x
means something different depending on where it appears. In one case x means
.../leaf/x in another .../branch/x. We aren't able to express that with just
a context. There have been discussions to allow that in future versions of
JSON-LD but that will take a long time. The simplest solution would be to
use content negotiation and server proper JSON-LD.
--
Markus Lanthaler
@markuslanthaler
Received on Wednesday, 22 April 2015 19:07:19 UTC