Hi Andy, I didn't foresee that cases. I will work on that.
Related with the syntax of the definition a SPARQL command, do you think that parenthesis is ok? I think that is the better choice because whatever the token we choose we will have the same problems. Furthermore, is congruent with rules syntax. I don't have much experience in team development. How is the better way to share code with you? Miguel On 04/06/14 08:56, "Andy Seaborne" <a...@apache.org> wrote: >On 03/06/14 17:15, Miguel Bento Alves wrote: >> Hi all, >> >> I'm working on JENA-650 - Define SPARQL commands in Jena rules, under >>GSoC >> project. Right now, I need to define the syntax to declare a SPARQL >>command >> in a rule. My proposal is to do as in rules, enclosed between >>parenthesis >> (some examples listed below). >> >> I need some feedback from you about this proposal. >> >> To parse the rule, my approach was: >> - for every open parenthesis, "(", I analyse the next token. *1 >> - if the token after an open bracket is a SPARQL command (private words >> "select" or "ask", for instance), I extract the command between >>parenthesis. >> - As inside a SPARQL command we can have parenthesis, I count the >>number of >> open and close parenthesis. When the difference between both achieve 0, >>I >> get the command). >> >> *1 - I implemented a method to return the next token without increase >>the >> pointer of the tokens extraction process. >> >> I did small tests, and so far is working well. As I return null in each >> SPARQL command parsed, for now, the rule is well executed. When I >>introduce >> errors in parenthesis, the parse is returning the error in the right >>place. >> >> Miguel > >Miguel, > >If you have got it working then that's what counts. I can see some >corner cases where the ( and the ) need not match up even on a >syntactically valid > >( SELECT * > { ?s ?p ?o > BIND ( STRAFTER(str(?o), ")" ) > } >) > >or comments > >( SELECT * { ?s ?p "hello" } # Comment ) here >) > >Do you have a link to the code? I'd like to take a look. > > Andy > > >> >> (?r rdf:type ex:Square) <- >> ( >> select ?r >> where { >> ?r ex:width ?width . >> ?r ex:height ?height . >> FILTER(?width = ?height) . >> } >> ). >> (?r rdf:type ex:Square) <- >> (? rdf:type ex:Rectangle), >> ( >> select ?r >> where { >> ?r ex:width ?width . >> ?r ex:height ?height . >> FILTER(?width = ?height) . >> } >> ). >> (? rdf:type ex:Rectangle), >> ( >> select ?r >> where { >> ?r ex:width ?width . >> ?r ex:height ?height . >> FILTER(?width = ?height) . >> } >> ) -> >> (?r rdf:type ex:Square). >> >> >> >