shacl-rules SHACL 1.2 Rules

Shape Rule Language conformance report

Version
0.1.5.dev0+gb075671cf.d20260713
Generated
2026-07-14
97.6%
165 / 169 tests passed · 4 failing

Syntax

134 / 138 passed4 not passed
syntax-ruleset-structure-01.srlpassed
syntax-ruleset-structure-02.srlpassed
source
BASE <http://example/base>
PREFIX : <http://example/>
PREFIX ns: <http://example/ns#>
syntax-ruleset-structure-03.srlpassed
source
BASE <http://example/base1>
PREFIX : <http://example/>
BASE <http://example/base2>
PREFIX ns: <http://example/ns#>
syntax-ruleset-structure-04.srlpassed
source
DATA {}
RULE {} WHERE {}
syntax-ruleset-structure-05.srlpassed
source
PREFIX : <http://example/>
RULE {} WHERE { }

PREFIX ns: <http://example/ns#>
RULE {} WHERE { :x :p ns:o }
syntax-rule-terms-07.srlpassed
source
PREFIX : <http://example/>
RULE {} WHERE { :s :p :o }
syntax-rule-terms-08.srlpassed
source
PREFIX : <http://example/>
RULE { } WHERE { ?s :p [] }
syntax-rule-terms-09.srlpassed
source
PREFIX : <http://example/>
RULE { } WHERE { ?s :p _:b . }
syntax-rule-terms-10.srlpassed
source
PREFIX :    <http://example/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

RULE { } WHERE { ?s :p 123e+10 }
syntax-rule-terms-11.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { ?s :p 123 }
syntax-rule-terms-12.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { ?s :p -123.5e+10 }
syntax-rule-terms-13.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { ?s :p <<( :a :b :c )>> }
syntax-rule-terms-14.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { :s :p "string" }
syntax-rule-terms-15.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { :s :p "abc"@en }
syntax-rule-terms-16.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { :s :p "abc"@en--ltr }
syntax-rule-paths-01.srlpassed
source
PREFIX :    <http://example/>
RULE { } WHERE { :sx :p1/:p2 :o }
syntax-rule-paths-02.srlpassed
source
PREFIX :    <http://example/>
RULE { } WHERE { ?x ^:p1/^:p2 ?o }
syntax-rule-paths-03.srlpassed
source
PREFIX :    <http://example/>
RULE { } WHERE { ?x :p1/a ?o }
syntax-rule-elements-filter-01.srlpassed
source
PREFIX :    <http://example/>
RULE { } WHERE { :s :p ?x FILTER( ?x > 0 ) }
syntax-rule-elements-filter-02.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { FILTER( true ) ?s ?p ?o FILTER ( isURI(?s) ) }
syntax-rule-elements-filter-03.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { FILTER( true ) ?s ?p ?o NOT { ?x ?y ?o FILTER ( isURI(?s) ) } }
syntax-rule-elements-not-01.srlpassed
source
PREFIX :    <http://example/>
RULE { } WHERE { :sx :p1 :o NOT { ?a ?b ?c } }
syntax-rule-elements-not-02.srlpassed
source
PREFIX :    <http://example/>
RULE { } WHERE { NOT { ?a ?b ?c } ?s ?p ?o }
syntax-rule-elements-not-03.srlpassed
source
PREFIX :    <http://example/>
RULE { } WHERE { NOT { :a :b :c1, :c2 , [ ?q ?z ] } ?s ?p ?o }
syntax-rule-elements-not-04.srlpassed
source
PREFIX :    <http://example/>
RULE { } WHERE { NOT { :a :b :c {| :saidBy :person |} } }
syntax-reification-01.srlpassed
source
PREFIX :    <http://example/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

RULE { } WHERE { ?s :p << :a :b :c >> }
syntax-reification-02.srlpassed
source
PREFIX :    <http://example/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

RULE { } WHERE { << :a :b :c >> }
syntax-reification-03.srlpassed
source
PREFIX :    <http://example/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>

