Hi Andy,
"I wonder if it might be better to build a new syntax for "SPARQL Rules"
which is SPARQL inspired using BGPs"
Yes, it is a good possibility. You, better than me for sure, know the
issues carried by the syntax.
And, what about something like:
(?r rdf:type ex:Square) <-
{select ?r
where {
?r ex:width ?width .
?r ex:height ?height .
FILTER(?width = ?height) .
}}.
the ideia is combine SPARQL with rules. I will be possible rules like:
(?a ?b ?c) <-
(?a ?b ?d),
{select ?a
where {a? ?e ?f .}
group by ?a
having (count(1) > 1)
}.
Do you think that is complicate? However, I think that there is no problem
to have rules only based on SPARQL.
BTW, do you think that I can get a mentor for this project?
Miguel
On 09/03/14 17:42, "Andy Seaborne" <[email protected]> wrote:
>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" <[email protected]> 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)" <[email protected]>
>>>>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)
>>>>
>>>>
>>>
>>
>>
>