diff options
author | Matthias Baumgartner <dev@igsor.net> | 2023-01-15 21:00:12 +0100 |
---|---|---|
committer | Matthias Baumgartner <dev@igsor.net> | 2023-01-15 21:00:12 +0100 |
commit | 80a97bfa9f22d0d6dd25928fe1754a3a0d1de78a (patch) | |
tree | 30d30fb669d7b43d7324ef8027306c24c1ec1ac2 /bsfs/triple_store/sparql/sparql.py | |
parent | ccaee71e2b6135d3b324fe551c8652940b67aab3 (diff) | |
download | bsfs-80a97bfa9f22d0d6dd25928fe1754a3a0d1de78a.tar.gz bsfs-80a97bfa9f22d0d6dd25928fe1754a3a0d1de78a.tar.bz2 bsfs-80a97bfa9f22d0d6dd25928fe1754a3a0d1de78a.zip |
Distance filter ast node
Diffstat (limited to 'bsfs/triple_store/sparql/sparql.py')
-rw-r--r-- | bsfs/triple_store/sparql/sparql.py | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/bsfs/triple_store/sparql/sparql.py b/bsfs/triple_store/sparql/sparql.py index 3877d1a..dfd9871 100644 --- a/bsfs/triple_store/sparql/sparql.py +++ b/bsfs/triple_store/sparql/sparql.py @@ -18,6 +18,7 @@ from bsfs.utils import errors, URI # inner-module imports from . import parse_filter from .. import base +from .distance import DISTANCE_FU # exports @@ -97,7 +98,7 @@ class SparqlStore(base.TripleStoreBase): self._transaction = _Transaction(self._graph) # NOTE: parsing bsfs.query.ast.filter.Has requires xsd:integer. self._schema = bsc.Schema(literals={bsc.ROOT_NUMBER.child(ns.xsd.integer)}) - self._filter_parser = parse_filter.Filter(self._schema) + self._filter_parser = parse_filter.Filter(self._graph, self._schema) # NOTE: mypy and pylint complain about the **kwargs not being listed (contrasting super) # However, not having it here is clearer since it's explicit that there are no arguments. @@ -123,6 +124,16 @@ class SparqlStore(base.TripleStoreBase): # check compatibility: No contradicting definitions if not self.schema.consistent_with(schema): raise errors.ConsistencyError(f'{schema} is inconsistent with {self.schema}') + # check distance functions of features + invalid = { + (cand.uri, cand.distance) + for cand + in schema.literals() + if isinstance(cand, bsc.Feature) and cand.distance not in DISTANCE_FU} + if len(invalid) > 0: + cand, dist = zip(*invalid) + raise ValueError( + f'unknown distance function {",".join(dist)} in feature {", ".join(cand)}') # commit the current transaction self.commit() |