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" <[email protected]> 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" <[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)
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>
>>
>