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).