RULE { } WHERE { ?s :p << :a :b :c ~:r >> }
syntax-reification-04.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { :s :p :o {| :q :r |} . }
syntax-reification-05.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { :s :p :o ~_:b {| :q :r |} . }
syntax-reification-06.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { :s :p :o {| :q1 :r1 , :r2 |} . }
syntax-reification-07.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { :s :p :o {| :q1 :r1 ; :q2 :r2 |} . }
syntax-reification-08.srlpassed
source
PREFIX :    <http://example/>

RULE { } WHERE { :s :p :o ~:r1 {| :q1 :r1 |} ~_:r2 {| :q2 :r2 |} . }
syntax-data-01.srlpassed
source
PREFIX : <http://example/>
DATA { }
syntax-data-02.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p :o . }
syntax-data-03.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p :o }
syntax-data-04.srlpassed
source
PREFIX : <http://example/>
DATA { :s a :T }
syntax-data-05.srlpassed
source
PREFIX : <http://example/>
DATA {
   # Symmetric RDF
   123 :q 456 .
}
syntax-data-06.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p1 "abc", "abc"@en , "abc"@en--ltr . }
syntax-data-07.srlpassed
source
PREFIX : <http://example/>
DATA {   :s :p1 1, 1.0, 1e0 . }
syntax-data-08.srlpassed
source
PREFIX : <http://example/>
DATA {   :s :p1 true, false }
syntax-data-09.srlpassed
source
PREFIX : <http://example/>
DATA {   :s :p1 "xyz"^^:datatype }
syntax-data-10.srlpassed
source
PREFIX : <http://example/>
DATA {   :s :p :o1, :o2 . }
syntax-data-11.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p :o {| :q1 "abc", "abc"@en , "abc"@EN-GB , "abc"@en--ltr ; :q2 1, true |} . }
syntax-data-12.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p :o ~:r {| :q :z |} . }
syntax-data-13.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p :o ~:r1 {| :q1 :z1 |} ~_:B {| :q1 :z1 |} }
syntax-data-14.srlpassed
source
PREFIX : <http://example/>
DATA { :x :p :z ~_:B {| :q _:B |} }
syntax-data-15.srlpassed
source
PREFIX : <http://example/>
DATA { :a :b :c ~:r . }
syntax-data-16.srlpassed
source
PREFIX : <http://example/>
DATA { << :s :p :o >> }
syntax-data-17.srlpassed
source
PREFIX : <http://example/>
DATA { << :s :p :o >> . }
syntax-data-18.srlpassed
source
PREFIX : <http://example/>
DATA { << :a :b :c ~:r >> . }
syntax-data-19.srlpassed
source
PREFIX : <http://example/>
DATA { << :s :p :o >> :q << :s1 :p1 :o1 >> . }
syntax-data-20.srlpassed
source
PREFIX : <http://example/>
DATA { <<( :s :p :o )>> :q <<( :s1 :p1 :o1 )>> . }
syntax-data-21.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p :o }
DATA { :x :y :z . }
syntax-template-01.srlpassed
source
PREFIX : <http://example/>

RULE { ?a ?b ?c } WHERE { ?a ?b ?c }
syntax-template-02.srlpassed
source
PREFIX : <http://example/>

RULE { ?a a :T } WHERE { ?a ?b ?c }
syntax-template-03.srlpassed
source
PREFIX : <http://example/>

RULE { ?a ?b :c1 , :c2 } WHERE { ?a ?b ?c }
syntax-template-04.srlpassed
source
PREFIX : <http://example/>

RULE { ?a ?b  "abc", "abc"@en , "abc"@en--ltr . } WHERE { ?a ?b ?c }
syntax-template-05.srlpassed
source
PREFIX : <http://example/>

RULE { ?a :p1 1, 1.0, 1e0 . } WHERE { ?a ?b ?c }
syntax-template-06.srlpassed
source
PREFIX : <http://example/>

RULE { ?a :p1 true, false . } WHERE { ?a ?b ?c }
syntax-template-07.srlpassed
source
PREFIX : <http://example/>

RULE { ?a :p  "xyz"^^:datatype } WHERE { ?a ?b ?c }
syntax-template-08.srlpassed
source
PREFIX : <http://example/>

RULE { :s :p :o {| ?b ?c , "abc", "abc"@en , "abc"@en--ltr ; :q2 1, true |} } WHERE { ?a ?b ?c }
syntax-template-09.srlpassed
source
PREFIX : <http://example/>

