Hi, I've enriched the syntax tests with "short form" and "default graph" cases.
For execution tests, I add the test support in QueryTest for construct quad with the scripts files and data files in TRIG (see jena-arq/testing/ARQ/Construct/*.trig). I think construct quad should be part of the construct of ARQ. So I add the execution tests in jena-arq/testing/ARQ/Construct/manifest.ttl. The fuseki part of construct quad has been implemented (not committed yet). I'll submit the code as soon as the PR 89 [1] being merged. Anything to be improved for PR 89 from your reviews? regards, Qihong [1] https://github.com/apache/jena/pull/89 On Thu, Aug 6, 2015 at 8:55 PM, Andy Seaborne <a...@apache.org> wrote: > Hi - looking better - I see the syntax tests I provided. > > Does that set of tests cover all cases of the new syntax? > > Next, we need execution tests for ARQ. > >> There will need to be execute tests in jena-arq as well. These can be >> Junit tests in java and do not need to be external script files. >> This is separate from testing in Fuseki. > > > Do you have any other constraints on your time over the next 2 weeks? > > Andy > > > On 06/08/15 04:18, Qihong Lin wrote: >> >> Hi, >> >> I've fixed the bugs related to syntax checks. Please see my latest >> commits. Here're the output of the syntax files through qparse (you >> can also run "ExampleConstructQuads.java" to get the results). Are >> these with the expected behaviors, especially for >> "syntax-quad-construct-07.arq"? >> >> run-construct-quad-test: ======== File: syntax-quad-construct-01.arq >> PREFIX : <http://example/> >> >> CONSTRUCT { GRAPH :g { :s :p :o } } WHERE {} ==== Output of qparse >> --file syntax-quad-construct-01.arq PREFIX : <http://example/> >> >> CONSTRUCT { GRAPH :g { :s :p :o .} } WHERE { } ======== File: >> syntax-quad-construct-02.arq PREFIX : <http://example/> >> >> CONSTRUCT { GRAPH ?g { ?s ?p ?o } } WHERE { ?s ?p ?o } ==== Output of >> qparse --file syntax-quad-construct-02.arq PREFIX : >> <http://example/> >> >> CONSTRUCT { GRAPH ?g { ?s ?p ?o .} } WHERE { ?s ?p ?o } ======== >> File: syntax-quad-construct-03.arq PREFIX : <http://example/> >> >> CONSTRUCT { :s :p :o } WHERE {} ==== Output of qparse --file >> syntax-quad-construct-03.arq PREFIX : <http://example/> >> >> CONSTRUCT { :s :p :o . } WHERE { } ======== File: >> syntax-quad-construct-04.arq PREFIX : <http://example/> >> >> CONSTRUCT { GRAPH ?g { :s :p :o } ?s ?p ?o } WHERE { GRAPH ?g { ?s ?p >> ?o } } ==== Output of qparse --file syntax-quad-construct-04.arq >> PREFIX : <http://example/> >> >> CONSTRUCT { GRAPH ?g { :s :p :o .} ?s ?p ?o . } WHERE { GRAPH ?g { ?s >> ?p ?o } } ======== File: syntax-quad-construct-05.arq PREFIX : >> <http://example/> >> >> CONSTRUCT { ?s ?p ?o GRAPH ?g { :s :p :o } } WHERE { GRAPH ?g { ?s ?p >> ?o } } ==== Output of qparse --file syntax-quad-construct-05.arq >> PREFIX : <http://example/> >> >> CONSTRUCT { ?s ?p ?o . GRAPH ?g { :s :p :o .} } WHERE { GRAPH ?g { ?s >> ?p ?o } } ======== File: syntax-quad-construct-06.arq PREFIX : >> <http://example/> >> >> CONSTRUCT { GRAPH ?g { :s :p :o } ?s ?p ?o . ?s ?p ?o . GRAPH ?g { ?s >> ?p ?o } ?s ?p ?o . ?s ?p ?o GRAPH ?g { ?s ?p ?o } } WHERE { GRAPH ?g >> { ?s ?p ?o } } ==== Output of qparse --file >> syntax-quad-construct-06.arq PREFIX : <http://example/> >> >> CONSTRUCT { GRAPH ?g { :s :p :o .} ?s ?p ?o . ?s ?p ?o . GRAPH ?g { >> ?s ?p ?o .} ?s ?p ?o . ?s ?p ?o . GRAPH ?g { ?s ?p ?o .} } WHERE { >> GRAPH ?g { ?s ?p ?o } } ======== File: >> syntax-quad-construct-07.arq PREFIX : <http://example/> >> >> CONSTRUCT { GRAPH <urn:x-arq:DefaultGraphNode> {:s :p :o .} } WHERE >> {} ==== Output of qparse --file syntax-quad-construct-07.arq PREFIX >> : <http://example/> >> >> CONSTRUCT { :s :p :o . } WHERE { } ======== File: >> syntax-quad-construct-08.arq PREFIX : <http://example/> >> >> CONSTRUCT { GRAPH ?g { :s :p :o } GRAPH ?g1 { :s :p :o } } WHERE { } >> ==== Output of qparse --file syntax-quad-construct-08.arq PREFIX : >> <http://example/> >> >> CONSTRUCT { GRAPH ?g { :s :p :o .} GRAPH ?g1 { :s :p :o .} } WHERE { >> } >> >> On Sun, Aug 2, 2015 at 9:14 AM, Ying Jiang <jpz6311...@gmail.com> >> wrote: >>> >>> Hi Qihong, >>> >>> I re-checked the code you commited. Most of the hashCode issues >>> for arq.qparse that Andy pointed out are due to the incorrect >>> serialization of the Template. The code can only deal with the >>> quads with the same graph node, for which it may not always be the >>> case in practcial terms. Please make sure each example syntax file >>> can pass the checking process of arq.qparse. >>> >>> It's August now. You'd better hurry up and make the project >>> completed on time in the remaining weeks. >>> >>> Best regards, Ying Jiang >>> >>> On Thu, Jul 30, 2015 at 6:03 AM, Andy Seaborne <a...@apache.org> >>> wrote: >>>> >>>> Output of * each examnple syntax file (the queries are nonsense >>>> in practcial terms!) * running arq.qparse on the file * notes on >>>> what seems to be going on >>>> >>>> Andy >>>> >>>> ======== File: syntax-quad-construct-01.arq PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { GRAPH :g { :s :p :o } } WHERE {} ==== Output of >>>> qparse --file syntax-quad-construct-01.arq PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { GRAPH <http://example/g> {:s :p :o .} } WHERE { } >>>> ---- Issue: Minor: formatting of <http://example/g> should be :g >>>> >>>> ======== File: syntax-quad-construct-02.arq PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g { ?s ?p ?o } } WHERE { ?s ?p ?o } ==== >>>> Output of qparse --file syntax-quad-construct-02.arq PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g {?s ?p ?o .} } WHERE { ?s ?p ?o } ---- OK >>>> >>>> ======== File: syntax-quad-construct-03.arq PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { :s :p :o } WHERE {} ==== Output of qparse --file >>>> syntax-quad-construct-03.arq PREFIX : <http://example/> >>>> >>>> CONSTRUCT { GRAPH <urn:x-arq:DefaultGraphNode> {:s :p :o .} } >>>> WHERE { } ---- Issue: Major: The output is contains "GRAPH >>>> <urn:x-arq:DefaultGraphNode>" >>>> >>>> Note: <urn:x-arq:DefaultGraphNode> is for internal use only. >>>> >>>> For syntax, that is a named graph just like <http://example/g> >>>> >>>> ======== File: syntax-quad-construct-04.arq PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g { :s :p :o } ?s ?p ?o } WHERE { GRAPH ?g { >>>> ?s ?p ?o } } >>>> >>>> ==== Output of qparse --file syntax-quad-construct-04.arq >>>> >>>> **** Check failure: reparsed query hashCode does not equal parsed >>>> input query Query (hashCode: 1768688961)= PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g {:s :p :o . ?s ?p ?o .} } WHERE { GRAPH ?g { >>>> ?s ?p ?o } } >>>> >>>> >>>> Query2 (hashCode: 1896249441)= PREFIX : <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g {:s :p :o . ?s ?p ?o .} } WHERE { GRAPH ?g { >>>> ?s ?p ?o } } >>>> >>>> PREFIX : <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g {:s :p :o . ?s ?p ?o .} } WHERE { GRAPH ?g { >>>> ?s ?p ?o } } ---- Issue: The output puts the following triple >>>> into the GRAPH. See also syntax-quad-construct-08.arq >>>> >>>> ======== File: syntax-quad-construct-05.arq PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { ?s ?p ?o GRAPH ?g { :s :p :o } } WHERE { GRAPH ?g { >>>> ?s ?p ?o } } >>>> >>>> ==== Output of qparse --file syntax-quad-construct-05.arq >>>> >>>> **** Check failure: reparsed query hashCode does not equal parsed >>>> input query Query (hashCode: -262437683)= PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { GRAPH <urn:x-arq:DefaultGraphNode> {?s ?p ?o . :s :p >>>> :o .} } WHERE { GRAPH ?g { ?s ?p ?o } } >>>> >>>> >>>> Query2 (hashCode: -399379987)= PREFIX : <http://example/> >>>> >>>> CONSTRUCT { GRAPH <urn:x-arq:DefaultGraphNode> {?s ?p ?o . :s :p >>>> :o .} } WHERE { GRAPH ?g { ?s ?p ?o } } >>>> >>>> PREFIX : <http://example/> >>>> >>>> CONSTRUCT { GRAPH <urn:x-arq:DefaultGraphNode> {?s ?p ?o . :s :p >>>> :o .} } WHERE { GRAPH ?g { ?s ?p ?o } } ---- Issue: Plain ?s ?p >>>> ?o has been put into a named graph Adjacent blocks have merged. >>>> >>>> ======== File: syntax-quad-construct-06.arq PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g { :s :p :o } ?s ?p ?o . ?s ?p ?o . GRAPH ?g >>>> { ?s ?p ?o } ?s ?p ?o . ?s ?p ?o GRAPH ?g { ?s ?p ?o } } WHERE { >>>> GRAPH ?g { ?s ?p ?o } } >>>> >>>> ==== Output of qparse --file syntax-quad-construct-06.arq >>>> >>>> **** Check failure: reparsed query hashCode does not equal parsed >>>> input query Query (hashCode: -1800516808)= PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g {:s :p :o . ?s ?p ?o . ?s ?p ?o . ?s ?p ?o >>>> . ?s ?p ?o . ?s ?p ?o . ?s ?p ?o .} } WHERE { GRAPH ?g { ?s ?p >>>> ?o } } >>>> >>>> >>>> Query2 (hashCode: -129418312)= PREFIX : <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g {:s :p :o . ?s ?p ?o . ?s ?p ?o . ?s ?p ?o >>>> . ?s ?p ?o . ?s ?p ?o . ?s ?p ?o .} } WHERE { GRAPH ?g { ?s ?p >>>> ?o } } >>>> >>>> PREFIX : <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g {:s :p :o . ?s ?p ?o . ?s ?p ?o . ?s ?p ?o >>>> . ?s ?p ?o . ?s ?p ?o . ?s ?p ?o .} } WHERE { GRAPH ?g { ?s ?p >>>> ?o } } ---- Issue: Same as previous. >>>> >>>> ======== File: syntax-quad-construct-07.arq PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { GRAPH <urn:x-arq:DefaultGraphNode> {:s :p :o .} } >>>> WHERE {} >>>> >>>> ==== Output of qparse --file syntax-quad-construct-07.arq PREFIX >>>> : <http://example/> >>>> >>>> CONSTRUCT { GRAPH <urn:x-arq:DefaultGraphNode> {:s :p :o .} } >>>> WHERE { } ---- Issue: Should be different. A named graph of >>>> GRAPH <urn:x-arq:DefaultGraphNode> is not the default graph. >>>> >>>> ======== File: syntax-quad-construct-08.arq PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g { :s :p :o } GRAPH ?g1 { :s :p :o } } WHERE >>>> { } >>>> >>>> ==== Output of qparse --file syntax-quad-construct-08.arq >>>> >>>> **** Check failure: reparsed query hashCode does not equal parsed >>>> input query Query (hashCode: 636900208)= PREFIX : >>>> <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g {:s :p :o . :s :p :o .} } WHERE { } >>>> >>>> >>>> Query2 (hashCode: 636999583)= PREFIX : <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g {:s :p :o . :s :p :o .} } WHERE { } >>>> >>>> PREFIX : <http://example/> >>>> >>>> CONSTRUCT { GRAPH ?g {:s :p :o . :s :p :o .} } WHERE { } ---- >>>> Issue: Adjacent GRAPH blocks have merged. >>>> >