- From: Eric Prud'hommeaux <eric@w3.org>
- Date: Sat, 5 Jan 2013 18:06:42 -0500
- To: Markus Lanthaler <markus.lanthaler@gmx.net>
- Cc: public-linked-json@w3.org, 'RDF WG' <public-rdf-wg@w3.org>
* Markus Lanthaler <markus.lanthaler@gmx.net> [2013-01-04 18:51+0100] > As announced in the last mail, I've just fixed the last remaining issues in > the JSON-LD Grammar section. It definitely does the job, I was just > wondering whether we should also include a more formal, ABNF-like grammar > (or maybe even replace the prose). Unfortunately it seems that currently > there's no accepted way or best-practice to specify JSON "grammars" (the > JSON Schema Internet Draft expired two years ago [1]). > > So I tried to come up with something ABNF-like (it's not valid ABNF) and > would be interested in hearing your opinions. I'm not sure myself yet > whether that helps or confuses people. > > graph = node-obj / node-obj[] > > node-obj = > { > "@context": context-def (0..1) > "@id": string (0..1) > "@type": iri / iri[] (0..1) > "@graph": graph (0..1) > "@annotation": string (0..1) > property-key: property-value / property-value[] / > language-map / annotation-map (*) > } > > value-obj = > { > "@context": context-def (0..1) > "@value": scalar (0..1) > "@language": bcp47-tag / "@type": iri (0..1) > "@annotation": string > } > > list-obj = > { > "@context": context-def (0..1) > "@list": list-set-value / list-set-value[] (1) > "@annotation": string (0..1) > } > > set-obj = > { > "@context": context-def (0..1) > "@set": list-set-value / list-set-value[] (1) > "@annotation": string (0..1) > } > > language-map = > { > "@context": context-def (0..1) > bcp47-tag: string / string[] (*) > } > > annotation-map = > { > "@context": context-def (0..1) > string: property-value / property-value[] (*) > } > > list-set-value = scalar / node-obj / value-obj > > property-value = list-set-value / list-obj / set-obj > > context-def = null / iri / context-def-obj / > (null / iri / context-def-obj)[] > > context-def-obj = > { > property-key: null / iri / term-def-obj (*) > "@language": bcp47-tag (0..1) > "@vocab": iri (0..1) > } > > term-def-obj = > { > "@id": iri (0..1) > "@language": bcp47-tag / "@type": iri (0..1) > "@container": ( "@list" / "@set" / > "@language" / "@annotation" ) (0..1) > } > > bcp47-tag = string ; should this be more explicit? > > iri = string ; should this be more explicit? > > property-key = string - keyword ; any string except a keyword > > keyword = @context / @id / @value / @language / @type / > @container / @list / @set / @annotation / @vocab / @graph > > scalar = null / string / number / true / false I like it! It reminds me of RNC (my favorite schema language). You could change "(0..1)" to "?". It should be pretty easy to compile that into an actual yacc parser à la http://www.w3.org/2005/01/yacker/uploads/results_JSON?lang=perl&markup=html to verify and to have a speedy parser. > [1] http://tools.ietf.org/html/draft-zyp-json-schema-03 > > > Cheers, > Markus > > > > -- > Markus Lanthaler > @markuslanthaler > > -- -ericP
Received on Saturday, 5 January 2013 23:07:12 UTC