- From: Markus Lanthaler <markus.lanthaler@gmx.net>
- Date: Fri, 25 Jul 2014 10:45:06 -0700
- To: <public-hydra@w3.org>
Hi Dimitri,
On Thursday, July 24, 2014 12:36 PM, Dimitri van Hees wrote:
> I've been following this list for a few months now but have not yet
> been in the opportunity to introduce myself or contribute anything. As
> I have a question about JSON-LD, I think this might be the right time
> to do so ;-)
Great! Good to see you here :-)
> That said, it was time for me to actually start implementing this
> model in our own API's. For this purpose we created a demo API which
> represents our 26 employees, including birthdates, hometowns, hobbies,
> functions, education, etc. I want to add Hydra in the JSON-LD
Cool!
> representation, HATEOAS in the JSON representation (does that sound
> reasonable by the way?)
Sounds a bit weird to me as HATEOAS is a description of what drives the application. I would say "add hypermedia controls to JSON" instead.
> and also provide an application/nquads
> representation to fetch the triples and load them into a triplestore
> one by one.
>
> After spending hours reading the documentation I still can't find what
> I'm doing wrong with the conversion to JSON-LD. I hope this list will
> help me out a little bit. Let's say I have this response (in real life
> this is valid JSON but my mail client sucks at the moment 😉):
>
> id: dimitri,
> givenName: Dimitri,
> additionalName: van,
> familyName: Hees,
> gender: male,
> birthplace: Nijmegen,
> residence: Tilburg
>
> As you might have noticed the properties are all schema.org except
> birthplace and residence. When converting this to JSON-LD I think I
> could say:
>
> @context: {
> schema: http://schema.org/,
> givenName: {@id: schema:givenName},
> addition…
> birthplace: {@id: schema:City, @type: @id},
> residence: {@id: schema:City, @type: @id},
These two mappings here are the problem. You map two properties, birthplace and residence to schema:City which isn't a property but a class. There's no property for birthplace in Schema.org yet (I think it would make sense to propose one on public-vocabs@w3.org). For residence, you could use either schema:homeLocation or schema:workLocation.
> },
> @id: http://data.freshheads.com/dimitri,
> givenName: Dimitri,
> additon…,
> birthplace: {
> @id: http://www.nijmegen.nl
> },
> residence: {
> @id: http://www.tilburg.nl
> }
>
> The problem is that both birthplace and residence are being converted
> to City while they don't seem to be an actual 'City' anymore. When I
> add it to the valueobject itself:
>
> birthplace: {
> @id: http://www.nijmegen.nl
> @type: http://schema.org/City
> }
>
> then it works they way I'd expect. But I don't really understand why.
> Any thoughts?
Type coercion in the context only works for literals, i.e., simple strings. In other words, you can convert a simple string to an @id object by setting @type: @id or to a @value object with a @type by setting @type to the desired datatype in the context. Please not that you can NOT type nodes (@id objects) from within the context. You need to do so directly in the document itself. Node types and value types are treated differently.
HTH,
Markus
--
Markus Lanthaler
@markuslanthaler
Received on Friday, 25 July 2014 17:45:37 UTC