Hi Andy,

I upload the code to https://github.com/mbentoalves/jenaMBA_JENA650. Give
me some feedback if I'm doing well. I changed the files Rule.java and
Tokenizer.java. 

As you suggested, I implemented the Sparql command enclosure as:

(\\\SPARQL
PREFIX
SELECT ...

\\\SPARQL)

(I added the tokens of the clauses)

However, I left an "open door" if in future we want go deep in parsing,
overcoming corner cases, and simplify the declaration as my initial
propose:

(PREFIX
SELECT ...

)

Next, I will work on parsing of a Sparql command.

Related with prefixes, in your opinion what is the best approach:
        - The Sparql command has is own prefixes;
        - The prefixes are the same of the rules files, and should be declared 
in
the rules file and not in Sparql command;
        - mixed of the previous situations. The command share the same prefixes
of the rules but can be declared some specific prefix in a given sparql
command. 
        
        

Miguel
        



On 04/06/14 10:23, "Andy Seaborne" <a...@apache.org> wrote:

>On 04/06/14 09:20, Miguel Bento Alves wrote:
>> Hi Andy,
>>
>> I didn't foresee that cases. I will work on that.
>
>Without deep parsing you can't address all the cases.  And there are
>more important things to worry about.
>
>>
>> Related with the syntax of the definition a SPARQL command, do you think
>> that parenthesis is ok?
>
>They are OK - a choice like ``` which is something very unlikely in a
>query is also possible.  Then you just look for another ``` and assume
>everything in between is one valid SPARQL query.
>
>\\\SPARQL
>PREFIX
>SELECT ...
>
>\\\SPARQL
>
>You simply make the token very unlikely or even invalid (In SPARQL, \\\
>is nearly invalid, \\\S is invalid except for comments.).
>
>> 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?
>
>Please set up a repository e.g. on github.
>
>       Andy
>
>>
>> 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).
>>>>
>>>>
>>>>
>>>
>>
>>
>


Reply via email to