Github user kinow commented on a diff in the pull request: https://github.com/apache/jena/pull/114#discussion_r182390129 --- Diff: jena-arq/Grammar/master.jj --- @@ -326,6 +361,46 @@ void AskQuery() : {} SolutionModifier() } +#ifdef ARQ +void JsonQuery() : {} +{ + JsonClause() + ( DatasetClause() )* + WhereClause() + SolutionModifier() +} + +void JsonClause() : { Object o ; String s ; Token t; } +{ + <JSON> { getQuery().setQueryJsonType() ; } + <LBRACE> + s = String() + // PNAME_NS would eval true before COLON (default namescape) so we make sure we got what we were expecting + t = < PNAME_NS > { + if ( ! t.image.equals(":") ) + throwParseException("Prefix name expression not legal at this point : "+t.image, t.beginLine, t.beginColumn) ; + } + ( + o = Var() { getQuery().addResultVar((Var) o) ; getQuery().addJsonMapping(s, o) ; } + | o = String() { getQuery().addJsonMapping(s, o) ; } + | o = Number() { getQuery().addJsonMapping(s, o) ; } + ) + ( + <COMMA> s = String() + t = < PNAME_NS > { + if ( ! t.image.equals(":") ) + throwParseException("Prefix name expression not legal at this point : "+t.image, t.beginLine, t.beginColumn) ; + } + ( + o = Var() { getQuery().addResultVar((Var) o) ; getQuery().addJsonMapping(s, o) ; } + | o = String() { getQuery().addJsonMapping(s, o) ; } + | o = Number() { getQuery().addJsonMapping(s, o) ; } + ) --- End diff -- Good idea! Using your TestJsonEval.java as base, and doing a quick change in the master.jj and grammars, to support it.
---