On 05/03/14 10:09, Miguel Bento Alves wrote:
Hi Andy,
Below, a first draft how a SPARQL command can be defined in a Jena rule.
In example 1) is defined that a
given student is diligent in a given class if he doesn't fail more than 1
lesson of that class. As this command has an aggregate clause, in the best
of my knowledge I can’t express the same thing with owl or rules. In a
same situation that I have in a project that i’m developing, I bypassed
using the clause "construct" and load the result to the data repository.
However, I cannot do this with dynamic data.
Example 2) and example 3) I took from http://spinrdf.org/. I know that i
can do the same thing using rules. However, SPARQL is a very expressive
command and there are several situations that we can better express in
SPARQL than in rules.
Example 1)
A given student is diligent in a given class if he doesn't fail more than
1 lesson of that class.
prefix exa: <http://www.example.org/example#>
(?s ex:isDiligent ?c) <-
(select ?s ?c
where {
?s exa:enroledAt ?c .
MINUS {
select ?s ?c
{
select ?s ?c (count(1) AS ?nc)
where {
?s exa:failsTo ?l .
?l exa:isLessonOf ?c .
}
group by ?s ?c
having (?nc >= 2)
}
}
}).
Miguel - combining parsers is hard. Parsers have a nasty tendency to
lookahead in the input stream so you can't just hand an input stream to
a another parser especially one that looks for EOF.
Either some easy delimiter on the SPARQL expression (but messy as it'll
imply escaping in that string) or a use the SPARQL parser machinery.
I wonder if it might be better to build a new syntax for "SPARQL Rules"
which is SPARQL inspired using BGPs
{?s ex:isDiligent ?c } <-
{ select ?s ?c
where {
?s exa:enroledAt ?c .
MINUS {
select ?s ?c
{
select ?s ?c (count(1) AS ?nc)
where {
?s exa:failsTo ?l .
?l exa:isLessonOf ?c .
}
group by ?s ?c
having (?nc >= 2)
}
}
} .
{?r rdf:type ex:Square} <-
{select ?r
where {
?r ex:width ?width .
?r ex:height ?height .
FILTER(?width != ?height) .
}}.
Such a syntax would need to sort the functors out somehow but if SPARQL
forms are inside {} (c.f. nested SELECTs ... and {} are useful as
delimiters fo rthe end of the query) bare "functor(name, name, ..)"
should work (I haven't tried).
Andy
Example 2:
A rectangle is square if the width is equal to the height.
(?r rdf:type ex:Square) <-
(select ?r
where {
?r ex:width ?width .
?r ex:height ?height .
FILTER(?width != ?height) .
}).
err - FILTER(?width = ?height) ?!
Example 3:
The area of a rectangle is the product between the width and the height.
(?r ex:area ?area) <-
unbound(?area),
(select ?r ?area
where {
?r ex:width ?width .
?r ex:height ?height .
bind( ?width * ?height as ?area ) .
}).
(?r ex:area ?area) <-
bound(?area),
(select ?r ?area
where {
?r ex:width ?width .
?r ex:height ?height .
bind( ?width * ?height as ?a ) .
FILTER (?a = ?area) .
}).
Miguel
On 05/03/14 08:03, "Andy Seaborne" <a...@apache.org> wrote:
Hi Miguel,
So that we know we're talking about the same thing, do you have some
concrete examples of what the SPARQL commands would look like?
This isn't to fix the design in anyway, just to have an illustration of
the ideas for the moment.
Andy
On 04/03/14 18:18, Miguel Bento Alves wrote:
Dear all,
I¹m Miguel Bento Alves, I¹m a Phd student in New University of Lisbon. I
want to develop the project described below, that was proposed by
myself,
in Google Summer code 2014. I need a mentor with knowledge about how
Jena
is implemented to give me the guidelines to implement the project and
supervised my implementation.
Best regards, Miguel Bento Alves
On 04/03/14 18:09, "Miguel Bento Alves (JIRA)" <j...@apache.org> wrote:
Miguel Bento Alves created JENA-650:
---------------------------------------
Summary: Define SPARQL commands in Jena rules
Key: JENA-650
URL: https://issues.apache.org/jira/browse/JENA-650
Project: Apache Jena
Issue Type: New Feature
Reporter: Miguel Bento Alves
The goal of this project is allow the definition of SPARQL commands in
Jena rules. Thus, we increase the expressiveness of Jena. Something
look
alike is spin-rules, where SPIN means SPARQL Inferencing Notation, a
SPARQL-based rule [1][2]. However, the purpose is not to implement SPIN
in Jena but provide Jena with the mechanisms to take the same
expressiveness as the spin frameworks.
The main tasks of this project are:
1. Defining how a SPARQL command can be declared in a rule. This task
encompass the discussion with the Jena community.
2. Provide Jena with the mechanisms defined in 1.
[1] http://www.w3.org/Submission/2011/SUBM-spin-overview-20110222/
[2] http://www.w3.org/Submission/2011/SUBM-spin-sparql-20110222/
--
This message was sent by Atlassian JIRA
(v6.2#6252)