rdf4j-python 0.1.6__tar.gz → 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. {rdf4j_python-0.1.6/rdf4j_python.egg-info → rdf4j_python-0.2.0}/PKG-INFO +82 -28
  2. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/README.md +80 -26
  3. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/pyproject.toml +15 -2
  4. rdf4j_python-0.2.0/rdf4j_python/__init__.py +81 -0
  5. rdf4j_python-0.2.0/rdf4j_python/_client/_client.py +342 -0
  6. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/_driver/__init__.py +4 -0
  7. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/_driver/_async_rdf4j_db.py +40 -6
  8. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/_driver/_async_repository.py +249 -18
  9. rdf4j_python-0.2.0/rdf4j_python/_driver/_async_transaction.py +310 -0
  10. rdf4j_python-0.2.0/rdf4j_python/exception/__init__.py +33 -0
  11. rdf4j_python-0.2.0/rdf4j_python/exception/repo_exception.py +61 -0
  12. rdf4j_python-0.2.0/rdf4j_python/model/__init__.py +37 -0
  13. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/model/term.py +15 -0
  14. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0/rdf4j_python.egg-info}/PKG-INFO +82 -28
  15. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python.egg-info/SOURCES.txt +6 -1
  16. rdf4j_python-0.2.0/tests/test_query_type_detection.py +135 -0
  17. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/tests/test_rdf4j_repository.py +1 -1
  18. rdf4j_python-0.2.0/tests/test_sparql_queries.py +605 -0
  19. rdf4j_python-0.2.0/tests/test_transactions.py +322 -0
  20. rdf4j_python-0.2.0/tests/test_upload_file.py +378 -0
  21. rdf4j_python-0.1.6/rdf4j_python/__init__.py +0 -14
  22. rdf4j_python-0.1.6/rdf4j_python/_client/_client.py +0 -281
  23. rdf4j_python-0.1.6/rdf4j_python/exception/__init__.py +0 -5
  24. rdf4j_python-0.1.6/rdf4j_python/exception/repo_exception.py +0 -34
  25. rdf4j_python-0.1.6/rdf4j_python/model/__init__.py +0 -11
  26. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/LICENSE +0 -0
  27. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/_client/__init__.py +0 -0
  28. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/_driver/_async_named_graph.py +0 -0
  29. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/model/_namespace.py +0 -0
  30. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/model/_repository_info.py +0 -0
  31. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/model/repository_config.py +0 -0
  32. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/model/vocabulary.py +0 -0
  33. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/utils/__init__.py +0 -0
  34. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/utils/const.py +0 -0
  35. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python/utils/helpers.py +0 -0
  36. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python.egg-info/dependency_links.txt +0 -0
  37. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python.egg-info/requires.txt +0 -0
  38. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/rdf4j_python.egg-info/top_level.txt +0 -0
  39. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/setup.cfg +0 -0
  40. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/tests/test_async_named_graph.py +0 -0
  41. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/tests/test_client.py +0 -0
  42. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/tests/test_client_initialization.py +0 -0
  43. {rdf4j_python-0.1.6 → rdf4j_python-0.2.0}/tests/test_helpers.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rdf4j-python
3
- Version: 0.1.6
3
+ Version: 0.2.0
4
4
  Summary: The Python client for RDF4J
5
5
  Author-email: Chengxu Bian <cbian564@gmail.com>
6
- Requires-Python: >=3.10
6
+ Requires-Python: >=3.11
7
7
  Description-Content-Type: text/markdown
8
8
  License-File: LICENSE
9
9
  Requires-Dist: httpx>=0.28.1
@@ -14,28 +14,34 @@ Dynamic: license-file
14
14
 
15
15
  # rdf4j-python
16
16
 
