Martynas,

Two things:

1:: IIRC it is the queries that back various features that need to be more stable. Depending on the internal details of ARQ isn't a good place to be. Note that SpinDRF has it's own function and property function evaluation subsystem with slightly different semantics.

This is the problem you are encountering.

2:: The effect is initial binding isn't well defined.
Syntax rewriting is going to be more stable (and works remotely which initial bindings can't).

    Andy

On 22/05/2020 19:55, Martynas Jusevičius wrote:
Andy,

which part needs to be replaced with syntax rewriting -- SPIN
functions or the initial bindings?

Do you think it's possible to rewrite SPINRDF in a more SPARQL
compliant and less ARQ-dependent way?

On Thu, May 21, 2020 at 10:54 AM Andy Seaborne <a...@apache.org> wrote:



On 20/05/2020 22:11, Martynas Jusevičius wrote:
https://github.com/spinrdf/spinrdf/issues/22

On Wed, May 20, 2020 at 10:57 PM Martynas Jusevičius
<marty...@atomgraph.com> wrote:

Andy,

I was able to isolate a standalone example:
https://github.com/namedgraph/spinrdf-test

With 3.0.1 it succeeds. Change Jena version to 3.16.0-SNAPSHOT by
uncommenting the other <version> in pom.xml and it will fail:
https://github.com/namedgraph/spinrdf-test/blob/master/pom.xml#L28

I don't understand how or where spl:objectCount() and spl:instanceOf()
are executed, but i think it demonstrates clearly that some behaviour
has changed between those versions, even though SpinRDF code hasn't.

Many SpinRDF functions are written with implicit assumptions about how
ARQ - not SPARQL - executes.  They don't work when the optimizer is off,
reconfigured, or if the reference query engine is used.

In addition, the external injection of initial bindings

(Long term - that should be replaced with syntax rewriting of the query
- see QueryTransformOps)

The result is that each version of SpinRDF needs to be tuned to the
version of Jena it uses.

      Andy


Will post on https://github.com/spinrdf/spinrdf/issues as well.


Martynas

On Wed, May 20, 2020 at 12:37 PM Martynas Jusevičius
<marty...@atomgraph.com> wrote:

Hi,

I've narrowed down the differences to the counts produced by
spl:objectCount() SPIN function.

SELECT  *
WHERE
    { ?this  a                     ?TYPE_CLASS
        { BIND(<http://spinrdf.org/spl#objectCount>(?this, ?predicate)
AS ?objCount)
          FILTER ( bound(?minCount) && ( ?objCount < ?minCount ) )
        }
      UNION
        { BIND(<http://spinrdf.org/spl#objectCount>(?this, ?predicate)
AS ?objCount)
          FILTER ( bound(?maxCount) && ( ?objCount > ?maxCount ) )
        }
      UNION
        { FILTER bound(?valueType)
          ?this  ?predicate  ?value
          FILTER ( ! <http://spinrdf.org/spl#instanceOf>(?value, ?valueType) )
        }
    }

Bindings: ( ?predicate, spin:body )( ?comment, "the body of the
Template" )( ?minCount, 0 )( ?TYPE_CLASS, spin:Template )( ?maxCount,
1 )

3.15.0-SNAPSHOT

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| this
                                  | TYPE_CLASS                         |
objCount | predicate                      | value |
=================================================================================================================================================================================================
| <http://spinrdf.org/spin#Templates>
                                  | <http://spinrdf.org/spin#Template> |
2        | <http://spinrdf.org/spin#body> |       |
| <http://spinrdf.org/spin#ConstructTemplates>
                                  | <http://spinrdf.org/spin#Template> |
2        | <http://spinrdf.org/spin#body> |       |
| 
<https://github.com/AtomGraph/Processor/blob/develop/http-tests/custom#DefaultSubjectUpdateTemplate>
| <http://spinrdf.org/spin#Template> | 2        |
<http://spinrdf.org/spin#body> |       |
| <http://spinrdf.org/spin#AskTemplates>
                                  | <http://spinrdf.org/spin#Template> |
2        | <http://spinrdf.org/spin#body> |       |
| 
<https://github.com/AtomGraph/Processor/blob/develop/http-tests/custom#DefaultSubjectQueryTemplate>
   | <http://spinrdf.org/spin#Template> | 2        |
<http://spinrdf.org/spin#body> |       |
| <http://spinrdf.org/spin#UpdateTemplates>
                                  | <http://spinrdf.org/spin#Template> |
2        | <http://spinrdf.org/spin#body> |       |
| <http://spinrdf.org/spl#Argument>
                                  | <http://spinrdf.org/spin#Template> |
2        | <http://spinrdf.org/spin#body> |       |
| <http://spinrdf.org/spin#SelectTemplates>
                                  | <http://spinrdf.org/spin#Template> |
2        | <http://spinrdf.org/spin#body> |       |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

3.0.1

----------------------------------------------------
| this | TYPE_CLASS | objCount | predicate | value |
====================================================
----------------------------------------------------

I'll try to create an example now.


On Tue, May 19, 2020 at 6:14 PM Andy Seaborne <a...@apache.org> wrote:

That's a long jump.

(and it's a SpinRDF question)

   >> Are there some obvious suspects here or do I need to create a
   >> reproducible example?

reproducible example (noting that the query has custom functions which
have names that suggest they are not proper "functions" (i.e. their
return is not a function of their arguments alone and they access the
data graph .. which might be a query).

I can't see why it might now have answers when it didn't before.

       Andy

On 19/05/2020 13:04, Martynas Jusevičius wrote:
With 3.0.1, no such internal *violations* are produced.

On Tue, May 19, 2020 at 2:03 PM Martynas Jusevičius
<marty...@atomgraph.com> wrote:

Hi,

After upgrading our code as well as SPINRDF from 3.0.1 to
3.16.0-SNAPSHOT, some constraint violation-related tests are failing.

With 3.16.0-SNAPSHOT, it seems that a bunch of constraint violations
are coming from the SPIN vocabulary iself, e.g. "Attribute spin:body :
    [0,1]" on spin:ConstructTemplates, spin:SelectTemplates etc.
With 3.0.1, no such internal validations are produced.

The models being validated use a basic RDFS inference (subclassing etc.)

I have tracked the source of the difference to query execution in
SPINConstraints.runQueryOnClass():
https://github.com/spinrdf/spinrdf/blob/master/src/main/java/org/spinrdf/constraints/SPINConstraints.java#L614

Since SPINRDF code hasn't changed, only the Jena versions, could there
be differences in query execution? The specific query that produces
different results is this:

CONSTRUCT
     {
       _:c0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
<http://spinrdf.org/spin#ConstraintViolation> .
       _:c0 <http://spinrdf.org/spin#violationRoot> ?this .
       _:c0 <http://spinrdf.org/spin#violationPath> ?predicate .
     }
WHERE
     { ?this  a  ?TYPE_CLASS
         { FILTER ( bound(?minCount) && (
<http://spinrdf.org/spl#objectCount>(?this, ?predicate) < ?minCount )
) }
       UNION
         { FILTER ( bound(?maxCount) && (
<http://spinrdf.org/spl#objectCount>(?this, ?predicate) > ?maxCount )
) }
       UNION
         { FILTER bound(?valueType)
           ?this  ?predicate  ?value
           FILTER ( ! <http://spinrdf.org/spl#instanceOf>(?value, ?valueType) )
         }
     }

The query string and initial bindings are the same with both versions,
for example:

( ?predicate, spin:body )( ?comment, "the body of the Template" )(
?minCount, 0 )( ?TYPE_CLASS, spin:Template )( ?maxCount, 1 )

Are there some obvious suspects here or do I need to create a
reproducible example?

Thanks,

Martynas

Reply via email to