·
1 commit
to main
since this release
Immutable
release. Only release title and notes can be modified.
The first release after 1.0.0. Two reported bugs, the release fallout 1.0.0 left
behind, and a data-conflation bug in the GTS carrier found while coordinating
with the upstream wire-format freeze.
Additive: no published API changes shape. A TermRow widening that would have
forced a major bump was reworked into a parallel column before release — RDF 1.2
base direction is now purrdf_rdf::gts_view::term_directions() and a
directions key on the Python projection dict, so every 1.0.0 caller keeps
working.
Bug Fixes
- shacl:
sh:messagetemplates are substituted on thesh:sparqlpath.
{$path}/{$value}shipped as literal braces because the constraint's
message was resolved once and cloned into every result row; it is now rendered
per solution, from that solution's own bindings. Both{?var}and{$var}
spellings, and{$this}whether or not the SELECT projects it. An unbound
placeholder is still left verbatim rather than blanked. - cli:
purrdf validateresolves a shapes graph'sowl:importsfrom
--import IRI=FILE, transitively and cycle-safely. Previously they were
ignored in silence, so a shapes graph whose shapes lived in its imports
reportedconforms trueagainst no shapes at all. PurRDF fetches nothing: an
unresolved import with no--importgiven is reported on stderr, and with a
table given is refused by name. - gts: RDF 1.2 literal base direction is part of a term's identity in the
snapshot composer. It was absent from the intern key, so"Cat"@en--ltrand
"Cat"@en--rtlmerged into ONE term and every quad was repointed at the
survivor — a different graph, not a missing column. Emitted bytes are
unchanged for any input without directional literals. - release: The crates.io bootstrap script packages and publishes its PLAN
rather than the whole ledger; a deferred crate no longer reachescargo package. Its self-test asserts the arguments handed to the irreversible step,
and the arm that had been failing since the ledger emptied is fixed — that arm
runs beforecargo testinmake check, so it had been failing the gate for
every contributor.
Features
- python:
gts_to_sqlite,gts_to_duckdbandgts_to_parquetare
implemented. They previously raised unconditionally. Five tables in the
projection's own row order, so the same container exports to the same content
twice. SQLite needs only the standard library; the other two take the
[duckdb]/[parquet]extras. - rdf:
gts_view::term_directions()exposes RDF 1.2 base direction from the
relational projection, which previously dropped it. - entail:
entails::imports::imported_iris()is public, so a consumer can
read a document'sowl:importswithout re-deriving which objects count.
Documentation
- pack: The pack identity digest is no longer captioned "RDFC-1.0". It is
computed through thepurrdf-rdfc12profile, which agrees with RDFC-1.0 byte
for byte only on the RDF 1.1 subset. Labelling only — no digest bytes change.
Build
- ci: Benchmarks moved off the per-push path to a weekly schedule plus
workflow_dispatch, and itsuvinstaller is pinned. - make:
make doctorreports which build pins the local machine actually
enforces, and the wasm gate distinguishes "rustup absent" from "target not
installed" instead of printing the same line for both. - python:
bench = falseon the binding lib, socargo bench --workspace
links.