From 3426b4e201cf03b78d2a3f144876955fcda2f66b Mon Sep 17 00:00:00 2001 From: Matthias Baumgartner Date: Thu, 15 Dec 2022 17:17:53 +0100 Subject: extractor interface revision * schema as property * predicates -> principals --- bsie/base/extractor.py | 21 +++++++++++++-------- bsie/extractor/generic/constant.py | 8 +++----- bsie/extractor/generic/path.py | 7 +++---- bsie/extractor/generic/stat.py | 7 +++---- test/base/test_extractor.py | 5 +++-- 5 files changed, 25 insertions(+), 23 deletions(-) diff --git a/bsie/base/extractor.py b/bsie/base/extractor.py index 678dcec..c44021b 100644 --- a/bsie/base/extractor.py +++ b/bsie/base/extractor.py @@ -9,8 +9,6 @@ import abc import typing # bsie imports -from bsie.utils import node -from bsie.utils.bsfs import schema as _schema, typename from bsie.utils import bsfs, node, ns # exports @@ -58,10 +56,10 @@ class Extractor(abc.ABC): CONTENT_READER: typing.Optional[str] = None # extractor schema. - schema: _schema.Schema + _schema: bsfs.schema.Schema - def __init__(self, schema: _schema.Schema): - self.schema = schema + def __init__(self, schema: bsfs.schema.Schema): + self._schema = schema def __str__(self) -> str: return bsfs.typename(self) @@ -77,7 +75,14 @@ class Extractor(abc.ABC): def __hash__(self) -> int: return hash((type(self), self.CONTENT_READER, self.schema)) - def predicates(self) -> typing.Iterator[_schema.Predicate]: + @property + def schema(self) -> bsfs.schema.Schema: + """Return the extractor's schema.""" + return self._schema + + @property + def principals(self) -> typing.Iterator[bsfs.schema.Predicate]: + """Return the principal predicates, i.e., relations from/to the extraction subject.""" ent = self.schema.node(ns.bsfs.Entity) return ( pred @@ -91,8 +96,8 @@ class Extractor(abc.ABC): self, subject: node.Node, content: typing.Any, - predicates: typing.Iterable[_schema.Predicate], - ) -> typing.Iterator[typing.Tuple[node.Node, _schema.Predicate, typing.Any]]: + principals: typing.Iterable[bsfs.schema.Predicate], + ) -> typing.Iterator[typing.Tuple[node.Node, bsfs.schema.Predicate, typing.Any]]: """Return (node, predicate, value) triples.""" ## EOF ## diff --git a/bsie/extractor/generic/constant.py b/bsie/extractor/generic/constant.py index f9e3415..cdb2ef6 100644 --- a/bsie/extractor/generic/constant.py +++ b/bsie/extractor/generic/constant.py @@ -9,8 +9,6 @@ import typing # bsie imports from bsie.base import extractor -from bsie.utils.bsfs import URI, schema as _schema -from bsie.utils.node import Node from bsie.utils import bsfs, node # exports @@ -50,10 +48,10 @@ class Constant(extractor.Extractor): self, subject: node.Node, content: None, - predicates: typing.Iterable[_schema.Predicate], - ) -> typing.Iterator[typing.Tuple[Node, _schema.Predicate, typing.Any]]: + principals: typing.Iterable[bsfs.schema.Predicate], + ) -> typing.Iterator[typing.Tuple[node.Node, bsfs.schema.Predicate, typing.Any]]: for pred, value in self._tuples: - if pred in predicates: + if pred in principals: yield subject, pred, value ## EOF ## diff --git a/bsie/extractor/generic/path.py b/bsie/extractor/generic/path.py index 00165e3..23ae80b 100644 --- a/bsie/extractor/generic/path.py +++ b/bsie/extractor/generic/path.py @@ -10,7 +10,6 @@ import typing # bsie imports from bsie.base import extractor -from bsie.utils.bsfs import schema from bsie.utils import bsfs, node, ns # exports @@ -46,9 +45,9 @@ class Path(extractor.Extractor): self, subject: node.Node, content: str, - predicates: typing.Iterable[schema.Predicate], - ) -> typing.Iterator[typing.Tuple[node.Node, schema.Predicate, typing.Any]]: - for pred in predicates: + principals: typing.Iterable[bsfs.schema.Predicate], + ) -> typing.Iterator[typing.Tuple[node.Node, bsfs.schema.Predicate, typing.Any]]: + for pred in principals: # find callback clbk = self._callmap.get(pred) if clbk is None: diff --git a/bsie/extractor/generic/stat.py b/bsie/extractor/generic/stat.py index 0f4267f..1dcfedf 100644 --- a/bsie/extractor/generic/stat.py +++ b/bsie/extractor/generic/stat.py @@ -10,7 +10,6 @@ import typing # bsie imports from bsie.base import extractor -from bsie.utils.bsfs import schema as _schema from bsie.utils import bsfs, node, ns # exports @@ -46,9 +45,9 @@ class Stat(extractor.Extractor): self, subject: node.Node, content: os.stat_result, - predicates: typing.Iterable[_schema.Predicate], - ) -> typing.Iterator[typing.Tuple[node.Node, _schema.Predicate, typing.Any]]: - for pred in predicates: + principals: typing.Iterable[bsfs.schema.Predicate], + ) -> typing.Iterator[typing.Tuple[node.Node, bsfs.schema.Predicate, typing.Any]]: + for pred in principals: # find callback clbk = self._callmap.get(pred) if clbk is None: diff --git a/test/base/test_extractor.py b/test/base/test_extractor.py index 5410ae0..30974ef 100644 --- a/test/base/test_extractor.py +++ b/test/base/test_extractor.py @@ -51,14 +51,15 @@ class TestExtractor(unittest.TestCase): self.assertNotEqual(ext, sub) self.assertNotEqual(hash(ext), hash(sub)) - def test_predicates(self): + def test_principals(self): schema = bsfs.schema.Schema.Empty() entity = schema.node(ns.bsfs.Node).get_child(ns.bsfs.Entity) string = schema.literal(ns.bsfs.Literal).get_child(bsfs.URI('http://www.w3.org/2001/XMLSchema#string')) p_author = schema.predicate(ns.bsfs.Predicate).get_child(ns.bse.author, domain=entity, range=string) p_comment = schema.predicate(ns.bsfs.Predicate).get_child(ns.bse.comment, domain=entity, range=string) ext = StubExtractor() - self.assertSetEqual(set(ext.predicates()), {p_author, p_comment} | set(schema.predicates())) + self.assertSetEqual(set(ext.principals), + {p_author, p_comment} | set(schema.predicates()) - {schema.predicate(ns.bsfs.Predicate)}) ## main ## -- cgit v1.2.3