Hi, Here some examples to try: https://github.com/confidencesun/jena/blob/JENA-491/jena-arq/src-examples/arq/examples/constructquads/ExampleConstructQuads.java
You can see that SPARQL 1.1 remains unchanged, both for sparql_11.jj and the generated parser code. regards, Qihong On Tue, Jun 16, 2015 at 9:04 PM, Andy Seaborne <a...@apache.org> wrote: > On 16/06/15 12:19, Andy Seaborne wrote: >> >> On 15/06/15 11:36, Qihong Lin wrote: >>> >>> Hi, >>> >>> Please check my last 3 commits[1], related to refactoring Template. >>> master.jj is modified accordingly, *without* implementing the new >>> CONSTRUCT query function for quad. Just to make sure: the maven build >>> test for this jena-arq module is successful. > > > Is there an example that I can try? > >>> > > You should be able to leave the SPARQL 1.1 version of CONSTRUCT alone. It's > only the ARQ-extended form that should have your grammar. The SPARQL 1.1 > parser (like the SPARQL 1.0 parser) will be unchanged although changes in > whitespace etc in the generated java will get in the way of seeing that. > > master.jj: > > > #ifdef ARQ > void ConstructQuery() ; { Template t ; > QuadAcc acc = new QuadAcc() ; } > ... > #else > void ConstructQuery() : { Template t ; > QuadAcc acc = new QuadAcc() ; } > > This second branch should be the same bytes as the existing master.jj: > > void ConstructQuery() : { Template t ; > TripleCollectorBGP acc = new TripleCollectorBGP() > ; } > { > ... > > > You can test from the command line using the arq.qparse tool. Either > > java -cp ... arq.qparse --syntax=ARQ --file=... > > or > > java -cp ... arq.qparse --file=Q.arq > > The .arq extension will change it to ARQ syntax. > > I'm looking forward to trying it out ... > > Andy > > >>> Here're some ideas for to discuss: >>> >>> (1) Leaving the existing methods/constructors in-place , such as new >>> Template(basic graph pattern), so the source code for the SPARQL 1.0 >>> parser does not need change. >> >> >> Good! >> >>> (2) Add new constructors of Template(QuadAcc qp) for future use for >>> the new CONSTRUCT query for quad. I use QuadAcc here (instead of >>> QuadPattern), because other parts of master.jj use it for parsing >>> quads. >> >> >> That's workable but it could be a bit neater with a builder pattern like >> the current Template(BGP). >> >> The original code had TripleCollectorBGP as the builder and when it's >> finished the parsing step for the CONSTRUCT template, there is a call of >> getBGP() that yields the BGP. They may not be a real copy - that's an >> efficiency hack, not a design issue. >> >> Template for quads should follow the same pattern. The constructor for >> Template can take List<Quad> (or add getQuadPattern to QuadAcc c.f. >> TripleCollectorBGP.getBGP) >> >> (Admittedly, the existing code should also do this in other places. Code >> grows organically over a long period. Consistency is "unlikely"!) >> >> Why can't you use QuadPattern(QuadAcc) in ARQ-ConstructQuery? >> >> Andy >> >>> >>> >>> Anything inappropriate? If it's generally OK, I'd like to continue >>> working on master.jj. >> >> >> Great. >> >>> >>> regards, >>> Qihong >>> >>> >>> [1] https://github.com/confidencesun/jena/commits/JENA-491 >>> >> >