Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
76a870c
7.1.3 prep (#3036)
edmondchuc Jan 16, 2025
4b0f580
7.1.3-pre-release
nicholascar Jan 18, 2025
006949a
small docco update (#3053)
nicholascar Jan 18, 2025
f4f3b73
7.1.3-post-release; some updated release info for devs (#3054)
nicholascar Jan 18, 2025
7d3666e
build(deps): bump orjson from 3.10.13 to 3.10.15 (#3055)
dependabot[bot] Jan 23, 2025
62c528d
build(deps-dev): bump ruff from 0.8.6 to 0.9.2 (#3047)
dependabot[bot] Jan 23, 2025
47165fc
build(deps): bump html5rdf from 1.2.0 to 1.2.1 in /docker/latest (#3045)
dependabot[bot] Feb 19, 2025
74afcb0
build(deps): bump html5rdf from 1.2 to 1.2.1 (#3048)
dependabot[bot] Feb 19, 2025
cfd4222
build(deps-dev): bump wheel from 0.44.0 to 0.45.1 (#3051)
dependabot[bot] Feb 19, 2025
89103ec
build(deps-dev): bump ruff 0.9.2 - 0.9.6 + readthedocs conf (#3072)
dependabot[bot] Mar 22, 2025
282ed56
build(deps): bump lxml from 5.3.0 to 5.3.1 (#3071)
dependabot[bot] Mar 22, 2025
62685d8
Cope with Namespace annotations in Python 3.14 (#3084)
nphilipp Mar 22, 2025
9af9a40
build(deps): bump dorny/test-reporter from 1 to 2 (#3081)
dependabot[bot] Mar 22, 2025
c1fc39e
build(deps-dev): bump pytest from 8.3.4 to 8.3.5 (#3079)
dependabot[bot] Mar 22, 2025
e4d28f1
build(deps): bump library/python in /docker/unstable (#3067)
dependabot[bot] Mar 22, 2025
69b7d6c
build(deps): bump library/python in /docker/latest (#3066)
dependabot[bot] Mar 22, 2025
b74c657
remove old hacks against 2to3 (#3076)
a-detiste Mar 22, 2025
c560028
Downgrade log message about plugin without override argument to debu…
yarikoptic Mar 22, 2025
7d1f4c7
[pre-commit.ci] pre-commit autoupdate (#3056)
pre-commit-ci[bot] Mar 22, 2025
8bbb30d
Reduce warnings (#3085)
nicholascar Mar 23, 2025
4cf2180
Reduce warnings (#3087)
nicholascar Mar 24, 2025
0c277e9
Allow multi subjects & objects in graph funcs (#3086)
nicholascar Mar 24, 2025
d220ee3
build(deps): bump library/python in /docker/unstable (#3089)
dependabot[bot] Mar 24, 2025
721164c
7.1.4 pre-release (#3098)
nicholascar Mar 29, 2025
c580c00
Merge 7-maintenance branch into 7.x (#3222)
edmondchuc Sep 18, 2025
747b8d3
[7.x] notation3.py: don't normalize float representation (#3221)
edmondchuc Sep 18, 2025
f276bd6
Fix incorrect deskolemization of literals (#3127) (#3223)
edmondchuc Sep 18, 2025
19a0ccf
chore: prep 7.2.0 release (#3224)
edmondchuc Sep 18, 2025
856c1af
chore: prep 7.2.1 release (#3225)
edmondchuc Sep 19, 2025
28261ff
chore: 7.2.1 post release (#3226)
edmondchuc Sep 19, 2025
f358e89
Run the example queries agains the local fuseki (#3240)
white-gecko Sep 26, 2025
062b7a9
Adjust the type hint for Graph open to reflect a SPARQLUpdateStore co…
white-gecko Sep 29, 2025
1964642
SPARQL result parsing (#2796)
white-gecko Sep 30, 2025
49afac8
fix: skip prefix generation for predicates corresponding to base name…
edmondchuc Sep 30, 2025
76642cc
fix(v7): remove Literal.toPython date conversion for gYear/gYearMonth…
edmondchuc Oct 15, 2025
070e7af
feat: allow adding graphs backed by different stores to the same data…
edmondchuc Oct 16, 2025
5ee0466
feat: set dataset's default serialize format to trig (#3260)
edmondchuc Oct 16, 2025
32b6b88
sparqls optionals clause can now bind variables. with test. issue 295…
WhiteGobo Oct 16, 2025
1a20cd9
fix: dataset nquads serialization including RDFLib internal default g…
edmondchuc Oct 17, 2025
0f3237d
fix: Dataset.parse now returns Self (#3263)
edmondchuc Oct 17, 2025
d5774ef
chore: add deprecation notice to Dataset methods and attributes (#3264)
edmondchuc Oct 17, 2025
2796fee
patch for reevaluation in sparql modify between update loops. with te…
WhiteGobo Oct 17, 2025
01de9bb
fix: SPARQL Update inserts into the default graph (#3265)
edmondchuc Oct 24, 2025
2a902e5
fix: allow static type checkers to infer term's __new__ type (#3266)
edmondchuc Oct 24, 2025
72287e4
fix: RecursiveSerializer- outputs undeclared prefix for predicates th…
edmondchuc Oct 24, 2025
634638f
feat: add Dataset __iadd__ support (#3268)
edmondchuc Oct 24, 2025
3b67ea7
build: prep 7.3.0 (#3277)
edmondchuc Oct 24, 2025
ec04ee9
chore: 7.3.0 post release (#3278)
edmondchuc Oct 24, 2025
0ab817f
added TypeError to test_roundtrip[test_other__service1], because diff…
WhiteGobo Oct 24, 2025
9b14b8f
feat: v7 mkdocs (#3287)
edmondchuc Oct 29, 2025
8685a85
fix: set changed size when iterating the store's graphs (#3281)
edmondchuc Oct 30, 2025
6a04c63
chore(v7): upgrade ci and dev/test deps (#3288)
edmondchuc Oct 30, 2025
c2c94e5
chore: prep 7.4.0 release (#3289)
edmondchuc Oct 30, 2025
3c9d9da
chore: post steps for 7.4.0 release (#3291)
edmondchuc Oct 30, 2025
92ad509
test: fix dbpedia webtests (#3304)
edmondchuc Nov 6, 2025
2ec4f6b
Merge branch 'main' into chore/7-to-main
edmondchuc Nov 12, 2025
02862f1
fix: These markdown docs were added back in when moving to MkDocs in …
edmondchuc Nov 12, 2025
e9898a5
build: fix poetry.lock having two conflicting click entries
edmondchuc Nov 12, 2025
8d78680
build: revert back to main's poetry.lock file as the newly generated …
edmondchuc Nov 12, 2025
310d1a9
chore: remove unecessary type checking imports
edmondchuc Nov 12, 2025
5a946fb
chore: delete merged_prs.json
edmondchuc Nov 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/validate.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12"]
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
os: [ubuntu-latest, macos-latest, windows-latest]
# This is used for injecting additional tests for a specific python
# version and OS.
Expand Down
89 changes: 70 additions & 19 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,68 @@
## 2025-10-30 RELEASE 7.4.0

This release addresses a couple of bugs and improves the testing matrix by adding python 3.12, 3.13 and 3.14 to the test matrix.

This is also the first RDFLib release to use MkDocs for documentation.

Pull requests merged:

- chore(v7): upgrade ci and dev/test deps by @edmondchuc in [#3288](https://github.com/RDFLib/rdflib/pull/3288)
- feat: v7 mkdocs by @edmondchuc in [#3287](https://github.com/RDFLib/rdflib/pull/3287)
- fix: set changed size when iterating the store's graphs by @edmondchuc in [#3281](https://github.com/RDFLib/rdflib/pull/3281)
- lazy fix of issue pytest failure on python 3.13.8 - Removing of xfail raise restriction by @WhiteGobo in [#3275](https://github.com/RDFLib/rdflib/pull/3275)

## 2025-10-24 RELEASE 7.3.0

This release delivers several important fixes and enhancements to RDFLib’s Dataset implementation, resolving long-standing issues and improving consistency across serialization and SPARQL operations. It also introduces new deprecation notices for certain Dataset methods and attributes, which will be removed in the next major release. In addition, this version includes a range of improvements to SPARQL result parsing, typing, and literal handling.

### Features

- Added `Dataset.__iadd__` support
- Dataset's default serialize format is now `trig`
- Datasets can now add graphs backed by different stores

### Fixes and Improvements

- Fixed an issue where the `RecursiveSerializer` would output undeclared prefixes for predicates that contained the base as a substring
- Prevented prefix generation for predicates corresponding to the base namespace
- SPARQL Update now correctly inserts into the default graph
- Dataset.parse now returns Self
- N-Quads serialization no longer includes the RDFLib internal default graph identifier
- Static type checkers can now infer the type of `Term.__new__`
- Removed automatic date conversion for gYear and gYearMonth literals
- Optional clauses in SPARQL queries can now bind variables
- Fixed reevaluation logic in SPARQL Update between update loops

### Maintenance

- Added deprecation notices to certain Dataset methods and attributes
- Use Dataset.graphs instead of Dataset.contexts method
- Use Dataset.default_graph instead of Dataset.default_context
- Deprecate Dataset.identifier entirely.
- Updated type hints for Graph.open() with SPARQLUpdateStore configuration
- SPARQL Result Parsing Improvements
- Simplified and modernized the SPARQL result parsing system:
- These changes maintain backward compatibility while making the SPARQL API more flexible and extensible.

Pull requests merged:

- feat: add Dataset `__iadd__` support by @edmondchuc in [#3268](https://github.com/RDFLib/rdflib/pull/3268)
- fix: RecursiveSerializer- outputs undeclared prefix for predicates that contains the base as a substring by @edmondchuc in [#3267](https://github.com/RDFLib/rdflib/pull/3267)
- fix: allow static type checkers to infer term's `__new__` type by @edmondchuc in [#3266](https://github.com/RDFLib/rdflib/pull/3266)
- fix: SPARQL Update inserts into the default graph by @edmondchuc in [#3265](https://github.com/RDFLib/rdflib/pull/3265)
- chore: add deprecation notice to Dataset methods and attributes by @edmondchuc in [#3264](https://github.com/RDFLib/rdflib/pull/3264)
- fix: Dataset.parse now returns Self by @edmondchuc in [#3263](https://github.com/RDFLib/rdflib/pull/3263)
- fix: dataset nquads serialization including RDFLib internal default graph identifier by @edmondchuc in [#3262](https://github.com/RDFLib/rdflib/pull/3262)
- patch for reevaluation in sparql modify between update loops. with test by @WhiteGobo in [#3261](https://github.com/RDFLib/rdflib/pull/3261)
- feat: change dataset's default serialize format to trig by @edmondchuc in [#3260](https://github.com/RDFLib/rdflib/pull/3260)
- feat: allow adding graphs backed by different stores to the same dataset by @edmondchuc in [#3259](https://github.com/RDFLib/rdflib/pull/3259)
- fix(v7): remove Literal.toPython date conversion for gYear/gYearMonth (#3115) by @edmondchuc in [#3258](https://github.com/RDFLib/rdflib/pull/3258)
- sparqls optionals clause can now bind variables. with test. issue 2957 by @WhiteGobo in [#3247](https://github.com/RDFLib/rdflib/pull/3247)
- fix: skip prefix generation for predicates corresponding to base namespace by @edmondchuc in [#3244](https://github.com/RDFLib/rdflib/pull/3244)
- Run the example queries agains the local fuseki by @white-gecko in [#3240](https://github.com/RDFLib/rdflib/pull/3240)
- Adjust the type hint for Graph open to reflect a SPARQLUpdateStore configuration by @white-gecko in [#3239](https://github.com/RDFLib/rdflib/pull/3239)
- SPARQL result parsing by @white-gecko in [#2796](https://github.com/RDFLib/rdflib/pull/2796)

## 2025-09-19 RELEASE 7.2.1

A tiny clean up release.
Expand Down Expand Up @@ -169,26 +234,12 @@ For the full list of included PRs, see the preparatory PR:

## 2025-01-10 RELEASE 7.1.2

A minor release that bumped up a few dev dependencies and achieved a few small but notable improvements, particularly with longturtle sorting:

Feature PRs:

* [PR #2963](https://github.com/RDFLib/rdflib/pull/2963) Big typing updates
* [PR #2964](https://github.com/RDFLib/rdflib/pull/2964) Defined Namesapce warnings fix
* [PR #2971](https://github.com/RDFLib/rdflib/pull/2971) convert uses of Optional and some Union usage to union operator |
* [PR #2989](https://github.com/RDFLib/rdflib/pull/2989) Fixed incorrect ASK behaviour for dataset with one element
* [PR #2997](https://github.com/RDFLib/rdflib/pull/2997) sort longturtle blank nodes
* [PR #3008](https://github.com/RDFLib/rdflib/pull/3008) deterministic longturtle serialisation using RDF canonicalization + n-triples sort
* [PR #3012](https://github.com/RDFLib/rdflib/pull/3012) Dataset documentation improvements

Dependency bumps:
A minor release that inadvertently removed support for Python 3.8. This release
how now been deleted.

* ruff from 0.71 -> 0.8.6
* orjson 3.10.10 ->
* pytest-cov to 6.0.0
* coverage to 7.6.10
* pytest to 8.3.4
* poetry to 2.0.0
All the improved features initially made available in this release that were
compatible with Python 3.8 have been preserved in the 7.1.3 release. The main
additions to 7.1.2 not preserved in 7.1.3 are updated type hints.

## 2024-10-17 RELEASE 7.1.1

Expand Down
4 changes: 2 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ authors:
- family-names: "Stuart"
given-names: "Veyndan"
title: "RDFLib"
version: 7.2.1
date-released: 2025-09-19
version: 7.4.0
date-released: 2025-10-30
url: "https://github.com/RDFLib/rdflib"
doi: 10.5281/zenodo.6845245
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ Help with maintenance of all of the RDFLib family of packages is always welcome
## Versions & Releases

* `main` branch in this repository is the current unstable release - version 8 alpha
* `7.4.0` a few small fixes, add test matrix for active python versions, and move v7 documentation to MkDocs
* `7.3.0` many fixes and usability improvements, particularly for the Dataset class. See changelog for details
* `7.2.1` tiny clean up release, relaxes Python version requirement
* `7.2.0` general fixes and usability improvements, see changelog for details
* `7.1.4` tidy-up release, possibly last 7.x release
Expand Down
2 changes: 1 addition & 1 deletion Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ tasks:

pip-compile:
cmds:
- cmd: "{{.PIP_COMPILE}} --quiet --annotate --emit-options --no-strip-extras --resolver=backtracking {{.CLI_ARGS}}"
- cmd: "{{.PIP_COMPILE}} --quiet --annotate --emit-options --resolver=backtracking --no-strip-extras {{.CLI_ARGS}}"

docker:prepare:
cmds:
Expand Down
8 changes: 8 additions & 0 deletions admin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,11 @@
Tools to assist with RDFlib releases, like extracting all merged PRs from GitHub since last release and printing them into MArkdown lists.

To make a release of RDFLib, see the [Developer's Guide](https://rdflib.readthedocs.io/en/latest/developers.html).

## PR Changelog Summary

An alternative to the `get_merged_prs.py` script is to use the GitHub CL to get the list of PRs and pipe it into the `pr_markdown.py` script. The following command retrieves the list of PRs merged since the last release (`2025-09-19`) from a particular branch (`7.x`).

```bash
gh api '/search/issues?q=repo:rdflib/rdflib+is:pr+is:merged+base:7.x+merged:>2025-10-24&per_page=100' | jq '{total_count, incomplete_results, items: [.items[] | {number, title, pull_request_merged_at: .pull_request.merged_at, pull_request_url: .pull_request.html_url, username: .user.login}]}' | poetry run python admin/pr_markdown.py
```
28 changes: 28 additions & 0 deletions admin/pr_markdown.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import json
import sys
from dataclasses import dataclass


@dataclass
class PR:
number: int
title: str
pull_request_merged_at: str
pull_request_url: str
username: str

def __repr__(self):
return f"{self.title} by @{self.username} in [#{self.number}]({self.pull_request_url})"


try:
json_data = json.load(sys.stdin)
prs = [PR(**pr) for pr in json_data["items"]]
for pr in prs:
print(f"- {pr}")
except json.JSONDecodeError as e:
print(f"Error parsing JSON: {e}")
sys.exit(1)
except Exception as e:
print(f"Error: {e}")
sys.exit(1)
4 changes: 2 additions & 2 deletions docs/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ Some ways in which you can contribute to RDFLib are:

## Technical contributions

If you would like to make technical contributions to RDFLIb, the _main_ way to do
this is via creating Pull Requests to fix bugs or add features.
Contributions that involve changes to the RDFLib repository have to be made with
pull requests and should follow the [RDFLib developers guide](./developers.md).

Please read the [RDFLib developers guide](./developers.md) for this.

Expand Down
14 changes: 7 additions & 7 deletions docs/developers.md
Original file line number Diff line number Diff line change
Expand Up @@ -430,13 +430,13 @@ RDFLib 5.0.0 maintained compatibility with Python versions 2.7, 3.4, 3.5, 3.6, 3

Create a release-preparation pull request with the following changes:

* Updated version and date in `CITATION.cff`.
* Updated copyright year in the `LICENSE` file.
* Updated copyright year in the `docs/conf.py` file.
* Updated main branch version and current version in the `README.md` file.
* Updated version in the `pyproject.toml` file.
* Updated `__date__` in the `rdflib/__init__.py` file.
* Accurate `CHANGELOG.md` entry for the release.
* Updated version and date in [`CITATION.cff`](../CITATION.cff).
* Updated copyright year in the [`LICENSE`](../LICENSE) file.
* Updated copyright year in the [`mkdocs.yml`](../mkdocs.yml) file.
* Updated main branch version and current version in the [`README.md`](../README.md) file.
* Updated version in the [`pyproject.toml`](../pyproject.toml) file.
* Updated `__date__` in the [`rdflib/__init__.py`](../rdflib/__init__.py) file.
* Updated [`CHANGELOG.md`](../CHANGELOG.md) entry for the release with admin tools as described in [`admin/README.md`](../admin/README.md).

Once the PR is merged, switch to the main branch, build the release and upload it to PyPI:

Expand Down
3 changes: 3 additions & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ If you are familiar with RDF and are looking for details on how RDFLib handles i
* [Upgrade 6 to 7](upgrade6to7.md)
* [Upgrade 5 to 6](upgrade5to6.md)
* [Upgrade 4 to 5](upgrade4to5.md)
* [Security Considerations](security_considerations.md)

## Versioning

Expand All @@ -73,6 +74,8 @@ Given a version number `MAJOR.MINOR.PATCH`, increment the:
* [Developers guide](developers.md)
* [Documentation guide](docs.md)
* [Code of Conduct](CODE_OF_CONDUCT.md)
* [Persisting N3 Terms](persisting_n3_terms.md)
* [Type Hints](type_hints.md)
* [Decisions](decisions.md)

## Source Code
Expand Down
73 changes: 60 additions & 13 deletions examples/sparqlstore_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,53 @@
Simple examples showing how to use the SPARQLStore
"""

import sys
from urllib.request import urlopen

from rdflib import Graph, Namespace, URIRef
from rdflib.plugins.stores.sparqlstore import SPARQLStore
from rdflib.term import Identifier
from rdflib.namespace import RDF, SKOS
from rdflib.plugins.stores.sparqlstore import SPARQLStore, SPARQLUpdateStore
from rdflib.term import Identifier, Literal

# Shows examples of the useage of SPARQLStore and SPARQLUpdateStore against local SPARQL1.1 endpoint if
# available. This assumes SPARQL1.1 query/update endpoints running locally at
# http://localhost:3030/db/
#
# It uses the same endpoint as the test_dataset.py!
#
# For the tests here to run, you can for example start fuseki with:
# ./fuseki-server --mem --update /db

# THIS WILL ADD DATA TO THE /db dataset


HOST = "http://localhost:3030"

if __name__ == "__main__":
try:
assert len(urlopen(HOST).read()) > 0
except Exception:
print(f"{HOST} is unavailable.")
sys.exit(126)

dbo = Namespace("http://dbpedia.org/ontology/")
dbr = Namespace("http://dbpedia.org/resource/")

# EXAMPLE Update Store:
update_store = SPARQLUpdateStore(
query_endpoint="http://localhost:3030/db/sparql",
update_endpoint="http://localhost:3030/db/update",
)
graph = Graph(store=update_store, identifier="http://dbpedia.org")
graph.add((dbr.Berlin, dbo.populationTotal, Literal(3)))
graph.add((dbr.Brisbane, dbo.populationTotal, Literal(2)))
graph.add((dbr["Category:Capitals_in_Europe"], RDF.type, SKOS.Concept))
graph.add((dbr["Category:Holy_Grail"], RDF.type, SKOS.Concept))
graph.add((dbr["Category:Hospital_ships_of_Japan"], RDF.type, SKOS.Concept))

# EXAMPLE 1: using a Graph with the Store type string set to "SPARQLStore"
# EXAMPLE Store 1: using a Graph with the Store type string set to "SPARQLStore"
graph = Graph("SPARQLStore", identifier="http://dbpedia.org")
graph.open("http://dbpedia.org/sparql")
graph.open("http://localhost:3030/db/sparql")

pop = graph.value(URIRef("http://dbpedia.org/resource/Berlin"), dbo.populationTotal)
assert isinstance(pop, Identifier)
Expand All @@ -23,33 +60,43 @@
)
print()

# EXAMPLE 2: using a SPARQLStore object directly
st = SPARQLStore(query_endpoint="http://dbpedia.org/sparql")
# EXAMPLE Query 2: using a SPARQLStore object directly
st = SPARQLStore(query_endpoint="http://localhost:3030/db/sparql")

for p in st.objects(
URIRef("http://dbpedia.org/resource/Brisbane"), dbo.populationTotal
):
assert isinstance(p, Identifier)
print(
"According to DBPedia, Brisbane has a population of " "{0}".format(int(p))
)
print("According to DBPedia, Brisbane has a population of {0}".format(int(p)))
print()

# EXAMPLE 3: doing RDFlib triple navigation using SPARQLStore as a Graph()
# EXAMPLE Query 3: doing RDFlib triple navigation using SPARQLStore as a Graph()
print("Triple navigation using SPARQLStore as a Graph():")
graph = Graph("SPARQLStore", identifier="http://dbpedia.org")
graph.open("http://dbpedia.org/sparql")
graph.open("http://localhost:3030/db/sparql")
# we are asking DBPedia for 3 skos:Concept instances
count = 0

for s in graph.subjects(predicate=RDF.type, object=SKOS.Concept):
count += 1
print(f"\t- {s}")
if count >= 3:
break

# EXAMPLE Query 4: doing RDFlib triple navigation using a Graph() with a SPARQLStore backend
print("Triple navigation using a Graph() with a SPARQLStore backend:")
st = SPARQLStore(query_endpoint="http://localhost:3030/db/sparql")
graph = Graph(store=st)
# we are asking DBPedia for 3 skos:Concept instances
count = 0
from rdflib.namespace import RDF, SKOS

for s in graph.subjects(predicate=RDF.type, object=SKOS.Concept):
count += 1
print(f"\t- {s}")
if count >= 3:
break

# EXAMPLE 4: using a SPARQL endpoint that requires Basic HTTP authentication
# EXAMPLE Store 5: using a SPARQL endpoint that requires Basic HTTP authentication
# NOTE: this example won't run since the endpoint isn't live (or real)
sparql_store = SPARQLStore(
query_endpoint="http://fake-sparql-endpoint.com/repository/x",
Expand Down
2 changes: 0 additions & 2 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,6 @@ nav:
- Contributing guide: CONTRIBUTING.md
- Developers guide: developers.md
- Documentation guide: docs.md
- Type Hints: type_hints.md
- Persisting Notation 3 Terms: persisting_n3_terms.md
- Code of Conduct: CODE_OF_CONDUCT.md
- Decision Records: decisions.md

Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ classifiers = [
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Programming Language :: Python :: 3.14",
"License :: OSI Approved :: BSD License",
"Topic :: Software Development :: Libraries :: Python Modules",
"Operating System :: OS Independent",
Expand Down
2 changes: 1 addition & 1 deletion rdflib/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
__docformat__ = "restructuredtext en"

__version__: str = _DISTRIBUTION_METADATA["Version"]
__date__ = "2025-09-19"
__date__ = "2025-10-30"

__all__ = [
"URIRef",
Expand Down
3 changes: 0 additions & 3 deletions rdflib/extras/shacl.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@
from rdflib.graph import _ObjectType
from rdflib.term import IdentifiedNode

if TYPE_CHECKING:
from rdflib.term import IdentifiedNode


class SHACLPathError(Exception):
pass
Expand Down
Loading
Loading