aboutsummaryrefslogtreecommitdiffstats
path: root/bsfs
diff options
context:
space:
mode:
Diffstat (limited to 'bsfs')
-rw-r--r--bsfs/schema/__init__.py3
-rw-r--r--bsfs/schema/schema.py2
-rw-r--r--bsfs/schema/serialize.py17
-rw-r--r--bsfs/schema/types.py8
-rw-r--r--bsfs/triple_store/sparql/sparql.py6
5 files changed, 18 insertions, 18 deletions
diff --git a/bsfs/schema/__init__.py b/bsfs/schema/__init__.py
index 5162a01..31d7d61 100644
--- a/bsfs/schema/__init__.py
+++ b/bsfs/schema/__init__.py
@@ -10,7 +10,8 @@ import typing
# inner-module imports
from .schema import Schema
from .serialize import from_string, to_string
-from .types import Literal, Node, Predicate, Vertex, ROOT_FEATURE, ROOT_LITERAL, ROOT_NODE, ROOT_NUMBER, ROOT_PREDICATE, ROOT_VERTEX
+from .types import Literal, Node, Predicate, Vertex, \
+ ROOT_FEATURE, ROOT_LITERAL, ROOT_NODE, ROOT_NUMBER, ROOT_PREDICATE, ROOT_VERTEX
# exports
__all__: typing.Sequence[str] = (
diff --git a/bsfs/schema/schema.py b/bsfs/schema/schema.py
index 80cb58a..52ad191 100644
--- a/bsfs/schema/schema.py
+++ b/bsfs/schema/schema.py
@@ -7,10 +7,8 @@ Author: Matthias Baumgartner, 2022
# imports
from collections import abc, namedtuple
import typing
-import rdflib
# bsfs imports
-from bsfs.namespace import ns
from bsfs.utils import errors, URI, typename
# inner-module imports
diff --git a/bsfs/schema/serialize.py b/bsfs/schema/serialize.py
index c1ac9a9..0eb6628 100644
--- a/bsfs/schema/serialize.py
+++ b/bsfs/schema/serialize.py
@@ -5,7 +5,6 @@ A copy of the license is provided with the project.
Author: Matthias Baumgartner, 2022
"""
# standard imports
-from collections import abc
import itertools
import typing
@@ -42,7 +41,7 @@ def from_string(schema_str: str) -> schema.Schema:
return value.value
if isinstance(value, rdflib.URIRef):
return URI(value)
- raise errors.BackendError(f'expected Literal or URIRef, found {typename(value)}')
+ raise errors.UnreachableError(f'expected Literal or URIRef, found {typename(value)}')
def _fetch_hierarchically(factory, curr):
"""Walk through a rdfs:subClassOf hierarchy, creating symbols along the way."""
@@ -80,14 +79,16 @@ def from_string(schema_str: str) -> schema.Schema:
# fetch predicates
# FIXME: type annotation
def _fetch_value(subject: URI, predicate: rdflib.URIRef, value_factory) -> typing.Optional[typing.Any]:
- """Fetch the object of a given subject and predicate. Raises a `errors.ConsistencyError` if multiple objects match."""
+ """Fetch the object of a given subject and predicate.
+ Raises a `errors.ConsistencyError` if multiple objects match.
+ """
values = list(graph.objects(rdflib.URIRef(subject), predicate))
if len(values) == 0:
return None
- elif len(values) == 1:
+ if len(values) == 1:
return value_factory(values[0])
- else:
- raise errors.ConsistencyError(f'{subject} has multiple values for predicate {str(predicate)}, expected zero or one')
+ raise errors.ConsistencyError(
+ f'{subject} has multiple values for predicate {str(predicate)}, expected zero or one')
def _build_predicate(uri, parent, **annotations):
"""Predicate factory."""
@@ -102,13 +103,13 @@ def from_string(schema_str: str) -> schema.Schema:
dom = _fetch_value(uri, rdflib.RDFS.domain, URI)
if dom is not None and dom not in nodes_lut:
raise errors.ConsistencyError(f'predicate {uri} has undefined domain {dom}')
- elif dom is not None:
+ if dom is not None:
dom = nodes_lut[dom]
# get range
rng = _fetch_value(uri, rdflib.RDFS.range, URI)
if rng is not None and rng not in nodes_lut and rng not in literals_lut:
raise errors.ConsistencyError(f'predicate {uri} has undefined range {rng}')
- elif rng is not None:
+ if rng is not None:
rng = nodes_lut.get(rng, literals_lut.get(rng))
# get unique
unique = _fetch_value(uri, rdflib.URIRef(ns.bsfs.unique), bool)
diff --git a/bsfs/schema/types.py b/bsfs/schema/types.py
index 4f49efe..6257dee 100644
--- a/bsfs/schema/types.py
+++ b/bsfs/schema/types.py
@@ -238,7 +238,7 @@ class Predicate(_Type):
self,
# Type members
uri: URI,
- parent: '_PredicateBase',
+ parent: typing.Optional['Predicate'],
# Predicate members
domain: Node,
range: Vertex, # pylint: disable=redefined-builtin
@@ -312,10 +312,10 @@ class Feature(Predicate):
self,
# Type members
uri: URI,
- parent: Predicate,
+ parent: typing.Optional[Predicate],
# Predicate members
domain: Node,
- range: Literal,
+ range: Literal, # pylint: disable=redefined-builtin
unique: bool,
# Feature members
dimension: int,
@@ -341,7 +341,7 @@ class Feature(Predicate):
self,
uri: URI,
domain: typing.Optional[Node] = None,
- range: typing.Optional[Literal] = None, # pylint: disable=redefined-builtin
+ range: typing.Optional[Vertex] = None, # pylint: disable=redefined-builtin
unique: typing.Optional[bool] = None,
dimension: typing.Optional[int] = None,
dtype: typing.Optional[URI] = None,
diff --git a/bsfs/triple_store/sparql/sparql.py b/bsfs/triple_store/sparql/sparql.py
index 87467ff..3877d1a 100644
--- a/bsfs/triple_store/sparql/sparql.py
+++ b/bsfs/triple_store/sparql/sparql.py
@@ -139,7 +139,7 @@ class SparqlStore(base.TripleStoreBase):
for src, trg in self._graph.subject_objects(rdflib.URIRef(pred.uri)):
self._transaction.remove((src, rdflib.URIRef(pred.uri), trg))
# remove predicate definition
- if pred.parent is not None:
+ if pred.parent is not None: # NOTE: there shouldn't be any predicate w/o parent
self._transaction.remove((
rdflib.URIRef(pred.uri),
rdflib.RDFS.subClassOf,
@@ -159,7 +159,7 @@ class SparqlStore(base.TripleStoreBase):
# remove instance
self._transaction.remove((inst, rdflib.RDF.type, rdflib.URIRef(node.uri)))
# remove node definition
- if node.parent is not None:
+ if node.parent is not None: # NOTE: there shouldn't be any node w/o parent
self._transaction.remove((
rdflib.URIRef(node.uri),
rdflib.RDFS.subClassOf,
@@ -168,7 +168,7 @@ class SparqlStore(base.TripleStoreBase):
for lit in sub.literals:
# remove literal definition
- if lit.parent is not None:
+ if lit.parent is not None: # NOTE: there shouldn't be any literal w/o parent
self._transaction.remove((
rdflib.URIRef(lit.uri),
rdflib.RDFS.subClassOf,