- From: Dave Longley <dlongley@digitalbazaar.com>
- Date: Sun, 04 Dec 2011 12:16:01 -0500
- To: public-linked-json@w3.org
On 12/04/2011 08:06 AM, Niklas Lindström wrote: > Hi Dave! > > On Thu, Dec 1, 2011 at 11:39 PM, David I. Lehn<dil@lehn.org> wrote: >> In issue #40 [1] and on the recent telecon call progress was made >> towards a syntax such as: >> >> """ >> "foo": {"@iri": "http://uri.foo", "@datatype": "xsd:date", "@list": true} >> or >> "foo": {"@iri": "http://uri.foo", "@datatype": "@iri", "@list": true} >> """ >> >> In IRC I commented that the '"@list":true' style seems non-optimal. >> To go along with @datatype I suggested '"@parsetype":"list"' or >> '"@parsetype":"@list"'. Dave Longley suggested the "@structure" >> keyword instead. That name seems a better choice. This syntax allows >> more flexibility to support types like "@set" or similar without >> another '"@{type}":true' construct. Now in issue #44 [2] we can see a >> use case of this in @contexts for framing. I'm thinking this is the >> right direction to head. This would make the above something like: >> >> """ >> "foo": {"@iri": "http://uri.foo", "@datatype": "@iri", >> "@structure": "@list"} >> """ > I'm definitely for a mechanism like this! I have a crucial need for > defining that values for a term will always be supplied in a JSON > array. In fact, the implementation for the service we've built I use > "@set" for those terms (we're currently only "@list" is allowed in > JSON-LD). I definitely think that this belongs in the definition for a > term. Among other things, it is beneficial for e.g. documentation, > since if a term can be declared to always have array values, > occurrences of it in different places in a tree won't be surprising > for a consumer. > > (Also I do not need frames, since I root my serialization in one > resource, prevent cyclic references. All I need is to define which > terms will be JSON arrays. (I also need and thus support @rev as I've > suggested, to provide incoming links to that resource. But that's > another issue).) > > I also agree that the form "@list": true and "@set": true appear > suboptimal (for one that doesn't read very well). I have been thinking > about the exact same thing as you, to support a key for defining the > kind of container/collection an array of values will be. > > How about "@container" instead of "@structure"? E.g.: > > { > "@context": { > "knows": { > "@iri": "knows", "@datatype": "@iri", "@container": "@set" > } > }, > "@iri": "/person/someone", > "@type": "Person", > "knows": ["/person/anybody"] > } > > I think "container" (or "collection") is more precise than > "structure". (And I'm not overly worried about those names' specific > meanings in RDF, since we're in a different context here. That is, > while "RDF containers" specifically refer to the legacy Bag, Seq and > Alt constructs, the term "container" is general enough to mean > something else distinct and specific in JSON-LD.) +1 For @container or @structure. > I have also thought along the lines of Markus, of instead having a > microsyntax like "@datatype": "@list[@iri]" (or perhaps "@list:@iri" > or even just "@list @iri"). But at the end of the day I think a new > key (e.g. @structure or @container) really is the simpler mechanism, > since having to parse microsyntax is putting more burden on consumers > than using a ready JSON structure with a new key. I agree that > keywords shouldn't abound, but neither should we strain ourselves from > avoiding them where the purpose and needs are clear and distinct. Or > else I'd prefer {"@list":"@iri"} over "@list[@iri]", since it's only 3 > chars more and using JSON instead of a microsyntax. -1 For microsyntaxes in JSON-LD. We rejected microsyntaxes before and I think it was the right decision. -- Dave Longley CTO Digital Bazaar, Inc.
Received on Sunday, 4 December 2011 17:16:36 UTC