RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information.
This is a major release with relatively slight breaking changes, new features and bug fixes.
The most notable breaking change relates to how RDFLib handles the
publicID
parameter of the Graph.parse
and Dataset.parse
methods.
Most users should not be affected by this change.
Instructions on adapting existing code to the breaking changes can be found in the upgrade guide from Version 6 to Version 7 which should be available here.
It is likely that the next couple of RDFLib releases will all be major versions, mostly because there are some more shortcomings of RDFLib's public interface that should be addressed.
If you use RDFLib, please consider keeping an eye on discussions, issues and pull-requests labelled with "feedback wanted".
A big thanks to everyone who contributed to this release.
publicID
as the name for the default graph. (#2406)When parsing data into a ConjunctiveGraph
or Dataset
, the triples in the
default graphs in the sources were loaded into a graph named publicID
.
This behaviour has been changed, and now the triples from the default graph in
source RDF documents will be loaded into ConjunctiveGraph.default_context
or
Dataset.default_context
.
The publicID
parameter to ConjunctiveGraph.parse
and Dataset.parse
constructors will now only be used as the base URI for relative URI resolution.
Python 3.7 will be end-of-life on the 27th of June 2023 and the next release of RDFLib will be a new major version.
This changes the minimum supported version of Python to 3.8.1 as some of the dependencies we use are not too fond of python 3.8.0. This change also removes all accommodations for older python versions.
curie
method to NamespaceManager
(#2365)Added a curie
method to NamespaceManager
, which can be used to generate a
CURIE from a URI.
Other changes:
NamespaceManager.expand_curie
to work with CURIES that have blank
prefixes (e.g. :something
), which are valid according to CURIE Syntax
1.0.Fixes https://github.com/RDFLib/rdflib/issues/2348.
target_graph
argument to Graph.cbd
and use it for DESCRIBE queries (#2322)Add optional keyword only target_graph
argument to rdflib.graph.Graph.cbd
and use this new argument in evalDescribeQuery
.
This makes it possible to compute a concise bounded description without creating a new graph to hold the result, and also without potentially having to copy it to another final graph.
Commit bd797ac.
When serializing RDF graphs, URIs with unknown prefixes were assigned a
namespace like ns1:
. While the result would be smaller files, it does
result in output that is not as readable.
This change removes this automatic assignment of namespace prefixes.
This is somewhat of an aesthetic choice, eventually we should have more flexibility in this regard so that users can exercise more control over how URIs in unknown namespaces are handled.
With this change, users can still manually create namespace prefixes for URIs in unknown namespaces, but before it there was no way to avoid the undesired behaviour, so this seems like the better default.
Improved the output of the longturtle serializer.
Change SPARQL count aggregate to ignore optional that are unbound instead of raising an exception when they are encountered.
GROUP_CONCAT
handling of empty separator (issue) (#2474)GROUP_CONCAT
was handling an empty separator (i.e. ""
) incorrectly,
it would handle it as if the separator were not set, so essentially it was
treated as a single space (i.e. " "
).
This change fixes it so that an empty separator with GROUP_CONCAT
results in a value with nothing between concatenated values.
Fixes https://github.com/RDFLib/rdflib/issues/2473
NORMALIZE_LITERALS
to rdflib.__all__
(#2489)This gets Sphinx to generate documentation for it, and also clearly indicates that it can be used from outside the module.
rdflib.extras.infixowl
(#2390)Fix the following issues in rdflib.extras.infixowl
:
manchesterSyntax
was wrong for some cases.BooleanClass
was generating its string representation (i.e. BooleanClass.__repr__
) was wrong for some cases.Other changes:
This code is based on code from:
__all__
(#2340)Disable
implicit_reexport
and eliminate all errors reported by mypy after this.
This helps ensure that import statements import from the right module and that
the __all__
variable is correct.
The URL for the service keyword had the http address for the dbpedia endpoint, which no longer works. Changing it to https as that works.
except:
(#2350)Replace bare except:
with except Exception
, there are some cases where it
can be narrowed further, but this is already an improvement over the current
situation.
This is somewhat pursuant to eliminating flakeheaven, as it no longer supports the latest version of flake8 [ref]. But it also is just the right thing to do as bare exceptions can cause problems.
Previously, rdflib.plugins.sparql.algebra.translateAlgebra()
maintained state via a file, with a fixed filename query.txt
. With this change, use of that file is eliminated; state is now maintained in memory so that multiple concurrent translateAlgebra()
calls, for example, should no longer interfere with each other.
The change is accomplished with no change to the client interface. Basically, the actual functionality has been moved into a class, which is instantiated and used as needed (once per call to algrebra.translateAlgebra()
).
This change eliminates some situations where a mutable object (i.e., a dictionary) was used as the default value for functions in the rdflib.plugins.sparql.processor
module and related code. It replaces these situations with typing.Optinal
that defaults to None, and is then handled within the function. Luckily, some of the code that the SPARQL Processor relied on already had this style, meaning not a lot of changes had to be made.
This change also makes a small update to the logic in the SPARQL Processor's query function to simplify the if/else statement. This better mirrors the implementation in the UpdateProcessor
.
These path types were formatted without parentheses even if they contained multiple elements, resulting in string representations that did not accurately represent the path.
This change fixes the formatting so that the string representations are enclosed in parentheses when necessary.
rdf:HTML
literals (#2490)Previously, without html5lib
installed, literals withrdf:HTML
datatypes were treated as
ill-typed,
even if they were not ill-typed.
With this change, if html5lib
is not installed, literals with the
rdf:HTML
datatype will not be treated as ill-typed, and will have
Null
as their ill_typed
attribute value, which means that it is
unknown whether they are ill-typed or not.
This change also fixes the mapping from rdf:HTML
literal values to
lexical forms.
Other changes:
rdflib.NORMALIZE_LITERALS
to ensure it behaves
correctly.Related issues:
Commit e0b3152, closes #2389 /docs.python.org/3.11/whatsnew/changelog.html#id128.
Change the handling of HTTP status code 308 to behave more like
urllib.request.HTTPRedirectHandler
, most critically, the new 308 handling will
create a new urllib.request.Request
object with the new URL, which will
prevent state from being carried over from the original request.
One case where this is important is when the domain name changes, for example,
when the original URL is http://www.w3.org/ns/adms.ttl
and the redirect URL is
https://uri.semic.eu/w3c/ns/adms.ttl
. With the previous behaviour, the redirect
would contain a Host
header with the value www.w3.org
instead of
uri.semic.eu
because the Host
header is placed in
Request.unredirected_hdrs
and takes precedence over the Host
header in
Request.headers
.
Other changes:
Only handle HTTP status code 308 on Python versions before 3.11 as Python 3.11
will handle 308 by default [ref].
Move code which uses http://www.w3.org/ns/adms.ttl
and
http://www.w3.org/ns/adms.rdf
out of test_guess_format_for_parse
into a
separate parameterized test, which instead uses the embedded http server.
This allows the test to fully control the Content-Type
header in the
response instead of relying on the value that the server is sending.
This is needed because the server is sending Content-Type: text/plain
for
the adms.ttl
file, which is not a valid RDF format, and the test is
expecting Content-Type: text/turtle
.
Fixes:
Use strict mode when parsing rdf:HTML
literals. This ensures that when
lexical-to-value
mapping
(i.e. parsing) of a literal with rdf:HTML
data type occurs, a value will
only be assigned if the lexical form is a valid HTML5 fragment.
Otherwise, i.e. for invalid fragments, no value will be associated with
the literal
[ref] and
the literal will be ill-typed.
Commit 8c9608b, closes #2469 /www.w3.org/2013/TriGTests/#trig-graph-bad-01.
The RDF 1.1 TriG grammar only allows the GRAPH
keyword if it
is followed by a graph identifier
[ref].
This change enforces this rule so that the
http://www.w3.org/2013/TriGTests/#trig-graph-bad-01 test passes.
Commit afea615, closes #2468 /www.w3.org/2013/TriGTests/#trig-graph-bad-07.
Raise an error when nested graphs occur in TriG.
With this change, the http://www.w3.org/2013/TriGTests/#trig-graph-bad-07 test passes.
Fix various typing errors that are reported when running with dmypy
,
the mypy daemon.
Also add a task for running dmypy
to the Taskfile that can be selected
as the default mypy variant by setting the MYPY_VARIANT
environment
variable to dmypy
.
Graph.__contains__
type-hints to accept Path
values (#2323)Change the type-hints for Graph.__contains__
to also accept Path
values as the parameter is passed to the Graph.triples
function,
which accepts Path
values.
The CITATION.cff
file provides release metadata which is used by
Zenodo and other software and systems.
This file's content is best-effort, and pull requests with improvements are welcome and will affect future releases.
Add guidelines on how breaking changes should be approached.
The guidelines take a very pragmatic approach with known downsides, but this seems like the best compromise given the current situation.
For prior discussion on this point see:
Comment refers to a person that knows bob and the code would return a name,
but this would only work if the triple person foaf:name bob .
is part of the dataset
As this is a very uncommon way to model a foaf:knows
the code was
adjusted to match the description.
Suggest that contributors first make an issue to get in principle agreement for pull requests before making the pull request.
Enhancements can be controversial, and we may reject the enhancement sometimes, even if the code is good, as it may just not be deemed important enough to increase the maintenance burden of RDFLib.
Other changes:
The use of Unicode literals is an artefact of Python 2 and is incorrect in Python 3.
Doctests for docstrings using Unicode literals only pass because ALLOW_UNICODE is set, but this option should be disabled as RDFLib does not support Python 2 any more.
This partially resolves https://github.com/RDFLib/rdflib/issues/2378.
This is a patch release that fixes some bugs, including regressions introduced in release 6.2.0 and 6.3.0.
ROUND
, ENCODE_FOR_URI
and SECONDS
SPARQL functions (#2314)ROUND
was not correctly rounding negative numbers towards positive infinity,
ENCODE_FOR_URI
incorrectly treated /
as safe, and SECONDS
did not include
fractional seconds.
This change corrects these issues.
__hash__
and __eq__
back to rdflib.paths.Path
(#2292)These methods were removed when @total_ordering
was added, but
@total_ordering
does not add them, so removing them essentially
removes functionality.
This change adds the methods back and adds tests to ensure they work correctly.
All path related tests are also moved into one file.
to_dict
method to the JSON-LD Context
class. (#2310)Context.to_dict
is used in JSON-LD serialization, but it was not implemented.
This change adds the method.
wgs
namespace binding back (#2294)https://github.com/RDFLib/rdflib/pull/1686 inadvertently removed the wgs
prefix.
This change adds it back.
https://schema.org/
back to schema
(#2312)The default prefix for https://schema.org/
registered with
rdflib.namespace.NamespaceManager
was inadvertently changed to sdo
in 6.2.0,
this however constitutes a breaking change, as code that was using the schema
prefix would no longer have the same behaviour. This change changes the prefix
back to schema
.
The sdists generated by setuptools included the docs
and examples
directories, and they are needed for building docs and running tests using the
sdist.
This change includes these directories in the sdist tarball.
A test:sdist
task is also added to Taskfile.yml
which uses the sdists to run
pytest and build docs.
The URI to IRI conversion was percentage-quoting characters that should not have been quoted, like equals in the query string. It was also not quoting things that should have been quoted, like the username and password components of a URI.
This change improves the conversion by only quoting characters that are not allowed in specific parts of the URI and quoting previously unquoted components. The safe characters for each segment are taken from RFC3986.
The new behavior is heavily inspired by
werkzeug.urls.iri_to_uri
though there are some differences.
dict
(#2306)A variable was only being initialized for string-valued inputs, but if a dict
input was passed the variable would still be accessed, resulting in a
UnboundLocalError
.
This change initializes the variable always, instead of only when string-valued input is used to construct a JSON-LD context.
get_target_namespace_elements
(#2311)get_target_namespace_elements
references the args
global, which is not
defined if the function is called from outside the module. This commit fixes
that instead referencing the argument passed to the function.
The namespaces bound by default by rdflib.graph.Graph
and
rdflib.namespace.NamespaceManager
was reduced in version 6.2.0 of RDFLib,
however, this also would cause code that worked with 6.1.1 to break, so this
constituted a breaking change. This change restores the previous behaviour,
binding the same namespaces as was bound in 6.1.1.
To bind a reduced set of namespaces, the bind_namespaces
parameter of
rdflib.graph.Graph
or rdflib.namespace.NamespaceManager
can be used.
webtest
marker to tests that use the internet (#2295)This is being done so that it is easier for downstream packagers to run the test suite without requiring internet access.
To run only tests that does not use the internet, run pytest -m "not webtest"
.
The validation workflow validates that test run without internet access by
running the tests inside firejail --net=none
.
This ensures contributors are credited. Also added .mailmap to fix early misattributed contributions.
Changed cdterms
to dcterms
, see https://github.com/RDFLib/rdflib/issues/2196 for more info.
This is a patch release that includes a singular user facing fix, which is the
inclusion of the test
directory in the sdist
release artifact.
The following sections describe the changes included in this version.
packages
in pyproject.toml
(#2280)The default behaviour makes it more of a hassle to republish RDFLib to a separate package, something which I plan to do for testing purposes and possibly other reasons.
More changes may follow in a similar vein.
A perhaps minor regression from earlier versions is that the sdist does not include the test folder, which makes it harder for downstreams to use a single source of truth to build and test a reliable package. This restores the test folder for sdists.
The Kroki server is currently experiencing some issues which breaks our build, this change eliminates the use of Kroki in favour of directly using the generated SVG images which is checked into git alongside the PlantUML sources.
I also added a task to the Taskfile to re-generate the SVG images from the PlantUML sources by calling docker.
This is a minor release that includes bug fixes and features.
This section lists changes that have a potential impact on users of RDFLib, changes with no user impact are not included in this section.
Add chunk serializer that facilitates the encoding of a graph into multiple N-Triples encoded chunks. PR #1968.
Fixes passing NamespaceManager
in ConjunctiveGraph
's method get_context()
.
The get_context()
method will now pass the NamespaceManager
of ConjunctiveGraph
to the namespace_manager
attribute of the newly created context graph, instead of the ConjunctiveGraph
object itself. This cleans up an old FIXME
comment.
PR #2073.
InfixOWL fixes and cleanup. Closed issue #2030. PR #2024, and PR #2033.
rdflib.extras.infixowl.Restriction.__init__
will now raise a ValueError
if there is no restriction value instead of an AssertionError
.rdflib.extras.infixowl.Restriction.restrictionKind
which was essentially
not working at all.rdflib.extras.infixowl.Property.__repr__
uses
rdflib.namespace.OWL
.rdflib.extras.infixowl.Infix.__ror__
and
rdflib.extras.infixowl.Infix.__or__
as they were broken.rdflib.extras.infixowl.termDeletionDecorator
.rdflib.extras.infixowl.MalformedClassError
which will replace
rdflib.extras.infixowl.MalformedClass
(which is an exception) in the next
major version.Fixed some cross-referencing issues in RDFLib documentation. Closed issue #1878. PR #2036.
Fixed import of xml.sax.handler
in rdflib.plugins.parsers.trix
so that it
no longer tries to import it from xml.sax.saxutils
.
PR #2041.
Removed a pre python 3.5 regex related workaround in the REPLACE SPARQL function. PR #2042.
Fixed some issues with SPARQL XML result parsing that caused problems with
lxml
. Closed issue #2035,
issue #1847.
PR #2044.
TextIO
streams now work correctly with lxml
installed and with XML documents that
are not utf-8
encoded.<results>
that are not <result>
are now ignored.<result>
that are not <binding>
are now ignored.rdflib.plugins.sparql.results.xmlresults
.Added type hints to the following modules:
rdflib.store
.
PR #2057.rdflib.graph
.
PR #2080.rdflib.plugins.sparql.*
.
PR #2094,
PR #2133,
PR #2265,
PR #2097,
PR #2268.rdflib.query
.
PR #2265.rdflib.parser
and rdflib.plugins.parsers.*
.
PR #2232.rdflib.exceptions
.
PR #2232
rdflib.shared.jsonld.*
.
PR #2232.rdflib.collection
.
PR #2263.rdflib.util
.
PR #2262.rdflib.path
.
PR #2261.Removed pre python 3.7 compatibility code. PR #2066.
shutil
module does not have the move
function.Improve file-URI and path handling in Graph.serialize
and Result.serialize
to
address problems with windows path handling in Result.serialize
and to make
the behavior between Graph.serialize
and Result.serialie
more consistent.
Closed issue #2067.
PR #2065.
destination
argument will now only be treated as
file URIs if urllib.parse.urlparse
returns their schema as file
.Narrow the type of context-identifiers/graph-names from rdflib.term.Node
to
rdflib.term.IdentifiedNode
as no supported abstract syntax allows for other
types of context-identifiers.
PR #2069.
Always parse HexTuple files as utf-8. PR #2070.
Fixed handling of Literal
datatype
to correctly differentiate between
blank string values and undefined values, also changed the datatype of
rdflib.term.Literal.datatype
from Optional[str]
to Optional[URIRef]
now
that all non-URIRef
str
values will be converted to URIRef
.
PR #2076.
Fixed the generation of VALUES block for federated queries. The values block was including non-variable values like BNodes which resulted in invalid queries. Closed issue #2079. PR #2084.
Only register the rdflib.plugins.stores.berkeleydb.BerkeleyDB
as a store
plugin if the berkeleydb
module is present.
Closed issue #1816.
PR #2096.
Fixed serialization of BNodes in TriG.
The TriG serializer was only considering BNode references inside a single
graph and not counting the BNodes subjects as references when considering if a
BNode should be serialized as unlabeled blank nodes (i.e. [ ]
), and as a
result it was serializing BNodes as unlabeled if they were in fact referencing
BNodes in other graphs.
PR #2085.
Deprecated rdflib.path.evalPath
in favor of rdflib.path.eval_path
which is
PEP-8 compliant. PR #2046
Added charset=UTF-8
to the Content-Type
header sent when doing an update
with SPARQLConnector
. Closed issue
#2095. PR
#2112.
Removed the rdflib.plugins.sparql.parserutils.plist
class as it served no
discernible purpose. PR #2143
Changed the TriG serializer to not generate prefixes for empty graph IDs. Closed issue #2154. PR #2160.
Fixed handling of relative context files in the JSON-LD parser. Closed issue #2164. PR #2165.
Improved failure handling in when computing QName for an unbound namespace. PR #2169.
Fixed a typo in the default bound namespace for DCTERMS
.
PR #2173.
Add support for supplying a custom namespace manager to n3()
methods.
PR #2174.
Fixed the query string parameters for SPARQLConnector
when using POST method.
PR #2180.
Fixed extra keyword argument and header handling in SPARQLConnector
that
resulted in headers from SPARQLConnector.update
polluting headers from
SPARQLConnector.query
vice versa.
PR #2183
Added version restrictions for dependencies. PR #2187
Switch to using importlib
for getting the version of RDFLib instead of
hard-coding it in __version__
.
PR #2187.
Removed non-runtime extras, for building documentation, running tests and other development operations the versions and dependencies are now managed with Poetry. PR #2187.
Fixed a bug that occurred when VALUES
was used outside a GROUP BY
clause.
PR #2188.
Fixed a bug that occurred when using SELECT *
inside another SELECT *
.
Closed issue #1722.
PR #2190.
Added SPARQL DESCRIBE query implementation. Closes issue #479. PR #2221.
Fixed a bug in rdflib.tools.defined_namespace_creator
that occurred when
multiple rdfs:comment
were present on one resource.
PR #2254.
Fixed rdflib.util._iri2uri()
to not quote the netloc
parameter.
PR #2255.
Fixed the HexTuple parser's handling of input sources to works for more input sources. PR #2255.
Fixed the creation of input source objects from IO stream sources. PR #2255.
Eliminated the use of the deprecated rdflib.path.evalPath
function.
PR #2266
Added documentation for security considerations and available mitigations. Closed issue #1844. PR #2267.
rdflib.plugins.sparql
PR #2268
rdflib.path.evalPath
PR #2266
rdflib.collection
PR #2263
rdflib.util
PR #2262
rdflib.path
PR #2261
SELECT *
inside SELECT *
bug
PR #2190
service_query
to _buildQueryStringForServiceCall
instead of a Match
PR #2134
main
PR #2101
rdflib.query
and related
PR #2097
rdflib.plugins.sparql.{algebra,operators}
PR #2094
exclude_lines
for coverage
PR #2093
unittest
based tests to pytest
PR #2075
Node
to IdentifiedNode
PR #2069
{Graph,Result}.serialize
PR #2065
test/test_sparql/test_sparql_parser.py
to pytest
PR #2063
test/test_sparql/test_construct_bindings.py
to pytest
PR #2062
test/test_parsers/test_nquads.py
to pytest
PR #2061
test/test_namespace/test_namespace.py
to pytest
PR #2060
rdflib.store
and rdflib.plugins.stores
PR #2057
This is a minor release that includes bug fixes and features.
This section lists changes that have a potential impact on users of RDFLib, changes with no user impact are not included in this section.
HAVING
clause with variable composition. Closed
issue #936 and issue
#935, PR
#1093.Graph.load
, Graph.seq
, Graph.comment
,
Graph.label
. PR #1527.functools.total_ordering
to implement most comparison operations for
rdflib.paths.Path
. Closed issue
#685, PR
#1528.rdflib.graph.ReadOnlyGraphAggregate.quads
.
Closed issue #430, PR
#1590
rdflib.plugins.stores.sparqlstore.SPARQLStore.update
is called. Closed
issue #1032, PR
#1623.rdflib.plugins.sparql.processor.prepareUpdate
. Closed issue
#272 and discussion
#1581, PR
#1624.rdflib.namespace.DefinedNamespaceMeta.__dir__
. Closed issue
#1593, PR
#1626.TypeCheckError
, SubjectTypeError
, PredicateTypeError
,
ObjectTypeError
and ContextTypeError
as these exceptions are not raised by
RDFLib and their existence will only confuse users which may expect them to be
used. Also remove corresponding check_context
, check_subject
,
check_predicate
, check_object
, check_statement
, check_pattern
that is
unused. PR #1640.Accept
HTTP header so that it is correctly
populated for all formats. PR
#1643.nquads
to recognized file extensions.
PR #1653.rdflib.plugins.sparql.operators.unregister_custom_function
idempotent.
Closed issue #1492,
PR #1659."\\r"
. The time it
takes for these parsers to parse strings with escape sequences will be
increased, and the increase will be correlated with the amount of escape
sequences that occur in a string. For strings with many escape sequences the
parsing speed seems to be almost 4 times slower. Closed issue
#1655, PR
#1663.
rdflib.compat.decodeStringEscape
as deprecated as this
function is not used anywhere in RDFLib anymore and the utility that it does
provide is not implemented correctly. It will be removed in RDFLib 7.0.0IdentifiedNode
as a superclass of BNode
and
URIRef
. Closed issue #1526,
PR #1680.rdf:type
in subject, object. Closed issue
#1649, PR
#1649.ConjunctiveGraph.get_graph
.override
argument to Store.bind
which behaves similarly to
the override
parameter for NamespaceManager.bind
.override
parameter to
NamespaceManager.bind
by passing.DeprecationWarning
related to plugin loading issue
#1631, PR
#1694.rdflib.graph.ContextNode
and rdflib.graph.DatasetQuad
type
aliases. These were not being widely used in RDFLib and were also not correct.
PR #1695.DefinedNamespace.as_jsonld_context
. PR
#1706.rdflib.namespace.WGS
for WGS84. Closed issue
#1709, PR
#1710.DefinedNamespace
by caching attribute values. PR
#1718.sys.stderr
has a isatty
attribute. Closed
issue #1760, PR
#1761.rdflib.compat.etree_register_namespace
. PR
#1768.rdflib.util.from_n3
. Closed issue
#1769, PR
#1771.NamespaceManager.compute_qname
by caching validity. PR
#1779.EXISTS
inside BIND
for SPARQL. This was
raising an exception during evaluation before but is now correctly handled.
Closed issue #1472, PR
#1794.rdflib.term.RDFLibGenid
as a type as this caused issues
with querying. Closed issue
#1808, PR
#1821
DefinedNamespace
control attributes so that
inspect.signature
works correctly on defined namespaces. PR
#1825.Memory
, SimpleMemory
and BerkelyDB
stores.
Closed issue #1826, PR
#1843.NamespaceManager.expand_curie
. Closed issue
#1868, PR
#1869.Literal.__sub__
and support for datetimes to both Literal.__add__
and Literal.__sub__
. PR #1870.None
/undefined handing in GROUP_CONCAT
. Closed issue
#1467, PR
#1887.SERVICE
directive. Closed issue
#1278, PR
#1894.http://rdlib.net/
to
https://rdflib.github.io
and also change other uses of http://rdlib.net/
to https://rdflib.github.io
. Closed issue
#1824, PR
#1901.generate
to NamespaceManager.compute_qname
from
NamespaceManager.compute_qname_strict
so it raises an error in the same
case as the "non-strict" version. PR
#1934.trix
and TriX
as root element. PR
#1966.URIRef.fragment
property.
PR #1991.rdflib.namespace
rdflib.term
rdflib.parser
Better testing and tidier code.
This is a semi-major release that:
This release contains many, many hours of updates from Iwan Aucamp, so thank you Iwan!
Minor release to support some downstream packages' namespace needs
Minor bugfixing release
6.0.0 is a major stable release that drops support for Python 2 and Python 3 < 3.7. Type hinting is now present in much of the toolkit as a result.
It includes the formerly independent JSON-LD parser/serializer, improvements to Namespaces that allow for IDE namespace
prompting, simplified use of g.serialize()
(turtle default, no need to decode()
) and many other updates to
documentation, store backends and so on.
Performance of the in-memory store has also improved since Python 3.6 dictionary improvements.
There are numerous supplementary improvements to the toolkit too, such as:
5.0.0 is a major stable release and is the last release to support Python 2 & 3.4. 5.0.0 is mostly backwards- compatible with 4.2.2 and is intended for long-term, bug fix only support.
5.0.0 comes two weeks after the 5.0.0RC1 and includes a small number of additional bug fixes. Note that rdflib-jsonld has released a version 0.5.0 to be compatible with rdflib 5.0.0.
There is a large list of changes since the 4.2.2 release, see the CHANGELOG for details.
See https://rdflib.dev for the proposed future release schedule.