RULE { :s :p :o ~:r {| :q :z |} } WHERE { ?a ?b ?c }
syntax-template-10.srlpassed
source
PREFIX : <http://example/>

RULE { :s :p ?a ~ ?c1 {| ?b ?c2 |} } WHERE { ?a ?b ?c }
syntax-template-11.srlpassed
source
PREFIX : <http://example/>

RULE { :s :p :o ~:r1 {| :q1 :z1 |} ~_:B {| :q1 :z1 |} } WHERE { ?a ?b ?c }
syntax-template-12.srlpassed
source
PREFIX : <http://example/>

RULE { :x :p :z ~_:B {| :q _:B |} } WHERE { ?a ?b ?c }
syntax-template-13.srlpassed
source
PREFIX : <http://example/>

RULE { << ?a ?b ?c >> } WHERE { ?a ?b ?c }
syntax-template-14.srlpassed
source
PREFIX : <http://example/>

RULE { << ?a ?b ?c ~:r >> } WHERE { ?a ?b ?c }
syntax-template-15.srlpassed
source
PREFIX : <http://example/>

RULE { << :s :p :o >> :q << ?a ?b ?c  >> } WHERE { ?a ?b ?c }
syntax-template-16.srlpassed
source
PREFIX : <http://example/>

RULE { <<( ?a ?b :o )>> :q <<( :s :p ?c )>> } WHERE { ?a ?b ?c }
syntax-template-17.srlpassed
source
PREFIX : <http://example/>

RULE { ?a :p () } WHERE { ?a ?b ?c }
syntax-template-18.srlpassed
source
PREFIX : <http://example/>

RULE { ?a ?b (1) } WHERE { ?a ?b ?c }
syntax-template-19.srlpassed
source
PREFIX : <http://example/>

RULE { ?a ?b (?c) } WHERE { ?a ?b ?c }
syntax-template-20.srlpassed
source
PREFIX : <http://example/>

RULE { :x :q ("a" :x true) } WHERE { ?a ?b ?c }
syntax-template-21.srlpassed
source
PREFIX : <http://example/>

RULE { () :q :x } WHERE { ?a ?b ?c }
syntax-template-22.srlpassed
source
PREFIX : <http://example/>

RULE { (2) :q :x } WHERE { ?a ?b ?c }
syntax-template-23.srlpassed
source
PREFIX : <http://example/>

RULE { (1 2 3) :p :z } WHERE { ?a ?b ?c }
syntax-template-24.srlpassed
source
PREFIX : <http://example/>

RULE { [ ?b ?c ] } WHERE { ?a ?b ?c  }
syntax-template-25.srlpassed
source
PREFIX : <http://example/>

RULE { [ ?b ?c ; :p :z ] } WHERE { ?a ?b ?c  }
syntax-template-26.srlpassed
source
PREFIX : <http://example/>

RULE { [ ?b ?c ; :p :z ] :q :z } WHERE { ?a ?b ?c  }
syntax-template-27.srlpassed
source
PREFIX : <http://example/>

RULE { [ ?b ?c ; :p :z ] :q [] } WHERE { ?a ?b ?c  }
syntax-pattern-01.srlpassed
source
PREFIX : <http://example/>

