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