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. > > 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