**REMARK:** This release is **incompatible** with `rdflib==6.0.0`, which was released just a few days afterwards (see issue 677). Right now, the simplest solution is `pip install rdflib==5.0.0`.
- Added benchmarks, integrated with the CI, which publishes the results automatically [here](https://simphony.github.io/osp-core/dev/bench/index.html).
- Support for [OWL `hasValue`](https://www.w3.org/TR/owl-ref/#hasValue-def) property restrictions. The values are not enforced, but are set as defaults for new CUDS's attributes.
- Fixed bug when removing CUDS objects directly connected to the wrapper object (they were not removed).
- Added a new type conversion feature to the SPARQL queries. By default, `SparqlResult` (result) objects return `SparqlBindingSet` (row) objects when iterated, that in turn return rdflib's URIRefs or Literals when queried (e.g. `row['queriedvariable']`). Now `SparqlResult` objects are callable, like `result(irivariable='cuds', literalvariable=float)`, where each keyword argument can be either `'cuds'` or a callable. This makes the `SparqlResult` object return `SparqlBindingSet` objects that return CUDS objects or python objects when queried, making post-query operations simpler, such as getting a dataframe from the query results.
- Files fetched by the transport session are no longer prepended with the CUDS object's uid. The uid will be added within parentheses after the name, **only if** there is a name conflict.
- Fixed bug that showed wrong values for the `path` attribute of file CUDS.
- Other changes and bug fixes (see the [full changelog](https://github.com/simphony/osp-core/compare/v3.5.3.1-beta...v3.5.4-beta)).