Feature support¶
Legend: ✅ supported · ⚠️ partial or gated · ❌ unsupported.
SHACL Core¶
Feature |
Status |
Notes |
|---|---|---|
Node & property shapes |
✅ |
|
Targets — |
✅ |
|
Cardinality — |
✅ |
|
Value type — |
✅ |
|
Range — |
✅ |
numeric, date/time, and duration ordering |
String — |
✅ |
|
Logical — |
✅ |
|
Shape-based — |
✅ |
|
Property pairs — |
✅ |
on node and property shapes |
Other — |
✅ |
|
Paths — predicate, inverse, sequence, alternative, |
✅ |
|
|
✅ |
SHACL-AF (Advanced Features)¶
Feature |
Status |
Notes |
|---|---|---|
Rules — |
✅ |
forward-chained to a fixed point, honouring |
Node expressions — |
✅ |
|
SPARQL targets — |
✅ |
|
SPARQL constraints — |
✅ |
native execution with Spareval fallback |
Custom constraint components — |
✅ |
optional params, simple and complex |
Expression constraints — |
✅ |
|
SHACL functions — |
✅ |
full data-graph access |
SHACL functions — |
⚠️ |
evaluated as pure functions of their arguments; a body that reads the data graph is gated — see Partial support |
JavaScript — |
❌ |
no JS engine |
Recursion and semantics¶
Feature |
Status |
Notes |
|---|---|---|
Stratified recursive shapes |
✅ |
greatest fixed point for validation, least for inference, per stratum |
Non-stratifiable schemas (a cycle through negation) |
❌ |
diagnosed and refused, never guessed |
See Recursion and stratification for what those fixed points mean and why a non-stratifiable schema has no answer to give.
Partial support¶
A ⚠️ feature is one where Shifty can produce an answer but cannot guarantee it
is the right one. Rather than pick silently, it lets you choose what happens,
through on_unsupported — EngineOptions in Rust, and a keyword on
validate, validate_algebra, infer, and PreparedValidator in
Python:
"ignore"(default)Best effort. A graph-reading function called from a SPARQL context is evaluated over an empty dataset, so the result may be wrong.
"error"Refuse. The unsupported construct surfaces as a failure instead of a silent wrong answer.
conforms, report, text = shifty.validate(data, shapes, on_unsupported="error")
Invalid shapes diagnostics are separate from this policy. A malformed SHACL constraint or rule, including malformed SPARQL or an unresolved query prefix, is always rejected before validation or inference starts; it is never lowered as an absent feature.
The default is "ignore" for compatibility with existing pipelines, but if
you are going to act on the result, "error" is the setting you want: it
converts an unreliable answer into a visible one.
Evidence and repair coverage¶
Validation status is exact for every supported feature. The explanations are
not always available: a sh:sparql constraint is opaque to evidence and
blocked for repair, because an arbitrary query cannot be inverted. The complete
list of these cases is in Evidence reference under “Opaque and blocked evidence”,
and repair’s blocking reasons are in Repair reference.