- From: Gregg Kellogg <gregg@greggkellogg.net>
- Date: Wed, 27 Jun 2012 12:36:50 -0400
- To: Denny Vrandečić <denny.vrandecic@wikimedia.de>
- CC: Markus Lanthaler <markus.lanthaler@gmx.net>, Linked JSON <public-linked-json@w3.org>
Denny, as Markus indicates, issue 133 is where we've been discussing this. At this point, the group has resolved to add something like @container: @language to support this use case, but there are a couple of different proposals for what this might mean. i laid out the two alternatives in my comment:
https://github.com/json-ld/json-ld.org/issues/133#issuecomment-6536114
I think the property-map proposal matches what you've been considering for WikiData. If you can join us on Tuesday's telecon, that would be great!
http://json-ld.org/minutes/
Gregg
On Jun 27, 2012, at 7:03 AM, Denny Vrandečić wrote:
> Hi Gregg, all,
> sorry, I cannot figure out how we have resolved. May I propose an IRC
> chat session for anyone who wants to join to discuss the status and
> what still needs to be done?
> Cheers,
> Denny
>
>
>
> 2012/6/8 Markus Lanthaler <markus.lanthaler@gmx.net>:
>> OK, I've created ISSUE-133 and ISSUE-134 for this, let's continue the
>> discussion there:
>>
>> https://github.com/json-ld/json-ld.org/issues/133
>> https://github.com/json-ld/json-ld.org/issues/134
>>
>>
>> Denny, since you were the one to trigger this discussion, it would be nice
>> if you could give us some more information on how you intend to consume data
>> in WikiData as this directly affects that. Some specific use cases/scenarios
>> would help immensely in designing this.
>>
>>
>> Thanks,
>> Markus
>>
>>
>> --
>> Markus Lanthaler
>> @markuslanthaler
>>
>>
>>
>>> -----Original Message-----
>>> From: Niklas Lindström [mailto:lindstream@gmail.com]
>>> Sent: Friday, June 08, 2012 7:45 AM
>>> To: Gregg Kellogg
>>> Cc: Markus Lanthaler; Linked JSON; Denny Vrandečić
>>> Subject: Re: Heads Up: proposal deep linking
>>>
>>> Hi,
>>>
>>> I really think these are important use cases. As you have also
>>> mentioned, it is rather common in "plain" JSON to use objects as maps,
>>> where the keys are either the subject or some property of the value.
>>> This is one of the few things I've felt that compact JSON-LD may be
>>> missing.
>>>
>>> On Wed, Jun 6, 2012 at 7:49 AM, Gregg Kellogg <gregg@greggkellogg.net>
>>> wrote:
>>>> On Jun 5, 2012, at 10:04 PM, Markus Lanthaler wrote:
>>> [...]
>>>>> {
>>>>> "queenie": {
>>>>> "@id": "http://buckingham.uk/queenie",
>>>>> "label": {
>>>>> "en": "The Queen",
>>>>> "de": "Die Koenigin"
>>>>> }
>>>>> }
>>>>>
>>>>> as otherwise the @value would reset the language. Anyway, this is
>>> something
>>>>> Niklas raised before under the term "language map" ISSUE-29 [1]..
>>>>> Unfortunately we didn't discuss that very much and funnily enough
>>> you were
>>>>> the only one to -1 it as "too complex" :-)
>>>>
>>>> Yes, it would, and you might think of it as "value", instead of
>>> "@value"; but it's really just an example. The idea would be that "en"
>>> would basically insert a @context at that level which would set
>>> "@language" to "en". But, there might be other things at that level.
>>>>
>>>> AFAIKR, it was a bit complex, but this seems different to me now;
>>> perhaps it's just a different way of looking at it. Really, the story
>>> is to figure out a way of allowing properties to be used for deep
>>> linking without introducing semantic overhead; the @language promotion,
>>> as Denny said, might not be as important, but something like that does
>>> seem useful.
>>>
>>> I think that getting deep linking right may be more complex and
>>> difficult to get right. And the language is there (quite capturable)
>>> in the key, so I was happy to see Markus' suggestion below (which I'll
>>> get to right after the next remark..).
>>>
>>>
>>>>> The question here is really if this is any easier than
>>>>>
>>>>> "label_en": "The Queen",
>>>>> "label_de": "Die Koenigin"
>>>>>
>>>>> or
>>>>>
>>>>> "label": [
>>>>> { "@value": "The Queen", "@language": "en" },
>>>>> { "@value": "Die Koenigin", "@language": "de" }
>>>>> ]
>>>>>
>>>>> especially considering that we plan to make framing more powerful
>>> which
>>>>> would allow you to retrieve just the desired language (see example
>>> [2]).
>>>>
>>>>> From Denny's perspective, having a single "label" with properties
>>> that can be iterated upon is the key here, not having multiple
>>> properties related by naming tricks. Also, assigning a language to
>>> label_en, for example, does not actually result in setting @language
>>> for other things contained within that property.
>>>
>>> I agree that the goal here is for compact JSON to be directly usable,
>>> for a *specific* scenario. If someone has the knowledge and tooling
>>> available to digest JSON-LD, the question is still open whether
>>> framing or objectify/graphify (or actually using a full RDF API) to
>>> process the data is the most effective way to go.
>>>
>>> Meanwhile, simple and specific scenarios should have at their disposal
>>> a palatable compact JSON-LD, in order to support things like "look up
>>> title by language" if that is the desired scenario. (Other scenarios
>>> will involve other contexts. Such as a context with a predefined
>>> language -- either by key or a globally applied language --,
>>> effectively filtering out any other language value.)
>>>
>>>
>>>>> If we are going to support something like this, I think we should
>>> leverage
>>>>> our @container mechanism for this. Something like
>>>>>
>>>>> {
>>>>> "@context": {
>>>>> "label": {
>>>>> "@id": "http://example.com/label",
>>>>> "@container": "@language"
>>>>> }
>>>>> },
>>>>> "@id": "http://buckingham.uk/queenie",
>>>>> "label": {
>>>>> "en": "The Queen",
>>>>> "de": "Die Koenigin"
>>>>> }
>>>>> }
>>>
>>> Yes! This is exactly what I've been thinking about regarding the
>>> possible use of @container.
>>>
>>> Think of it this way: @container is already a mechanism for letting
>>> the two currently defined container keywords, @set and @list,
>>> interpret a given array in their own specific way. We can extend the
>>> behaviour of @container to let *all* of @language, @id, @type *and
>>> regular terms* treat an object as a map, in their own, specific ways.
>>>
>>> We've just seen the use of @container with @language in Markus' example
>>> above.
>>>
>>> Here's an example of using @container with @id:
>>>
>>> {
>>> "@context": {
>>> "booksByUrl": {"@id": "@graph", "@container": "@id"},
>>> "isbn": "bibo:isbn"
>>> },
>>> "booksByUrl": {
>>> "http://dbpedia.org/resource/Gödel,_Escher,_Bach": {
>>> "isbn": "978-0465026562"
>>> }
>>> }
>>> }
>>>
>>> And here is one using @container with bibo:isbn:
>>>
>>> {
>>> "@context": {
>>> "booksByIsbn": {"@id": "@graph", "@container": "bibo:isbn"},
>>> "url": "@id"
>>> },
>>> "booksByIsbn": {
>>> "978-0465026562": {
>>> "url": "http://dbpedia.org/resource/Gödel,_Escher,_Bach"
>>> }
>>> }
>>> }
>>>
>>> Granted, I'm not sure that we can use @graph like that today? But I'm
>>> sure you can imagine replacing @graph by some membership property such
>>> as "collection item" or "library holding".
>>>
>>> (The use of @type is more esoteric, although I could imagine e.g.
>>> someone wanting to consume an RDFS/OWL vocabulary with classes and
>>> properties divided into subsets. Or subsets of persons/organisations,
>>> books/paintings/songs by artist, etc.)
>>>
>>>
>>>> It's a pretty confusing use of @container, and the other example
>>> shows folding without actually introducing a language, so it's not
>>> quite that simple.
>>>
>>> In the case of 'queenie', I think that can either represent a relative
>>> IRI, or a literal token (e.g. foaf:nick).
>>>
>>>
>>>> Perhaps Denny can chime in on some more of his specifics, but I've
>>> had a couple of interactions that wanted to have a means of grouping
>>> language-variations of property values under a common key, which is
>>> certainly a reasonable way to want to structure JSON.
>>>
>>> Indeed.
>>>
>>>
>>>> The issue of having some subject-like key is something we've seen in
>>> other JSON representations, and it could be considered to be a weakness
>>> of JSON-LD that we can't adapt to take such input. Being able to
>>> associate some deep linking behavior with such keys at least allows
>>> them to not be ignored. Requiring that the keys actually are used to
>>> create triples seems like it's adding an unnecessary burden, if it is
>>> indeed a common use case. I faced similar issues myself when
>>> constructing the RDFa Earl Report [6], where I needed to add keys just
>>> to create the JSON geometry I needed to work with, and I just needed to
>>> live with the junk triples they created (notice how
>>> "http://code.google.com/p/green-turtle/" is used as a property, only to
>>> create the desired linking).
>>>
>>> I actually think that using the keys as values for properties is a
>>> tremendous opportunity to capture a common JSON pattern succinctly and
>>> uniformly. In fact, in your (our) specific use case of EARL, the RDF
>>> gets a bit strange in these places, with some odd properties that
>>> would really work better as objects in triple form. Following the
>>> examples from above, I'd imagine a context containing definitions like
>>> these could be useful:
>>>
>>> "@context": {
>>> "version": {"@id": "rdfatest:version", "@container":
>>> "rdfatest:versionNumber"},
>>> "hostLanguage": {"@id": "rdfatest:hostLanguage", "@container":
>>> "rdfs:label"},
>>> "testCases": {"@id": "rdfatest:testCases", "@container":
>>> "@list"},
>>> "subject": {"@id": "rdfatest:version", "@container": "@id"}
>>> }
>>>
>>> Just a quick sketch, but I hope you see my point. That said, I'm open
>>> to discuss either extending @container *or* revisiting deep linking.
>>> At this stage though, I suspect that a more powerful @container will
>>> make things more uniform, and provided that a consumer understands the
>>> context, easier to work with the data exploratively.
>>>
>>> I believe that compact JSON-LD should be something to aspire to as a
>>> way of understanding (and documenting the nature of) quite
>>> context-specific data, often designed for fairly narrow use-cases and
>>> APIs. At the same time though, JSON-LD should constrain more
>>> extravagant and odd forms of JSON, since we shouldn't define an entire
>>> transformation language. Given a @context, uniformity in the data is
>>> certainly a goal.
>>>
>>> (I also believe a @rev mechanism would be beneficial here. But that's
>>> another topic which we've discussed elsewhere.)
>>>
>>> Best regards,
>>> Niklas
>>>
>>> [PS. I've encountered more use cases for these things, not the least
>>> lately while I've worked with JSON data for the Swedish Royal Library.
>>> We currently work very "tactically" with existing data in real editing
>>> scenarios, and do not have the time nor resources at this stage to
>>> reshape that into proper JSON-LD. Also, various shapes in the data are
>>> just "odd" as is, and merely designing a JSON-LD context for that
>>> wouldn't be useful. For those in the library business, I'm taking
>>> about MARC here. ;) But in certain places there *is* uniformity to be
>>> gleaned, where it'd *still* be useful to keep some property values or
>>> URLs as keys. This is especially true for certain "mapping" data (e.g.
>>> descriptions of various keys and their meanings). Alas, all of this is
>>> too multifaceted to go into here, but suffice to say I see potential
>>> in this more powerful @container also here. And I see this *after* the
>>> various transforms initially needed to shape and lift certain odd data
>>> into more uniformity. The verdict on the final form is still out
>>> though; this will be a long process. I merely suspect that in certain
>>> cases here, this extended @container mechanism just might be what
>>> sells using JSON-LD contexts to lift various instrumental pieces into
>>> RDF.]
>>>
>>>
>>>> If we're not willing to listen to considered feedback from the
>>> community and consider changes to the spec to meet their requirements,
>>> then I'm not sure we're being good advocates for the community.
>>>>
>>>> Gregg
>>>>
>>>>> [1] https://github.com/json-ld/json-ld.org/issues/29
>>>>> [2] http://bit.ly/KNOK2X
>>>>> [3] https://github.com/json-ld/json-ld.org/issues/56
>>>>> [4] https://github.com/json-ld/json-ld.org/issues/84
>>>>> [5] http://bit.ly/JKxbwN
>>>> [6] http://rdfa.info/earl-reports/earl.jsonld
>>>>
>>>>> --
>>>>> Markus Lanthaler
>>>>> @markuslanthaler
>>
>
>
>
> --
> Project director Wikidata
> Wikimedia Deutschland e.V. | Obentrautstr. 72 | 10963 Berlin
> Tel. +49-30-219 158 26-0 | http://wikimedia.de
>
> Wikimedia Deutschland - Gesellschaft zur Förderung Freien Wissens e.V.
> Eingetragen im Vereinsregister des Amtsgerichts Berlin-Charlottenburg
> unter der Nummer 23855 B. Als gemeinnützig anerkannt durch das
> Finanzamt für Körperschaften I Berlin, Steuernummer 27/681/51985.
Received on Wednesday, 27 June 2012 16:37:54 UTC