Skip to main content

shacl (Python)

Python bindings for the SHACL validation engine, built with PyO3 and maturin.

Building

pip install maturin
cd crates/shacl-python
maturin develop --release      # build and install into the current venv
maturin build --release        # produce a wheel in target/wheels

The extension targets the stable ABI (abi3-py39), so one wheel serves every CPython from 3.9 upwards.

Usage

import shacl

# Compile once, validate many: shapes are fixed while data changes, and
# compiling is a meaningful share of a small run.
shapes = shacl.Shapes.from_file("shapes.ttl")
report = shapes.validate_file("data.ttl")

if not report.conforms:
    for r in report.results:
        print(r.severity, r.component, r.focus_node, r.value)

Report is truthy when the data conforms and len() gives the result count, so the common case reads plainly:

if shapes.validate_file("data.ttl"):
    print("ok")

For a one-off, or for a self-describing document that carries its own shapes:

shacl.validate("data.ttl")                  # shapes come from the data graph
shacl.validate("data.ttl", "shapes.ttl")

Turtle can also be passed directly, which is convenient for tests:

shapes = shacl.Shapes.from_turtle(shapes_text)
report = shapes.validate_turtle(data_text)

Notes

Terms are returned as strings in N-Triples syntax — <http://ex/a>, "42"^^<http://www.w3.org/2001/XMLSchema#integer> — rather than as objects. That keeps the binding free of a dependency on any particular Python RDF library; parse them with whichever one you already use.

Threading

A Shapes object is immutable and safe to share. Validation releases the GIL and clones the term store per run rather than locking a shared one, so concurrent callers do not serialise on each other.

Measured on stock CPython 3.14 with the GIL enabled — 16 validations of a 69k-triple graph through one shared Shapes:

threads throughput
1 7.8 runs/s
4 26.9 runs/s
8 27.8 runs/s

It plateaus at four because each validation already parses across threads internally, so the cores are busy either way.

Free-threaded builds

The module declares gil_used = false, so it will not force the GIL back on when imported into a free-threaded interpreter (python3.14t). Note that free-threading is a separate build, not something a version number brings: a stock 3.14 still reports sys._is_gil_enabled() == True.

There is little to gain from it here. The GIL is already released around the work, which is why the table above scales. Free-threading would only help code doing significant Python-level work in parallel as well — and it costs the single abi3 wheel, since abi3 is a no-op on free-threaded builds and PyO3 falls back to a version-specific one.

The report as RDF

SHACL defines the validation report as a graph — a sh:ValidationReport — not as a list of strings. The attributes above are a convenience for reading it from Python; serialize is what to hand to another RDF tool.

print(shapes.validate_file("data.ttl").serialize())
_:r0 a sh:ValidationReport ;
    sh:conforms false ;
    sh:result _:r1 .
_:r1 a sh:ValidationResult ;
    sh:focusNode <http://ex/a> ;
    sh:resultPath <http://ex/age> ;
    sh:resultSeverity sh:Violation ;
    sh:sourceConstraintComponent sh:DatatypeConstraintComponent ;
    sh:value "old" .

Release files for shacl 0.1.12

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for shacl 0.1.12
File Size Uploaded
shacl-0.1.12.tar.gz 169.7 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for shacl 0.1.12
File Interpreter ABI Platform
shacl-0.1.12-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details
shacl-0.1.12-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details
shacl-0.1.12-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl CPython 3.9 abi3 macOS 11.0+ ARM64, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64 Details

Total release size: 9.1 MB

Release files / shacl-0.1.12.tar.gz

Download URL shacl-0.1.12.tar.gz
Size 169.7 kB
Tags Source
SHA-256 checksum
How to use checksums
444f1930538a1b8f78c5b47f42f27e3234295fdf2c881435b3550a713c1b94cf
BLAKE2b-256 checksum
How to use checksums
fd6f99753cf22799eff558d0bb51e65f4292f955db7055e8d1552cb90d5c1d92
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / shacl-0.1.12-cp39-abi3-win_amd64.whl

Download URL shacl-0.1.12-cp39-abi3-win_amd64.whl
Size 2.4 MB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
5cf1011fb1926e9cac2b2ab26de80673666cbbce2bc186d5ddbc0e9931b81793
BLAKE2b-256 checksum
How to use checksums
639348d9f45db6e58ce608d8a1c74355c92ed0eb32de30f0e7df269f2969ae44
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / shacl-0.1.12-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL shacl-0.1.12-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.3 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
e44e28cc902a4c6e40cd5f2b27c21830d58ddcd0c67675dabfbaedd2c23e0874
BLAKE2b-256 checksum
How to use checksums
dcd9ed3b2481df2df0dc88a4869f9e1c9cc0169c84e48b27e6e1942c55283666
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release files / shacl-0.1.12-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl

Download URL shacl-0.1.12-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Size 4.3 MB
Tags CPython 3.9 abi3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
03c200d77b362603b82919f2d5569bfecf505d01a5568ff2c4e3362dfecac8c7
BLAKE2b-256 checksum
How to use checksums
5e8d6bc2c8f2706fd1fd65933970dbb347097911ab12799565e1bf294caa7a71
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 2, 2026.

Transparency log

Release history Release notifications | RSS feed

0.3.2

4 release files

0.3.1

4 release files

0.3.0

4 release files

0.2.0

4 release files

This release

0.1.12 This release

4 release files

0.1.10

4 release files

0.1.9

4 release files

0.1.8

4 release files

0.1.6

4 release files

0.1.5

4 release files

0.1.4

4 release files

0.1.3

4 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page