17
+ [![PyPI version](https://badge.fury.io/py/rdf4j-python.svg)](https://badge.fury.io/py/rdf4j-python)
18
+ [![Python Versions](https://img.shields.io/pypi/pyversions/rdf4j-python.svg)](https://pypi.org/project/rdf4j-python/)
19
+ [![CI](https://github.com/odysa/rdf4j-python/actions/workflows/ci.yaml/badge.svg)](https://github.com/odysa/rdf4j-python/actions/workflows/ci.yaml)
20
+ [![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
21
+ [![Documentation](https://img.shields.io/badge/docs-sphinx-blue.svg)](https://github.com/odysa/rdf4j-python/tree/main/docs)
22
+
17
23
  **A modern Python client for the Eclipse RDF4J framework, enabling seamless RDF data management and SPARQL operations from Python applications.**
18
24
 
19
25
  rdf4j-python bridges the gap between Python and the robust [Eclipse RDF4J](https://rdf4j.org/) ecosystem, providing a clean, async-first API for managing RDF repositories, executing SPARQL queries, and handling semantic data with ease.
20
26
 
21
- > ⚠️ **Note:** This project is currently under active development and considered **experimental**. Interfaces may change. Use with caution in production environments—and feel free to help shape its future!
22
-
23
27
  ## Features
24
28
 
25
- - **🚀 Async-First Design**: Native support for async/await with synchronous fallback
26
- - **🔄 Repository Management**: Create, access, and manage RDF4J repositories programmatically
27
- - **⚡ SPARQL Support**: Execute SELECT, ASK, CONSTRUCT, and UPDATE queries effortlessly
28
- - **📊 Flexible Data Handling**: Add, retrieve, and manipulate RDF triples and quads
29
- - **🎯 Multiple Formats**: Support for various RDF serialization formats (Turtle, N-Triples, JSON-LD, etc.)
30
- - **🛠️ Repository Types**: Memory stores, native stores, HTTP repositories, and more
31
- - **🔗 Named Graph Support**: Work with multiple graphs within repositories
32
- - **⚙️ Inferencing**: Built-in support for RDFS and custom inferencing rules
29
+ - **Async-First Design**: Native support for async/await with synchronous fallback
30
+ - **Repository Management**: Create, access, and manage RDF4J repositories programmatically
31
+ - **SPARQL Support**: Execute SELECT, ASK, CONSTRUCT, and UPDATE queries effortlessly
32
+ - **Transaction Support**: Atomic operations with commit/rollback and isolation levels
33
+ - **Flexible Data Handling**: Add, retrieve, and manipulate RDF triples and quads
34
+ - **File Upload**: Upload RDF files (Turtle, N-Triples, N-Quads, RDF/XML, JSON-LD, TriG, N3) directly to repositories
35
+ - **Multiple Formats**: Support for various RDF serialization formats
36
+ - **Repository Types**: Memory stores, native stores, HTTP repositories, and more
37
+ - **Named Graph Support**: Work with multiple graphs within repositories
38
+ - **Inferencing**: Built-in support for RDFS and custom inferencing rules
33
39
 
34
40
  ## Installation
35
41
 
36
42
  ### Prerequisites
37
43
 
38
- - Python 3.10 or higher
44
+ - Python 3.11 or higher
39
45
  - RDF4J Server (for remote repositories) or embedded usage
40
46
 
41
47
  ### Install from PyPI
@@ -175,6 +181,55 @@ async def advanced_example():
175
181
  results = await repo.query(query)
176
182
  ```
177
183
 
184
+ ### Uploading RDF Files
185
+
186
+ ```python
187
+ import pyoxigraph as og
188
+
189
+ async def upload_example():
190
+ async with AsyncRdf4j("http://localhost:19780/rdf4j-server") as db:
191
+ repo = await db.get_repository("my-repo")
192
+
193
+ # Upload a Turtle file (format auto-detected from extension)
194
+ await repo.upload_file("data.ttl")
195
+
196
+ # Upload to a specific named graph
197
+ await repo.upload_file("data.ttl", context=IRI("http://example.com/graph"))
198
+
199
+ # Upload with explicit format
200
+ await repo.upload_file("data.txt", rdf_format=og.RdfFormat.N_TRIPLES)
201
+
202
+ # Upload with base URI for relative URIs
203
+ await repo.upload_file("data.ttl", base_uri="http://example.com/")
204
+ ```
205
+
206
+ ### Using Transactions
207
+
208
+ ```python
209
+ from rdf4j_python import IsolationLevel
210
+
211
+ async def transaction_example():
212
+ async with AsyncRdf4j("http://localhost:19780/rdf4j-server") as db:
213
+ repo = await db.get_repository("my-repo")
214
+
215
+ # Atomic operations with auto-commit/rollback
216
+ async with repo.transaction() as txn:
217
+ await txn.add_statements([
218
+ Quad(IRI("http://example.com/alice"), IRI("http://xmlns.com/foaf/0.1/name"), Literal("Alice")),
219
+ Quad(IRI("http://example.com/bob"), IRI("http://xmlns.com/foaf/0.1/name"), Literal("Bob")),
220
+ ])
221
+ await txn.delete_statements([old_quad])
222
+ # Commits automatically on success, rolls back on exception
223
+
224
+ # With specific isolation level
225
+ async with repo.transaction(IsolationLevel.SERIALIZABLE) as txn:
226
+ await txn.update("""
227
+ DELETE { ?s <http://example.com/status> "draft" }
228
+ INSERT { ?s <http://example.com/status> "published" }
229
+ WHERE { ?s <http://example.com/status> "draft" }
230
+ """)
231
+ ```
232
+
178
233
  For more detailed examples, see the [examples](examples/) directory.
179
234
 
180
235
  ## Development
@@ -223,17 +278,17 @@ tests/ # Test suite
223
278
  docs/ # Documentation
224
279
  ```
225
280
 
226
- ### Contributing
281
+ ## Contributing
227
282
 
228
283
  We welcome contributions! Here's how to get involved:
229
284
 
230
- 1. **Fork** the repository on GitHub
231
- 2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)
232
- 3. **Make** your changes and add tests
233
- 4. **Run** the test suite to ensure everything works
234
- 5. **Commit** your changes (`git commit -m 'Add amazing feature'`)
235
- 6. **Push** to your branch (`git push origin feature/amazing-feature`)
236
- 7. **Open** a Pull Request
285
+ 1. Fork the repository on GitHub
286
+ 2. Create a feature branch (`git checkout -b feature/amazing-feature`)
287
+ 3. Make your changes and add tests
288
+ 4. Run the test suite to ensure everything works
289
+ 5. Commit your changes (`git commit -m 'Add amazing feature'`)
290
+ 6. Push to your branch (`git push origin feature/amazing-feature`)
291
+ 7. Open a Pull Request
237
292
 
238
293
  ### Running Examples
239
294
 
@@ -245,15 +300,14 @@ python examples/query.py
245
300
 
246
301
  ## License
247
302
 
248
- This project is licensed under the **BSD 3-Clause License**. See the [LICENSE](LICENSE) file for the full license text.
303
+ This project is licensed under the BSD 3-Clause License. See the [LICENSE](LICENSE) file for details.
249
304
 
250
- ```
251
305
  Copyright (c) 2025, Chengxu Bian
252
- All rights reserved.
253
- ```
254
306
 
255
- ---
307
+ ## Support
256
308
 
257
- **Questions or Issues?** Please feel free to [open an issue](https://github.com/odysa/rdf4j-python/issues) on GitHub.
309
+ - **Issues & Bug Reports**: [GitHub Issues](https://github.com/odysa/rdf4j-python/issues)
310
+ - **Documentation**: [docs/](https://github.com/odysa/rdf4j-python/tree/main/docs)
311
+ - **Questions**: Feel free to open a discussion or issue
258
312
 
259
- **⭐ Star this repo** if you find it useful!
313
+ If you find this project useful, please consider starring the repository!
@@ -1,27 +1,33 @@
1
1
  # rdf4j-python
2
2
 
3
+ [![PyPI version](https://badge.fury.io/py/rdf4j-python.svg)](https://badge.fury.io/py/rdf4j-python)
4
+ [![Python Versions](https://img.shields.io/pypi/pyversions/rdf4j-python.svg)](https://pypi.org/project/rdf4j-python/)
5
+ [![CI](https://github.com/odysa/rdf4j-python/actions/workflows/ci.yaml/badge.svg)](https://github.com/odysa/rdf4j-python/actions/workflows/ci.yaml)
6
+ [![License](https://img.shields.io/badge/License-BSD_3--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
7
+ [![Documentation](https://img.shields.io/badge/docs-sphinx-blue.svg)](https://github.com/odysa/rdf4j-python/tree/main/docs)
8
+
3
9
  **A modern Python client for the Eclipse RDF4J framework, enabling seamless RDF data management and SPARQL operations from Python applications.**
4
10
 
5
11
  rdf4j-python bridges the gap between Python and the robust [Eclipse RDF4J](https://rdf4j.org/) ecosystem, providing a clean, async-first API for managing RDF repositories, executing SPARQL queries, and handling semantic data with ease.
6
12
 
7
- > ⚠️ **Note:** This project is currently under active development and considered **experimental**. Interfaces may change. Use with caution in production environments—and feel free to help shape its future!
8
-
9
13
  ## Features
10
14
 
11
- - **🚀 Async-First Design**: Native support for async/await with synchronous fallback
12
- - **🔄 Repository Management**: Create, access, and manage RDF4J repositories programmatically
13
- - **⚡ SPARQL Support**: Execute SELECT, ASK, CONSTRUCT, and UPDATE queries effortlessly
14
- - **📊 Flexible Data Handling**: Add, retrieve, and manipulate RDF triples and quads
15
- - **🎯 Multiple Formats**: Support for various RDF serialization formats (Turtle, N-Triples, JSON-LD, etc.)
16
- - **🛠️ Repository Types**: Memory stores, native stores, HTTP repositories, and more
17
- - **🔗 Named Graph Support**: Work with multiple graphs within repositories
18
- - **⚙️ Inferencing**: Built-in support for RDFS and custom inferencing rules
15
+ - **Async-First Design**: Native support for async/await with synchronous fallback
16
+ - **Repository Management**: Create, access, and manage RDF4J repositories programmatically
17
+ - **SPARQL Support**: Execute SELECT, ASK, CONSTRUCT, and UPDATE queries effortlessly
18
+ - **Transaction Support**: Atomic operations with commit/rollback and isolation levels
19
+ - **Flexible Data Handling**: Add, retrieve, and manipulate RDF triples and quads
20
+ - **File Upload**: Upload RDF files (Turtle, N-Triples, N-Quads, RDF/XML, JSON-LD, TriG, N3) directly to repositories
21
+ - **Multiple Formats**: Support for various RDF serialization formats
22
+ - **Repository Types**: Memory stores, native stores, HTTP repositories, and more
23
+ - **Named Graph Support**: Work with multiple graphs within repositories
24
+ - **Inferencing**: Built-in support for RDFS and custom inferencing rules
19
25
 
20
26
  ## Installation
21
27
 
22
28
  ### Prerequisites
23
29
 
24
- - Python 3.10 or higher
30
+ - Python 3.11 or higher
25
31
  - RDF4J Server (for remote repositories) or embedded usage
26
32
 
27
33
  ### Install from PyPI
@@ -161,6 +167,55 @@ async def advanced_example():
161
167
  results = await repo.query(query)
162
168
  ```
163
169
 
170
+ ### Uploading RDF Files
171
+
172
+ ```python
173
+ import pyoxigraph as og
174
+
175
+ async def upload_example():
176
+ async with AsyncRdf4j("http://localhost:19780/rdf4j-server") as db:
177
+ repo = await db.get_repository("my-repo")
178
+
179
+ # Upload a Turtle file (format auto-detected from extension)
180
+ await repo.upload_file("data.ttl")
181
+
182
+ # Upload to a specific named graph
183
+ await repo.upload_file("data.ttl", context=IRI("http://example.com/graph"))
184
+
185
+ # Upload with explicit format
186
+ await repo.upload_file("data.txt", rdf_format=og.RdfFormat.N_TRIPLES)
187
+
188
+ # Upload with base URI for relative URIs
189
+ await repo.upload_file("data.ttl", base_uri="http://example.com/")
190
+ ```
191
+
192
+ ### Using Transactions
193
+
194
+ ```python
195
+ from rdf4j_python import IsolationLevel
196
+
197
+ async def transaction_example():
198
+ async with AsyncRdf4j("http://localhost:19780/rdf4j-server") as db:
199
+ repo = await db.get_repository("my-repo")
200
+
201
+ # Atomic operations with auto-commit/rollback
202
+ async with repo.transaction() as txn:
203
+ await txn.add_statements([
204
+ Quad(IRI("http://example.com/alice"), IRI("http://xmlns.com/foaf/0.1/name"), Literal("Alice")),
205
+ Quad(IRI("http://example.com/bob"), IRI("http://xmlns.com/foaf/0.1/name"), Literal("Bob")),
206
+ ])
207
+ await txn.delete_statements([old_quad])
208
+ # Commits automatically on success, rolls back on exception
209
+
210
+ # With specific isolation level
211
+ async with repo.transaction(IsolationLevel.SERIALIZABLE) as txn:
212
+ await txn.update("""
213
+ DELETE { ?s <http://example.com/status> "draft" }
214
+ INSERT { ?s <http://example.com/status> "published" }
215
+ WHERE { ?s <http://example.com/status> "draft" }
216
+ """)
217
+ ```
218
+
164
219
  For more detailed examples, see the [examples](examples/) directory.
165
220
 
166
221
  ## Development
@@ -209,17 +264,17 @@ tests/ # Test suite
209
264
  docs/ # Documentation
210
265
  ```
211
266
 
212
- ### Contributing
267
+ ## Contributing
213
268
 
214
269
  We welcome contributions! Here's how to get involved:
215
270
 
216
- 1. **Fork** the repository on GitHub
217
- 2. **Create** a feature branch (`git checkout -b feature/amazing-feature`)
218
- 3. **Make** your changes and add tests
219
- 4. **Run** the test suite to ensure everything works
220
- 5. **Commit** your changes (`git commit -m 'Add amazing feature'`)
221
- 6. **Push** to your branch (`git push origin feature/amazing-feature`)
222
- 7. **Open** a Pull Request
271
+ 1. Fork the repository on GitHub
272
+ 2. Create a feature branch (`git checkout -b feature/amazing-feature`)
273
+ 3. Make your changes and add tests
274
+ 4. Run the test suite to ensure everything works
275
+ 5. Commit your changes (`git commit -m 'Add amazing feature'`)
276
+ 6. Push to your branch (`git push origin feature/amazing-feature`)
277
+ 7. Open a Pull Request
223
278
 
224
279
  ### Running Examples
225
280
 
@@ -231,15 +286,14 @@ python examples/query.py
231
286
 
232
287
  ## License
233
288
 
234
- This project is licensed under the **BSD 3-Clause License**. See the [LICENSE](LICENSE) file for the full license text.
289
+ This project is licensed under the BSD 3-Clause License. See the [LICENSE](LICENSE) file for details.
235
290
 
236
- ```
237
291
  Copyright (c) 2025, Chengxu Bian
238
- All rights reserved.
239
- ```
240
292
 
241
- ---
293
+ ## Support
242
294
 
243
- **Questions or Issues?** Please feel free to [open an issue](https://github.com/odysa/rdf4j-python/issues) on GitHub.
295
+ - **Issues & Bug Reports**: [GitHub Issues](https://github.com/odysa/rdf4j-python/issues)
296
+ - **Documentation**: [docs/](https://github.com/odysa/rdf4j-python/tree/main/docs)
297
+ - **Questions**: Feel free to open a discussion or issue
244
298
 
245
- **⭐ Star this repo** if you find it useful!
299
+ If you find this project useful, please consider starring the repository!
@@ -1,10 +1,10 @@
1
1
  [project]
2
2
  name = "rdf4j-python"
3
3
  authors = [{ name = "Chengxu Bian", email = "cbian564@gmail.com" }]
4
- version = "0.1.6"
4
+ version = "0.2.0"
5
5
  description = "The Python client for RDF4J"
6
6
  readme = "README.md"
7
- requires-python = ">=3.10"
7
+ requires-python = ">=3.11"
8
8
  dependencies = ["httpx>=0.28.1", "pyoxigraph>=0.4.10"]
9
9
 
10
10
  [project.optional-dependencies]
@@ -20,6 +20,19 @@ dev = [
20
20
  ]
21
21
  docs = ["furo>=2024.8.6", "sphinx>=8"]
22
22
 
23
+ [tool.semantic_release]
24
+ version_toml = ["pyproject.toml:project.version"]
25
+ branch = "main"
26
+ commit_message = "chore(release): bump version to {version}"
27
+ tag_format = "v{version}"
28
+
29
+ [tool.semantic_release.commit_parser_options]
30
+ allowed_tags = ["build", "chore", "ci", "docs", "feat", "fix", "perf", "refactor", "style", "test"]
31
+ minor_tags = ["feat"]
32
+ patch_tags = ["fix", "perf"]
33
+
34
+ [tool.semantic_release.changelog]
35
+ changelog_file = "CHANGELOG.md"
23
36
 
24
37
  [tool.pytest.ini_options]
25
38
  log_cli = true
@@ -0,0 +1,81 @@
1
+ """
2
+ RDF4J Python is a Python library for interacting with RDF4J repositories.
3
+ """
4
+
5
+ from ._driver import (
6
+ AsyncNamedGraph,
7
+ AsyncRdf4j,
8
+ AsyncRdf4JRepository,
9
+ AsyncTransaction,
10
+ IsolationLevel,
11
+ TransactionState,
12
+ )
13
+ from .exception import (
14
+ NamespaceException,
15
+ NetworkError,
16
+ QueryError,
17
+ Rdf4jError,
18
+ RepositoryCreationException,
19
+ RepositoryDeletionException,
20
+ RepositoryError,
21
+ RepositoryInternalException,
22
+ RepositoryNotFoundException,
23
+ RepositoryUpdateException,
24
+ TransactionError,
25
+ TransactionStateError,
26
+ )
27
+ from .model import (
28
+ IRI,
29
+ BlankNode,
30
+ Context,
31
+ DefaultGraph,
32
+ Literal,
33
+ Namespace,
34
+ Object,
35
+ Predicate,
36
+ Quad,
37
+ QuadResultSet,
38
+ RepositoryMetadata,
39
+ Subject,
40
+ Triple,
41
+ Variable,
42
+ )
43
+
44
+ __all__ = [
45
+ # Main classes
46
+ "AsyncRdf4j",
47
+ "AsyncRdf4JRepository",
48
+ "AsyncNamedGraph",
49
+ # Transaction
50
+ "AsyncTransaction",
51
+ "IsolationLevel",
52
+ "TransactionState",
53
+ # Exceptions
54
+ "Rdf4jError",
55
+ "RepositoryError",
56
+ "RepositoryCreationException",
57
+ "RepositoryDeletionException",
58
+ "RepositoryNotFoundException",
59
+ "RepositoryInternalException",
60
+ "RepositoryUpdateException",
61
+ "NamespaceException",
62
+ "NetworkError",
63
+ "QueryError",
64
+ "TransactionError",
65
+ "TransactionStateError",
66
+ # Model types
67
+ "Namespace",
68
+ "RepositoryMetadata",
69
+ "IRI",
70
+ "BlankNode",
71
+ "Literal",
72
+ "DefaultGraph",
73
+ "Variable",
74
+ "Quad",
75
+ "Triple",
76
+ "Subject",
77
+ "Predicate",
78
+ "Object",
79
+ "Context",
80
+ "QuadResultSet",
81
+ ]