Hi Andy,

Why not create a private word?

Something like:
(?r rdf:type ex:Square) <-
        execSPARQL(select ?r
                where {
                        ?r ex:width ?width .
                        ?r ex:height ?height .
                        FILTER(?width = ?height) .
                }).


Miguel

On 10/03/14 15:16, "Andy Seaborne" <a...@apache.org> wrote:

>On 09/03/14 22:35, Miguel Bento Alves wrote:
>> 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 issue is to be able to find the SPARQL string part.
>
>The easiest way to integrate the two is to be able to take a SPARQL
>query string out of the rules syntax, and call the SPARQL parser on the
>string.
>
>But that needs finding the string to be identified before calling the
>SPARQL parser.
>
>Putting inside some obvious delimiters is one way but { ... } is not
>simple because {} occurs inside SPARQL itself. (yes you can count
>nestings .. until it appears in a ""-string as a single brace).
>
>It's like the CDATA problem in XML.
>
>One way is to use a delimiter that is not SPARQl related.
>
>``` springs to mind and then just assume it never occurs inside SPARQL,
>or of it does it's needs special quoting like \''' if used in rules.
>This is all outside the SPARQL parser.  It's just trying to
>find the start and end of the string to pass to the SPARQL subsystem.
>
>Whatever way you choose, it's need at least tinkering with the current
>rules parser, or building a new syntax for "SPARQL Rules" (more work).
>
>How comfortable are you in modifying the parser or creating a new one?
>
>>
>> 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?
>
>As you'll have noticed, we are mentor-limited.
>
>Some of the projects, JENA-632 (Custom JSON output) and JENA-491
>(CONSTRUCT quads), aren't going to happen unless a mentor appears.
>
>I can deal with at most 2.
>
>And if it aligns in some way with my day job, that makes 2, rather than
>1, more likely.
>
>       Andy
>
>>
>> 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