- From: Markus Lanthaler <markus.lanthaler@gmx.net>
- Date: Wed, 20 Feb 2013 16:48:55 +0100
- To: "'David Rogers'" <david.rogers@bbc.co.uk>
- Cc: <public-linked-json@w3.org>
Hi David, You didn't send the response to the mailing list. Anyway. I've created an issue in our issue tracker for this feature request and already added our conversation there: https://github.com/json-ld/json-ld.org/issues/221 If you don't mind we could move the discussion there to keep everything organized in one place. I will answer the rest of your mail inline below. > Many of the ontologies we work with do not have inverse properties > defined > for every property, so there is no correct way of expressing the > inverse as > a separate property. I think I wasn't clear enough in my example. What I meant was that the context definition would define a term and is mapped to its reverse IRI. "children": { "@rev": "http://example.com/parent", "@type": "@id" } Children here doesn't have its own IRI. It is just a term that you can then use in your data as if there would exist an inverse property. See the @rev (for reverse) in the context definition, normally there would be an @id there. > Additionally, we are working in a context where we want our JSON-LD to > have > a predictable tree structure (allowing the JSON-LD to easily be parsed > and > used as simply JSON). In this circumstance, it is not practical to > express > the triple the 'other way around', as this requires a deeper level of > understanding of the data structure so that the data consumer can > 'jump' > from one @id to it's corresponding @id elsewhere in the JSON-LD. Yes, I understand, that's often a requirement to provide a smooth upgrade path. > Inverse properties are (currently) the > only thing causing us to break the JSON-LD syntax I'm curious. May I ask how and for what you use JSON-LD? :-) > As an example, let us assume that the 'children' property has not been > defined. The following has been suggested: > > { > "@context": "http://json-ld.org/contexts/person.jsonld", > "@graph": [{ > "@id": "http://dbpedia.org/resource/John_Lennon", > "name": "John Lennon", > "born": "1940-10-09" > }, { > "@id": "http://dbpedia.org/resource/Sean_Lennon", > "parent": "http://dbpedia.org/resource/John_Lennon" > }] > } > > To use this data structure requires, in effect, a 'search' through the > graph/map to discover references to > "http://dbpedia.org/resource/John_Lennon" in order to discover his > children. Depending on your exact data you could also use the @index feature which allows you to create maps. { "@context": [ "http://json-ld.org/contexts/person.jsonld", { "persons": { "@id": "http://...", "@container": "@index" } } ], "@id": "http://example.com/addressbook", "persons": { "John_Lennon": { "@id": "http://dbpedia.org/resource/John_Lennon", "name": "John Lennon", "born": "1940-10-09" }, "Sean_Lennon": { "@id": "http://dbpedia.org/resource/Sean_Lennon", "parent": "http://dbpedia.org/resource/John_Lennon" } } } I simplified the keys to, of course you could also use the full IRI as key. See http://json-ld.org/spec/latest/json-ld-syntax/#data-indexing for details. > Using inverse properties: > > { > @id": "http://dbpedia.org/resource/John_Lennon", > "name": "John Lennon", > "born": "1940-10-09", > "^parent": "http://dbpedia.org/resource/Sean_Lennon" > } > > Considerably simplifies the data, and crucially, no searching is > required to > use data structure. In fact "^parent" in itself can be treated as a > simple > property, so long as the developer is familiar with the fact that the > micro-syntax '^' (or alternative symbol) means inverse. I agree. It's definitely a useful feature and it has come up a number of times. We just haven't come around to include it in JSON-LD 1.0 yet. As already said, more than likely we would not use a micro-syntax as you propose but introduce a dedicated keyword for the feature (@rev, @reverse or something similar). The other thing that we would need to work out is how it's going to be supported in the various algorithms (it should round-trip when expanding/compacting, flattening seems to be simpler). We are all very busy stabilizing JSON-LD at the moment and bringing the specs in shape for last call. If you would like to take a stab and see how such a feature would work with the various algorithms we could certainly consider it. I know that at least Niklas Lindström is very interested in this feature. -- Markus Lanthaler @markuslanthaler
Received on Wednesday, 20 February 2013 15:49:27 UTC