PurRDF for Python
PurRDF is a from-scratch, dependency-light RDF 1.2
engine — parsers and serializers, SPARQL, SHACL, ShEx, RDFC-1.0 canonicalization, and the
GTS graph-transport container — written in Rust and carried verbatim into Python, JavaScript,
and C. The purrdf package is the Python surface of that one engine: the same
byte-identical semantics in every language, including triple terms, reifiers, and
base-direction literals that most incumbent libraries do not carry.
Install
pip install purrdf
Requires Python 3.13+. Wheels bundle the native extension; no Rust toolchain needed.
Parse RDF
import purrdf
quads = purrdf.parse(
'<https://example.org/alice> <http://xmlns.com/foaf/0.1/name> "Alice" .',
purrdf.RdfFormat.TURTLE,
)
purrdf.parse accepts Turtle, TriG, N-Triples, N-Quads, TriX, and HexTuples
(purrdf.RdfFormat); JSON-LD and RDF/XML travel through the dedicated
purrdf.from_json_ld / purrdf.to_json_ld and purrdf.from_rdf_xml /
purrdf.to_rdf_xml converters. All codecs are first-party with
byte-deterministic output.
Validate with SHACL
The SHACL engine lives at purrdf.shapes (mirroring the Rust crate; purrdf.shacl
is a back-compat alias):
from purrdf import shapes
report = shapes.validate(shapes_ttl=my_shapes, data_nt=my_data)
print(report["conforms"])
Complete SHACL Core, SHACL-SPARQL constraints/targets, and SHACL-AF sh:rule
entailment via shapes.entail(...). Reusable parsed shapes are available as
shapes.Shapes(shapes_ttl).validate_nt(data_nt).
Validate with ShEx
from purrdf import shex
results = shex.validate(
my_schema_shexc,
my_data_ttl,
[("https://example.org/alice", "https://example.org/PersonShape")],
)
print(all(entry["conformant"] for entry in results))
The ShEx 2.1 validator passes 1,051/1,051 attempted validation tests of the official
shexTest suite (see the repo's docs/CONFORMANCE.md).
rdflib compatibility layer
The package ships an rdflib-shaped API over the native engine:
from purrdf.compat.rdflib import Graph, URIRef
g = Graph()
g.parse(data=my_ntriples, format="nt")
print(len(g), g.serialize(format="turtle"))
For a literal, zero-change import rdflib, install the opt-in extra:
pip install purrdf[rdflib]
This pulls in the separate purrdf-rdflib
distribution, whose top-level rdflib package re-exports the compat surface, so
existing third-party code doing import rdflib / from rdflib.namespace import RDF
transparently runs on purrdf. Caveat: that shadow claims the rdflib import
name and must never be installed alongside the genuine
rdflib — the two cannot co-inhabit one
environment. It is a separate distribution (never bundled into the main purrdf
wheel) precisely so environments that need the real rdflib simply omit it.
GTS graph transport and relational exports
GTS is PurRDF's single-file, content-addressed, append-only container for RDF 1.2 graphs. Build one from quads and export it straight to relational stores:
import purrdf
gts_bytes = purrdf.gts_from_quads(my_nquads_bytes, format=purrdf.RdfFormat.N_QUADS)
purrdf.gts_to_sqlite(gts_bytes, "graph.db")
purrdf.gts_to_duckdb(gts_bytes, "graph.duckdb")
files = purrdf.gts_to_parquet(gts_bytes, "out/")
The same entry points are grouped under purrdf.gts for discoverability.
Learn more
- Repository: https://github.com/Blackcat-Informatics/purrdf
- Project site: https://blackcatinformatics.ca/purrdf/
- GTS specification, conformance matrix, and full docs live under
docs/in the repo.
Licensed under MIT OR Apache-2.0, at your option.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file purrdf-0.5.0.tar.gz.
File metadata
- Download URL: purrdf-0.5.0.tar.gz
- Upload date:
- Size: 1.9 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f08e8d45666a1106cf643a3d1d10ad9441b7bb04689f933ae00eb2a86b7c33e
|
|
| MD5 |
22c41ff0b07785db5a7015011d1792c0
|
|
| BLAKE2b-256 |
706eb7b009592ef555e84bd9026f17b2223da25adceaa289817c95b18789c03e
|
Provenance
The following attestation bundles were made for purrdf-0.5.0.tar.gz:
Publisher:
release-pypi.yaml on Blackcat-Informatics/purrdf
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
purrdf-0.5.0.tar.gz -
Subject digest:
9f08e8d45666a1106cf643a3d1d10ad9441b7bb04689f933ae00eb2a86b7c33e - Sigstore transparency entry: 2148739829
- Sigstore integration time:
-
Permalink:
Blackcat-Informatics/purrdf@5fbfb1c06d86dfd967087adebd23fa57155bb025 -
Branch / Tag:
refs/tags/py-v0.5.0 - Owner: https://github.com/Blackcat-Informatics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yaml@5fbfb1c06d86dfd967087adebd23fa57155bb025 -
Trigger Event:
push
-
Statement type:
File details
Details for the file purrdf-0.5.0-cp313-abi3-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: purrdf-0.5.0-cp313-abi3-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 3.9 MB
- Tags: CPython 3.13+, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0a9fede5b45222c7a353d837dfea7d13ae16ca870979077a9b8ee46e2c12cdb
|
|
| MD5 |
f9e0789b19377bf6b3979f0aa86701d5
|
|
| BLAKE2b-256 |
71baa08424c02c9a52e83504b6d8ba8a43d9f209576239a4eb4e2a582c6e1233
|
Provenance
The following attestation bundles were made for purrdf-0.5.0-cp313-abi3-manylinux_2_34_x86_64.whl:
Publisher:
release-pypi.yaml on Blackcat-Informatics/purrdf
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
purrdf-0.5.0-cp313-abi3-manylinux_2_34_x86_64.whl -
Subject digest:
f0a9fede5b45222c7a353d837dfea7d13ae16ca870979077a9b8ee46e2c12cdb - Sigstore transparency entry: 2148739913
- Sigstore integration time:
-
Permalink:
Blackcat-Informatics/purrdf@5fbfb1c06d86dfd967087adebd23fa57155bb025 -
Branch / Tag:
refs/tags/py-v0.5.0 - Owner: https://github.com/Blackcat-Informatics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yaml@5fbfb1c06d86dfd967087adebd23fa57155bb025 -
Trigger Event:
push
-
Statement type: