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" <a...@apache.org> 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" <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)
>>>>
>>>>
>>>
>>
>>
>


Reply via email to