RULE { } WHERE { ?a ?b ?c }
syntax-pattern-02.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { ?a a :T }
syntax-pattern-03.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { ?a ?b :c1 , :c2 }
syntax-pattern-04.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { ?a ?b  "abc", "abc"@en , "abc"@en--ltr . }
syntax-pattern-05.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { ?a :p1 1, 1.0, 1e0 . }
syntax-pattern-06.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { ?a :p1 true, false . }
syntax-pattern-07.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { ?a :p  "xyz"^^:datatype }
syntax-pattern-08.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { :s :p :o {| ?b ?c , "abc", "abc"@en , "abc"@en--ltr ; :q2 1, true |} }
syntax-pattern-09.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { :s :p :o ~:r {| :q :z |} }
syntax-pattern-10.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { :s :p ?a ~ ?c1 {| ?b ?c2 |} }
syntax-pattern-11.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { :s :p :o ~:r1 {| :q1 :z1 |} ~_:B {| :q1 :z1 |} }
syntax-pattern-12.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { :x :p :z ~_:B {| :q _:B |} }
syntax-pattern-13.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { << ?a ?b ?c >> }
syntax-pattern-14.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { << ?a ?b ?c ~:r >> }
syntax-pattern-15.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { << :s :p :o >> :q << ?a ?b ?c  >> }
syntax-pattern-16.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { <<( ?a ?b :o )>> :q <<( :s :p ?c )>> }
syntax-pattern-17.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { ?a :p () }
syntax-pattern-18.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { ?a ?b (1) }
syntax-pattern-19.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { ?a ?b (?c) }
syntax-pattern-20.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { :x :q ("a" :x true) }
syntax-pattern-21.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { () :q :x }
syntax-pattern-22.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { (2) :q :x }
syntax-pattern-23.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { (1 2 3) :p :z }
syntax-pattern-24.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { [ ?b ?c ] }
syntax-pattern-25.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { [ ?b ?c ; :p :z ] }
syntax-pattern-26.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { [ ?b ?c ; :p :z ] :q :z }
syntax-pattern-27.srlpassed
source
PREFIX : <http://example/>

