Hi Andy, Thanks for answering Qihong's questions! JENA-491 is not original from my idea. So, I'm very grateful if you can help the student to clarify the project goals and the scopes. Then, as the mentor, I can push the project going on when it starts, with technical assistance regarding Jena.
For the first question, is it OK to expose Quad to end user in querying? I mean, we have 2 layers of Jena API: the higher one of Model/Statement/Resource, and the underlying Graph/Triple/Quad/Node. It makes sense to me if we encourage the end users using the former as much as possible. Currently, in the API, we already have: Iterator<Triple> QueryExecution.execConstructTriples(). I have the same doubt with it. What's your opinion? Best, Ying Jiang On Sun, Apr 5, 2015 at 2:04 AM, Andy Seaborne <[email protected]> wrote: > On 03/04/15 03:47, Qihong Lin wrote: >> >> Hello Andy, >> >> It's submitted in time. > > > Good. > > Ying - what is the next process step? > >> I saw your notes, thanks. Here're some further >> questions. >> >> 1) API of QueryExecution >> Does the API look like: >> - Iterator<Quad> QueryExecution.execConstrucQuads() >> - Dataset QueryExecution.execConstructDataset() > > > Both. (One builds on the other anyway.) > > It should mirror how execConstruct/execConstructTriples are done unless > there is a very good reason not to. > >> 2) master.jj >> How does master.jj generate arq.jj? What tool? You mentioned "is >> processed with cpp". What's cpp? > > > cpp is the C preprocessor (yes!!) It rewrites one text file to another text > file. ARQ does not cpp macros, it is just using defined symbols ARQ and > SPARQL_11 to put in different blocks of text. > > It's also why there are no comments in arq.jj. cpp removes them and blank > lines (the alternative is lots of blank lines - it's yuk). > > The script to drive it is jena-arq/Grammar/grammar (it's a bash script - I > don't know how well it runs on MS Windows - it used to using cygwin). The > script directs the output to the right place in the java source code. > > If you have trouble running it, edit arq.jj then run javacc. > > The SyntaxARQ parts that are not SPARQL 1.1, are in sections > > #ifdef ARQ > .... > #endif > > >> 3) query string sytax >> I went through TriG syntax. >> - For our query string, can it construct a Dataset with multiple >> graphs, or just one default/named graph? > > > Multiple. > > A dataset is one default and zero or more named graphs. > > CONSTRUCT > { GRAPH :g1 { ?s ?p ?o } > GRAPH :g2 { ?s ?p ?o } > GRAPH ?g { ?s ?p ?o } > } ... > > only in real use the patterns will be bigger. > >> - Shall we consider using variables for named graphs? I mean "?g", not >> ":g": >> CONSTRUCT { >> # Named graph >> GRAPH ?g { ?s :p ?o } >> } WHERE >> > > Yes. > > Class Template can be made to work purely on quads. Where it current uses > BasicPattern (which is triples), use QuadPattern. > > That will work for non-extended SPARQL 1.1 as well because "CONSTRUCT { no > use of GRAPH }" will give a quad pattern of all quads for the default graph. > There is a magic constant for "this quad is for the default graph" - see > class Quad. > > So you don't need tow different sets of machinary - update Template to > handle quads and the syntactic restrictions of SPARQL_11 will stop it > getting named graph in CONSTRUCT. > > execConstruct/execConstructTriples then work on the default graph of a > dataset. > > You may find it helpful to look at the TriG parser output. That parser is > not Javacc (it's much faster). It's informing but you will need to write > the javacc for this project. > >> regards, >> Qihong > > > Andy
