Repository navigation
[0.8.0] - 2026-09-25
First release since 0.7.9, and a breaking one: it changes the default Brick
version and the default SHACL engine, and removes the Allegrograph reasoner
along with several pieces of long-broken surface area. 0.8.0a1, 0.8.0a2 and
0.7.10a1 were pre-releases of this version; this entry covers all changes since
0.7.9.
Removed
- The Allegrograph OWL-RL backend, along with the
[allegro]extra and the
dockerdependency. It ranagtool materializeinside a
franzinc/agraph:v7.1.0container to provide a third implementation of a
profile the two in-process reasoners already cover.
expand("owlrl", backend="allegrograph")now raisesValueError. brickschema.topquadrant_shacland the bundled TopQuadrant CLI (49 MB of
Java, including two 9 MB fat jars). Nothing imported the module;
brick-tq-shaclships its own copy of the engine. The wheel drops from
8.2 MB to 1.4 MB as a result.- The
brick_validatecommand. It imported abrickschema.validatemodule
that does not exist, and declared no console-script entry point, so it could
neither be installed nor run. docs/requirements.txt, which was committeduv exportoutput. Docs
dependencies now come from thedocsdependency group.
Changed
- The default Brick version is now 1.5 (was 1.4).
Graph()and
GraphCollection()load Brick 1.5 unless givenbrick_version=. - The default SHACL engine is now
shifty, falling back totopquadrant
thenpyshacl. Previously the order puttopquadrantfirst. Inference and
validation results may differ. Select explicitly with
validate(engine=...)/compile(engine=...). compile()with shifty writes inferred triples straight into the graph
using pyshifty'sin_placeinference, so the graph is not copied or diffed.
OnGraphCollectionandVersionedGraphCollectionthey go to the default
graph, and SQL-backed graphs take them in one store transaction.validate()no longer modifies the graph. It previously rancompile()
as a side effect, and only for the pyshacl engine.validate()andcompile()raiseValueErrorfor an unknown engine
instead of returningNone.compile(extra_graphs=[...])no longer merges those graphs into the
model. They drive inference; only inferred triples are added.expand()always returnsself. It previously returnedNonefor the
rdfsprofile and for+-joined profiles, which broke chaining.VersionedGraphCollectionchangesets are atomic. The changeset log,
the graph writes and the precommit hooks run in one database transaction, so
a failure rolls all of them back.undo()andredo()are atomic too, and
changesets are written in batches rather than one statement per triple.VersionedGraphCollection's default graph is named
urn:x-rdflib:default, as forDataset. It was a fresh BNode each time
the store was opened, which the SQL store handed back as aURIRef.reasonableandpyshifty(>=0.5.0) are now base dependencies, so the
default OWL-RL backend and SHACL engine work on a plain
pip install brickschema. The[reasonable]and[shifty]extras remain as
empty aliases so existing install commands keep resolving.[persistence]requiresbrickschema-rdflib-sqlalchemy>=0.7.1(was
>=0.6.1), which adds the store transactions above. It no longer pulls in
alembic,makoorsix, and the floor excludes 0.6.2, which wrongly
installed flake8, tox, pytest and setuptools as runtime dependencies.- Dependency cleanup: dropped
requests(never imported), moved
pyontoenvto the dev group (used only by the test suite) and
importlib-resourcesto[brickify]. A plain install is 12 packages, down
from 18. __version__is read from package metadata. It was hardcoded"0.2.0".- Importing
brickschemano longer callslogging.basicConfig()or prints
to stdout, so it no longer reconfigures the root logger of the importing
application. - Minimum Python is 3.11. The README and docs previously claimed 3.6, 3.7 and
3.8 in various places.
Added
- Brick 1.5, with its BOT, REC and VBIS alignments and its 223P
extensions. brickschema.shacl— the SHACL engine dispatch layer, exposing
available_engines(),resolve(),infer(),infer_in_place()and
validate().infer()returns only newly inferred triples and never
mutates its inputs;infer_in_place()adds them to the data graph. Each
accepts one ontology/shape graph or a list of them.- The
brickifyconsole script. It was documented in the README and
docs/brickify/but no entry point was ever declared, so
pip install brickschema[brickify]provided no command. - The
brickschema[all]extra. It was referenced by the README and three
documentation pages but never existed, sopip install brickschema[all]
installed nothing extra. TagInferenceSession.save_tag_lookup(), to regenerate
taglookup.pickledeliberately.- Package metadata: project URLs, trove classifiers and keywords.
homepage
had been declared using a Poetry key that hatchling silently ignores, so the
published package carried no links, classifiers or keywords at all.
Fixed
GraphCollection.remove_graph()recursed infinitely — it called itself.GraphCollection.contexts()raisedValueErrorwith rdflib's in-memory
store: it checked contexts against brickschema'sGraphclass rather than
rdflib.Graph.get_extensions()usedstr.strip(".ttl"), which strips a set of
characters rather than a suffix, and emitted a spurious empty entry.Graph.load_file(source=...)could only ever try one format. rdflib
closes the stream on a failed parse, so the ttl/n3/xml fallback failed with
"I/O operation on closed file".expand("vbis")raisedFileNotFoundErroron any 1.4 graph, and
TagInferenceSessionfailed for 1.4.vbis-masterlist.csvand
taglookup.pickleare not packaged for every Brick version; both now fall
back to the newest packaged copy.TagInferenceSession(rebuild_tag_lookup=True)wrotetaglookup.pickle
into the caller's working directory from its constructor. It now builds
the lookup in memory; seesave_tag_lookup().VBISTagInferenceSession.expand()raisedKeyErrorfor equipment whose
class has no VBIS pattern.orm.pycalledsys.exit(1)at import time, and setpointson generated
classes so every instance of a Brick class shared one list.merge.pyraisedUnboundLocalErrorwhenever every entity linked, and
discarded itsmerge_typesargument.persistent.pylogged around tenprint()calls from the commit path, and
version_before()crashed when there was no earlier version.- The Read the Docs build. It pinned Python 3.10 against
requires-python >=3.11, so it could not install the package. - The docs showed
expand("shacl"), which was removed before 0.7.9; they now
usecompile().