RULE {} WHERE { [ ?b ?c ; :p :z ] :q [] }
syntax-rule-bad-01.srlpassed
source
PREFIX : <http://example/>
RULE
syntax-rule-bad-02.srlpassed
source
PREFIX : <http://example/>
RULE {}
syntax-rule-bad-03.srlpassed
source
PREFIX : <http://example/>
RULE {} WHERE
syntax-rule-bad-04.srlfailedParse succeeded (expected failure)
source
RULE {} WHERE {:s :p :o }
syntax-rule-bad-05.srlpassed
source
PREFIX : <http://example/>
RULE {} WHERE {:s [] :o }
syntax-rule-bad-06.srlpassed
source
PREFIX : <http://example/>
RULE {} WHERE {?s ?p ?o NOT { ?a ?b ?c { NOT ?d ?e ?f } } }
syntax-rule-terms-bad-01.srlfailedParse succeeded (expected failure)
source
PREFIX :    <http://example/>
RULE { } WHERE { :s :p "abc"@en--LTR }
syntax-rule-terms-bad-02.srlpassed
source
PREFIX :    <http://example/>
## Blank node labels don't end in . so it becomes a DOT
RULE { } WHERE { :s :p _:label. ; :q "" }
syntax-rule-terms-bad-03.srlpassed
source
PREFIX :    <http://example/>
## Decimals do not end in . so it becomes a DOT
RULE { } WHERE { :s :p 123. ; :q "" }
syntax-data-bad-01.srlpassed
source
PREFIX : <http://example/>
DATA { a :p :o }
syntax-data-bad-02.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p a }
syntax-data-bad-03.srlpassed
source
PREFIX : <http://example/>
DATA { :s "literal" :o }
syntax-data-bad-04.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p ?o }
syntax-data-bad-05.srlpassed
source
PREFIX : <http://example/>
DATA { :s ?p :o }
syntax-data-bad-06.srlpassed
source
PREFIX : <http://example/>
DATA { ?s :p :o }
syntax-data-bad-07.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p :o ~:r {| |} }
syntax-data-bad-08.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p :o ~ ?r {| :p :z |} }
syntax-data-bad-09.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p "xyx"^^:datatype. . }
syntax-data-bad-10.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p 1. . }
syntax-data-bad-11.srlpassed
source
PREFIX : <http://example/>
DATA { :s :p _:b. . }
syntax-template-bad-01.srlfailedParse succeeded (expected failure)
source
PREFIX :    <http://example/>
RULE { :s :p "abc"@en--LTR } WHERE { ?a ?b ?c }
syntax-template-bad-02.srlpassed
source
PREFIX :    <http://example/>
RULE { <iri with space> :p "abc" } WHERE { ?a ?b ?c }
syntax-template-bad-03.srlpassed
source
PREFIX :    <http://example/>
RULE { a :p "abc" } WHERE { ?a ?b ?c }
syntax-template-bad-04.srlpassed
source
PREFIX : <http://example/>
RULE { :s :p :o ~:r {| |} } WHERE { ?a ?b ?c }
syntax-template-bad-05.srlpassed
source
PREFIX : <http://example/>
RULE { :s :p1/:p2 :o } WHERE { ?a ?b ?c }
syntax-template-bad-06.srlpassed
source
PREFIX : <http://example/>
RULE { :s :p :o {| :p1/:p2 :oz } WHERE { ?a ?b ?c }
syntax-pattern-bad-01.srlfailedParse succeeded (expected failure)
source
PREFIX :    <http://example/>
RULE { } WHERE { :s :p "abc"@en--LTR }
syntax-pattern-bad-02.srlpassed
source
PREFIX :    <http://example/>
RULE { } WHERE { <iri with space> :p "abc" }
syntax-pattern-bad-03.srlpassed
source
PREFIX :    <http://example/>
RULE { } WHERE { a :p "abc" }
syntax-pattern-bad-04.srlpassed
source
PREFIX : <http://example/>
RULE {} WHERE { :s :p :o ~:r {| |} }

Well-formedness

8 / 8 passedall passing
wellformed-01.srlpassed
source
PREFIX : <http://example>
RULE { ?s ?p ?o }
WHERE {
    ?s ?p ?o
}
wellformed-02.srlpassed
source
PREFIX : <http://example>
RULE { ?s ?p ?o }
WHERE {
    ?s ?p ?o . FILTER(?o < 50)
}
wellformed-03.srlpassed
source
PREFIX : <http://example/>
RULE { ?s ?p ?o }
WHERE {
    ?s :p ?o .
    SET ( ?p := :p )
}
wellformed-04.srlpassed
source
PREFIX : <http://example/>
RULE { ?s ?p ?o }
WHERE {
    ?s :p :z .
    NOT { ?s :q ?y }
    ?s  :q ?o
    SET(?p := :p)
}
wellformed-bad-01.srlpassed
source
PREFIX : <http://example/>
RULE { ?s ?p ?o }
WHERE {
    ?s ?p ?o
    SET(?o := 123)
}
wellformed-bad-02.srlpassed
source
PREFIX : <http://example/>
RULE { :s :p ?x }
WHERE {
    SET(?x := 1)
    SET(?x := 1)
}
wellformed-bad-03.srlpassed
source
PREFIX : <http://example/>
RULE { ?s ?p ?o }
WHERE {
    FILTER(?o < 50)
    ?s ?p ?o
}
wellformed-bad-04.srlpassed
source
PREFIX : <http://example/>
RULE { ?s ?p ?o }
WHERE {
  ?s ?p ?z
}

Stratification

9 / 9 passedall passing
stratification-01.srlpassed
source
PREFIX : <http://example/>
RULE {} WHERE {}
stratification-02.srlpassed
source
PREFIX : <http://example/>
RULE {} WHERE {?s ?p ?o }
stratification-03.srlpassed
source
PREFIX : <http://example/>
RULE {} WHERE {:s :p ?o . NOT { :x :data ?z } }
stratification-04.srlpassed
source
PREFIX : <http://example/>
RULE { ?s :p "abc" } WHERE { NOT { ?s :p "XYZ" } SET ( ?s := :sz ) }
RULE { :s :p "ABC" } WHERE { ?s :q :z }
stratification-05.srlpassed
source
PREFIX : <http://example/>
RULE { [] :q "Rule" } WHERE { ?s :z ?o }
stratification-bad-01.srlpassed
source
PREFIX : <http://example/>
RULE { ?s :p "ABC" } WHERE { ?s :data "" . NOT { ?s :p "ABC" } }
stratification-bad-02.srlpassed
source
PREFIX : <http://example/>
RULE { ?s :p "abc" } WHERE { ?s :data "" . NOT { ?s :p "ABC" } }
RULE { :s :p "ABC" } WHERE { NOT { ?x :p "abc" } ?s :data "" }
stratification-bad-03.srlpassed
source
PREFIX : <http://example/>
RULE { [] :q "Rule" } WHERE { ?s :q ?o }
stratification-bad-04.srlpassed
source
PREFIX : <http://example/>
RULE { [] :q ?o } WHERE { ?s :p ?o }
RULE { ?s :p "Rule" } WHERE { ?s ?p "Rule" }
RULE { ?s :q "Rule" } WHERE { ?s :q ?o }

Evaluation

11 / 11 passedall passing
Eval-basic-01passed
ruleset
PREFIX : <http://example/>

RULE { :x :q ?o } WHERE { :s :p ?o }
data
PREFIX : <http://example/>

:s :p :o .
expected
PREFIX : <http://example/>

## ## Data graph
## :s :p :o
## 
## ## Inferred
## :x :q :o
## 
## ## Output graph
## :s :p :o
## :x :q :o

:x :q :o .
inferred (actual)
:x :q :o .
Eval-basic-02passed
ruleset
PREFIX : <http://example/>

RULE { :x :q ?o } WHERE { :s :p ?z . ?z :q ?o }
data
PREFIX : <http://example/>

:s :p :z .
:z :q :o .
expected
PREFIX : <http://example/>

:x :q :o .
inferred (actual)
:x :q :o .
Eval-data-01passed
ruleset
PREFIX : <http://example/>

DATA { :a :b :c }
data
# Empty graph
expected
PREFIX : <http://example/>

:a :b :c .
inferred (actual)
:a :b :c .
Eval-data-02passed
ruleset
PREFIX : <http://example/>

DATA { :a :b :c1 , :c2  }

RULE {} WHERE {}

DATA { :a :b1 :c1 ;
          :b2 :c2
     }
data
# Empty graph
expected
PREFIX : <http://example/>

:a :b :c1 .
:a :b :c2 .
:a :b1 :c1 .
:a :b2 :c2 .
inferred (actual)
:a :b :c1,
        :c2 ;
    :b1 :c1 ;
    :b2 :c2 .
Eval-negation-01passed
ruleset
PREFIX : <http://example/>

RULE { :x :p ':q absent' } WHERE { NOT { ?s :q ?o } }
data
# Empty graph
expected
PREFIX : <http://example/>

:x :p ':q absent' .
inferred (actual)
:x :p ":q absent" .
Eval-rdfs-subclassof-1passed
ruleset
## RDFS (without no axoimatic triples)

PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

## subClassOf
RULE { ?a rdfs:subClassOf ?c } WHERE { ?a rdfs:subClassOf ?b . ?b rdfs:subClassOf ?c }
RULE { ?a rdf:type ?y } WHERE { ?a rdf:type ?x . ?x rdfs:subClassOf ?y }

## subPropertyOf
RULE { ?a rdfs:subPropertyOf ?c } WHERE { ?a rdfs:subPropertyOf ?b . ?b rdfs:subPropertyOf ?c }
RULE { ?a ?prop ?o } WHERE { ?a ?subProp ?o . ?subProp rdfs:subPropertyOf ?prop }

## Domain
RULE { ?a rdf:type ?y } WHERE { ?a ?p ?o . ?p rdfs:domain ?y }

## Range
RULE { ?a rdf:type ?y } WHERE { ?s ?p ?a . ?p rdfs:range ?y }
data
PREFIX :      <http://example/>
PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

:A rdf:type :S .

:S  rdfs:subClassOf :T1 .

:T1 rdfs:subClassOf :T2 .
expected
PREFIX :      <http://example/>
PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>


:S rdfs:subClassOf :T2 .
:A rdf:type :T1 .
:A rdf:type :T2 .
inferred (actual)
:A a :T1,
        :T2 .
:S rdfs:subClassOf :T2 .
Eval-rdfs-subproperty-1passed
ruleset
## RDFS (without no axoimatic triples)

PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

## subClassOf
RULE { ?a rdfs:subClassOf ?c } WHERE { ?a rdfs:subClassOf ?b . ?b rdfs:subClassOf ?c }
RULE { ?a rdf:type ?y } WHERE { ?a rdf:type ?x . ?x rdfs:subClassOf ?y }

## subPropertyOf
RULE { ?a rdfs:subPropertyOf ?c } WHERE { ?a rdfs:subPropertyOf ?b . ?b rdfs:subPropertyOf ?c }
RULE { ?a ?prop ?o } WHERE { ?a ?subProp ?o . ?subProp rdfs:subPropertyOf ?prop }

## Domain
RULE { ?a rdf:type ?y } WHERE { ?a ?p ?o . ?p rdfs:domain ?y }

## Range
RULE { ?a rdf:type ?y } WHERE { ?s ?p ?a . ?p rdfs:range ?y }
data
PREFIX :      <http://example/>
PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

:s :p :o .

:p  rdfs:subPropertyOf :p1 .
:p1 rdfs:subPropertyOf :p2 .
expected
PREFIX :      <http://example/>
PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

:p rdfs:subPropertyOf :p2 .
:s :p1 :o .
:s :p2 :o .
inferred (actual)
:p rdfs:subPropertyOf :p2 .
:s :p1 :o ;
    :p2 :o .
Eval-rdfs-domain-1passed
ruleset
## RDFS (without no axoimatic triples)

PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

## subClassOf
RULE { ?a rdfs:subClassOf ?c } WHERE { ?a rdfs:subClassOf ?b . ?b rdfs:subClassOf ?c }
RULE { ?a rdf:type ?y } WHERE { ?a rdf:type ?x . ?x rdfs:subClassOf ?y }

## subPropertyOf
RULE { ?a rdfs:subPropertyOf ?c } WHERE { ?a rdfs:subPropertyOf ?b . ?b rdfs:subPropertyOf ?c }
RULE { ?a ?prop ?o } WHERE { ?a ?subProp ?o . ?subProp rdfs:subPropertyOf ?prop }

## Domain
RULE { ?a rdf:type ?y } WHERE { ?a ?p ?o . ?p rdfs:domain ?y }

## Range
RULE { ?a rdf:type ?y } WHERE { ?s ?p ?a . ?p rdfs:range ?y }
data
PREFIX :      <http://example/>
PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

:p rdfs:domain :T.

:s :p "123" .
expected
PREFIX :      <http://example/>
PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

:s rdf:type :T .
inferred (actual)
:s a :T .
Eval-rdfs-domain-2passed
ruleset
## RDFS (without no axoimatic triples)

PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

## subClassOf
RULE { ?a rdfs:subClassOf ?c } WHERE { ?a rdfs:subClassOf ?b . ?b rdfs:subClassOf ?c }
RULE { ?a rdf:type ?y } WHERE { ?a rdf:type ?x . ?x rdfs:subClassOf ?y }

## subPropertyOf
RULE { ?a rdfs:subPropertyOf ?c } WHERE { ?a rdfs:subPropertyOf ?b . ?b rdfs:subPropertyOf ?c }
RULE { ?a ?prop ?o } WHERE { ?a ?subProp ?o . ?subProp rdfs:subPropertyOf ?prop }

## Domain
RULE { ?a rdf:type ?y } WHERE { ?a ?p ?o . ?p rdfs:domain ?y }

## Range
RULE { ?a rdf:type ?y } WHERE { ?s ?p ?a . ?p rdfs:range ?y }
data
PREFIX :      <http://example/>
PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

:p rdfs:domain :T1 .
:T1 rdfs:subClassOf :T2 .

:s :p "123" .
expected
PREFIX :      <http://example/>
PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

:s rdf:type :T1 .
:s rdf:type :T2 .
inferred (actual)
:s a :T1,
        :T2 .
Eval-rdfs-range-1passed
ruleset
## RDFS (without no axoimatic triples)

PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

## subClassOf
RULE { ?a rdfs:subClassOf ?c } WHERE { ?a rdfs:subClassOf ?b . ?b rdfs:subClassOf ?c }
RULE { ?a rdf:type ?y } WHERE { ?a rdf:type ?x . ?x rdfs:subClassOf ?y }

## subPropertyOf
RULE { ?a rdfs:subPropertyOf ?c } WHERE { ?a rdfs:subPropertyOf ?b . ?b rdfs:subPropertyOf ?c }
RULE { ?a ?prop ?o } WHERE { ?a ?subProp ?o . ?subProp rdfs:subPropertyOf ?prop }

## Domain
RULE { ?a rdf:type ?y } WHERE { ?a ?p ?o . ?p rdfs:domain ?y }

## Range
RULE { ?a rdf:type ?y } WHERE { ?s ?p ?a . ?p rdfs:range ?y }
data
PREFIX :      <http://example/>
PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

:p rdfs:range :T.

:s :p :o .
expected
PREFIX :      <http://example/>
PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

:o rdf:type :T .
inferred (actual)
:o a :T .
Eval-rdfs-range-2passed
ruleset
## RDFS (without no axoimatic triples)

PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

## subClassOf
RULE { ?a rdfs:subClassOf ?c } WHERE { ?a rdfs:subClassOf ?b . ?b rdfs:subClassOf ?c }
RULE { ?a rdf:type ?y } WHERE { ?a rdf:type ?x . ?x rdfs:subClassOf ?y }

## subPropertyOf
RULE { ?a rdfs:subPropertyOf ?c } WHERE { ?a rdfs:subPropertyOf ?b . ?b rdfs:subPropertyOf ?c }
RULE { ?a ?prop ?o } WHERE { ?a ?subProp ?o . ?subProp rdfs:subPropertyOf ?prop }

## Domain
RULE { ?a rdf:type ?y } WHERE { ?a ?p ?o . ?p rdfs:domain ?y }

## Range
RULE { ?a rdf:type ?y } WHERE { ?s ?p ?a . ?p rdfs:range ?y }
data
PREFIX :      <http://example/>
PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

:p rdfs:range :T1 .
:T1 rdfs:subClassOf :T2 .

:s :p :o .
expected
PREFIX :      <http://example/>
PREFIX rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

:o rdf:type :T1 .
:o rdf:type :T2 .
inferred (actual)
:o a :T1,
        :T2 .

Targeting extension (opt-in, NOT W3C-spec)

3 / 3 passedall passing

Opt-in extension — not part of the W3C SHACL 1.2 specification.

targeting-adult-01passed
ruleset
PREFIX ex: <http://example.org/>
RULE ex:r FOR ?this IN ex:AdultShape { ?this ex:status ex:adult } WHERE { ?this ex:age ?a }
data
@prefix ex: <http://example.org/> .
ex:Alice a ex:Person ; ex:age 30 .
ex:Bob a ex:Person ; ex:age 10 .
shapes
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix ex: <http://example.org/> .
ex:AdultShape a sh:NodeShape ; sh:targetClass ex:Person ;
  sh:property [ sh:path ex:age ; sh:minCount 1 ; sh:minInclusive 18 ] .
expected
@prefix ex: <http://example.org/> .
ex:Alice ex:status ex:adult .
inferred (actual)
ex:Alice ex:status ex:adult .
targeting-conformance-gate-01passed
ruleset
PREFIX ex: <http://example.org/>
RULE ex:r FOR ?e IN ex:EmployeeShape { ?e a ex:Employee } WHERE { ?e ex:worksFor ?c }
data
@prefix ex: <http://example.org/> .
ex:Eve a ex:Person ; ex:worksFor ex:Acme .
ex:Frank a ex:Person .
shapes
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix ex: <http://example.org/> .
ex:EmployeeShape a sh:NodeShape ; sh:targetClass ex:Person ;
  sh:property [ sh:path ex:worksFor ; sh:minCount 1 ] .
expected
@prefix ex: <http://example.org/> .
ex:Eve a ex:Employee .
inferred (actual)
ex:Eve a ex:Employee .
targeting-inferred-membership-01passed
ruleset
PREFIX ex: <http://example.org/>
RULE { ?x ex:age 40 } WHERE { ?x ex:bornYear ?y }
RULE ex:r FOR ?this IN ex:AdultShape { ?this ex:status ex:adult } WHERE { ?this ex:age ?a }
data
@prefix ex: <http://example.org/> .
ex:Dana a ex:Person ; ex:bornYear 1980 .
shapes
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix ex: <http://example.org/> .
ex:AdultShape a sh:NodeShape ; sh:targetClass ex:Person ;
  sh:property [ sh:path ex:age ; sh:minCount 1 ; sh:minInclusive 18 ] .
expected
@prefix ex: <http://example.org/> .
ex:Dana ex:age 40 .
ex:Dana ex:status ex:adult .
inferred (actual)
ex:Dana ex:age 40 ;
    ex:status ex:adult .