aboutsummaryrefslogtreecommitdiffstats
path: root/bsie
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2023-03-04 13:41:13 +0100
committerMatthias Baumgartner <dev@igsor.net>2023-03-04 13:41:13 +0100
commitd2052e77210e0ace2c5f06e48afe2a8acb412965 (patch)
treef8e58256a6e309f7cabcd2112e59a9d9c659f375 /bsie
parent2f0f28a0c5490f53e71e55a3bc4667bbeeae49b1 (diff)
downloadbsie-d2052e77210e0ace2c5f06e48afe2a8acb412965.tar.gz
bsie-d2052e77210e0ace2c5f06e48afe2a8acb412965.tar.bz2
bsie-d2052e77210e0ace2c5f06e48afe2a8acb412965.zip
namespace refactoring and cleanup
Diffstat (limited to 'bsie')
-rw-r--r--bsie/extractor/base.py33
-rw-r--r--bsie/extractor/generic/path.py2
-rw-r--r--bsie/extractor/generic/stat.py2
-rw-r--r--bsie/extractor/image/colors_spatial.py12
-rw-r--r--bsie/extractor/image/photometrics.py24
-rw-r--r--bsie/extractor/preview.py22
-rw-r--r--bsie/lib/naming_policy.py8
-rw-r--r--bsie/lib/pipeline.py2
-rw-r--r--bsie/utils/namespaces.py28
9 files changed, 76 insertions, 57 deletions
diff --git a/bsie/extractor/base.py b/bsie/extractor/base.py
index 3759c68..f92d7cc 100644
--- a/bsie/extractor/base.py
+++ b/bsie/extractor/base.py
@@ -24,27 +24,32 @@ SCHEMA_PREAMBLE = '''
prefix schema: <http://schema.org/>
# common bsfs prefixes
- prefix bsfs: <http://bsfs.ai/schema/>
- prefix bse: <http://bsfs.ai/schema/Entity#>
- prefix bsp: <http://bsfs.ai/schema/Preview#>
+ prefix bsfs: <https://schema.bsfs.io/core/>
+ prefix bsl: <https://schema.bsfs.io/core/Literal/>
+ prefix bsa: <https://schema.bsfs.io/core/Literal/Array/>
+ prefix bsd: <https://schema.bsfs.io/core/distance#>
+
+ prefix bsie: <https://schema.bsfs.io/ie/>
+ prefix bsn: <https://schema.bsfs.io/ie/Node/>
+ prefix bse: <https://schema.bsfs.io/ie/Node/Entity#>
+ prefix bsp: <https://schema.bsfs.io/ie/Node/Preview#>
# default definitions
- bsfs:Array rdfs:subClassOf bsfs:Literal .
- bsfs:Number rdfs:subClassOf bsfs:Literal .
- bsfs:Time rdfs:subClassOf bsfs:Literal .
- bsfs:Feature rdfs:subClassOf bsfs:Array ;
+ bsl:Array rdfs:subClassOf bsfs:Literal .
+ bsl:Number rdfs:subClassOf bsfs:Literal .
+ bsl:Time rdfs:subClassOf bsfs:Literal .
+ bsa:Feature rdfs:subClassOf bsl:Array ;
bsfs:dimension "1"^^xsd:integer ;
- bsfs:dtype bsfs:f16 ;
- bsfs:distance bsfs:euclidean .
+ bsfs:dtype <https://schema.bsfs.io/core/dtype#f16> ;
+ bsfs:distance bsd:euclidean .
# essential nodes
- bsfs:Entity rdfs:subClassOf bsfs:Node .
- bsfs:File rdfs:subClassOf bsfs:Entity .
+ bsn:Entity rdfs:subClassOf bsfs:Node .
# common definitions
xsd:string rdfs:subClassOf bsfs:Literal .
- xsd:integer rdfs:subClassOf bsfs:Number .
- xsd:float rdfs:subClassOf bsfs:Number .
+ xsd:integer rdfs:subClassOf bsl:Number .
+ xsd:float rdfs:subClassOf bsl:Number .
'''
@@ -90,7 +95,7 @@ class Extractor(abc.ABC):
@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)
+ ent = self.schema.node(ns.bsn.Entity)
return (
pred
for pred
diff --git a/bsie/extractor/generic/path.py b/bsie/extractor/generic/path.py
index 8b01933..00c1121 100644
--- a/bsie/extractor/generic/path.py
+++ b/bsie/extractor/generic/path.py
@@ -26,7 +26,7 @@ class Path(base.Extractor):
def __init__(self):
super().__init__(bsfs.schema.from_string(base.SCHEMA_PREAMBLE + '''
bse:filename rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:string ;
rdfs:label "File name"^^xsd:string ;
schema:description "Filename of entity in some filesystem."^^xsd:string ;
diff --git a/bsie/extractor/generic/stat.py b/bsie/extractor/generic/stat.py
index 50821a7..92b51f3 100644
--- a/bsie/extractor/generic/stat.py
+++ b/bsie/extractor/generic/stat.py
@@ -29,7 +29,7 @@ class Stat(base.Extractor):
def __init__(self):
super().__init__(bsfs.schema.from_string(base.SCHEMA_PREAMBLE + '''
bse:filesize rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:integer ;
rdfs:label "File size"^^xsd:string ;
schema:description "File size of entity in some filesystem."^^xsd:string ;
diff --git a/bsie/extractor/image/colors_spatial.py b/bsie/extractor/image/colors_spatial.py
index 34cd615..e6661a9 100644
--- a/bsie/extractor/image/colors_spatial.py
+++ b/bsie/extractor/image/colors_spatial.py
@@ -14,8 +14,7 @@ from bsie.utils import bsfs, node, ns
from .. import base
# constants
-FEATURE_NAME = ns.bsf + 'ColorsSpatial'
-PREDICATE_NAME = ns.bse + 'colors_spatial'
+FEATURE_NAME = ns.bsf.ColorsSpatial()
# exports
__all__: typing.Sequence[str] = (
@@ -58,16 +57,17 @@ class ColorsSpatial(base.Extractor):
'exp': exp,
})
# determine symbol names
- instance_name = FEATURE_NAME[uuid]
- predicate_name = PREDICATE_NAME[uuid]
+ instance_name = getattr(FEATURE_NAME, uuid)
+ predicate_name = getattr(ns.bse, 'colors_spatial_' + uuid)
# get vector dimension
dimension = self.dimension(width, height, exp)
# initialize parent with the schema
super().__init__(bsfs.schema.from_string(base.SCHEMA_PREAMBLE + f'''
- <{FEATURE_NAME}> rdfs:subClassOf bsfs:Feature ;
+ <{FEATURE_NAME}> rdfs:subClassOf bsa:Feature ;
# annotations
rdfs:label "Spatially dominant colors"^^xsd:string ;
schema:description "Domiant colors of subregions in an image."^^xsd:string ;
+ bsfs:distance <https://schema.bsfs.io/core/distance#euclidean> ;
bsfs:dtype xsd:integer .
<{instance_name}> rdfs:subClassOf <{FEATURE_NAME}> ;
@@ -78,7 +78,7 @@ class ColorsSpatial(base.Extractor):
<{FEATURE_NAME}/args#exp> "{exp}"^^xsd:float .
<{predicate_name}> rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range <{instance_name}> ;
bsfs:unique "true"^^xsd:boolean .
diff --git a/bsie/extractor/image/photometrics.py b/bsie/extractor/image/photometrics.py
index c5254ab..42eb3c8 100644
--- a/bsie/extractor/image/photometrics.py
+++ b/bsie/extractor/image/photometrics.py
@@ -41,51 +41,51 @@ class Exif(base.Extractor):
def __init__(self):
super().__init__(bsfs.schema.from_string(base.SCHEMA_PREAMBLE + '''
#bse:t_capture rdfs:subClassOf bsfs:Predicate ;
- # rdfs:domain bsfs:File ;
+ # rdfs:domain bsn:Entity ;
# rdfs:range xsd:float ;
# bsfs:unique "true"^^xsd:boolean .
bse:exposure rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:float ;
bsfs:unique "true"^^xsd:boolean .
bse:aperture rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:float ;
bsfs:unique "true"^^xsd:boolean .
bse:iso rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:integer ;
bsfs:unique "true"^^xsd:boolean .
bse:focal_length rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:float ;
bsfs:unique "true"^^xsd:boolean .
bse:width rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:integer ;
bsfs:unique "true"^^xsd:boolean .
bse:height rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:integer ;
bsfs:unique "true"^^xsd:boolean .
bse:orientation rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:integer ;
bsfs:unique "true"^^xsd:boolean .
bse:orientation_label rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:string ;
bsfs:unique "true"^^xsd:boolean .
bse:altitude rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:float ;
bsfs:unique "true"^^xsd:boolean .
bse:latitude rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:float ;
bsfs:unique "true"^^xsd:boolean .
bse:longitude rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
+ rdfs:domain bsn:Entity ;
rdfs:range xsd:float ;
bsfs:unique "true"^^xsd:boolean .
'''))
diff --git a/bsie/extractor/preview.py b/bsie/extractor/preview.py
index 7e4a171..145a01a 100644
--- a/bsie/extractor/preview.py
+++ b/bsie/extractor/preview.py
@@ -28,28 +28,30 @@ class Preview(base.Extractor):
def __init__(self, max_sides: typing.Iterable[int]):
super().__init__(bsfs.schema.from_string(base.SCHEMA_PREAMBLE + '''
- bsfs:Preview rdfs:subClassOf bsfs:Node .
- bsfs:BinaryBlob rdfs:subClassOf bsfs:Literal .
- bsfs:JPEG rdfs:subClassOf bsfs:BinaryBlob .
+
+
+ bsn:Preview rdfs:subClassOf bsfs:Node .
+ bsl:BinaryBlob rdfs:subClassOf bsfs:Literal .
+ <https://schema.bsfs.io/ie/Literal/BinaryBlob/JPEG> rdfs:subClassOf bsl:BinaryBlob .
bse:preview rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:File ;
- rdfs:range bsfs:Preview ;
+ rdfs:domain bsn:Entity ;
+ rdfs:range bsn:Preview ;
bsfs:unique "false"^^xsd:boolean .
bsp:width rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:Preview ;
+ rdfs:domain bsn:Preview ;
rdfs:range xsd:integer ;
bsfs:unique "true"^^xsd:boolean .
bsp:height rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:Preview ;
+ rdfs:domain bsn:Preview ;
rdfs:range xsd:integer ;
bsfs:unique "true"^^xsd:boolean .
bsp:asset rdfs:subClassOf bsfs:Predicate ;
- rdfs:domain bsfs:Preview ;
- rdfs:range bsfs:JPEG ;
+ rdfs:domain bsn:Preview ;
+ rdfs:range <https://schema.bsfs.io/ie/Literal/BinaryBlob/JPEG> ;
bsfs:unique "true"^^xsd:boolean .
'''))
@@ -80,7 +82,7 @@ class Preview(base.Extractor):
buffer = io.BytesIO()
img.save(buffer, format='jpeg')
# create a preview node
- preview = node.Node(ns.bsfs.Preview,
+ preview = node.Node(ns.bsn.Preview,
ucid=bsfs.uuid.UCID.from_bytes(buffer.getvalue()),
size=max_side,
source=subject,
diff --git a/bsie/lib/naming_policy.py b/bsie/lib/naming_policy.py
index c99f8c8..9b9a45d 100644
--- a/bsie/lib/naming_policy.py
+++ b/bsie/lib/naming_policy.py
@@ -80,9 +80,9 @@ class DefaultNamingPolicy(NamingPolicy):
def handle_node(self, node: Node) -> Node:
if node.uri is not None:
return node
- if node.node_type == ns.bsfs.File:
+ if node.node_type == ns.bsn.Entity :
return self.name_file(node)
- if node.node_type == ns.bsfs.Preview:
+ if node.node_type == ns.bsn.Preview:
return self.name_preview(node)
raise errors.ProgrammingError('no naming policy available for {node.node_type}')
@@ -92,7 +92,7 @@ class DefaultNamingPolicy(NamingPolicy):
fragment = node.hints['ucid']
else: # random name
fragment = self._uuid()
- node.uri = (self._prefix + 'file')[fragment]
+ node.uri = getattr(self._prefix.file(), fragment)
return node
def name_preview(self, node: Node) -> Node:
@@ -109,7 +109,7 @@ class DefaultNamingPolicy(NamingPolicy):
fragment = self._uuid()
if 'size' in node.hints: # append size
fragment += '_s' + str(node.hints['size'])
- node.uri = (self._prefix + 'preview')[fragment]
+ node.uri = getattr(self._prefix.preview(), fragment)
return node
## EOF ##
diff --git a/bsie/lib/pipeline.py b/bsie/lib/pipeline.py
index 128eecc..30fd6fd 100644
--- a/bsie/lib/pipeline.py
+++ b/bsie/lib/pipeline.py
@@ -104,7 +104,7 @@ class Pipeline():
rdr2ext[rdr].add(ext)
# create subject for file
- subject = node.Node(ns.bsfs.File,
+ subject = node.Node(ns.bsn.Entity,
ucid=bsfs.uuid.UCID.from_path(path),
)
diff --git a/bsie/utils/namespaces.py b/bsie/utils/namespaces.py
index 310aa3f..4a66048 100644
--- a/bsie/utils/namespaces.py
+++ b/bsie/utils/namespaces.py
@@ -6,19 +6,31 @@ import typing
# inner-module imports
from . import bsfs as _bsfs
-# constants
-bse = _bsfs.Namespace('http://bsfs.ai/schema/Entity')
-bsf = _bsfs.Namespace('http://ie.bsfs.ai/schema/Feature')
-bsfs = _bsfs.Namespace('http://bsfs.ai/schema', fsep='/')
-bsm = _bsfs.Namespace('http://bsfs.ai/schema/Meta')
-bsp = _bsfs.Namespace('http://bsfs.ai/schema/Preview')
-xsd = _bsfs.Namespace('http://www.w3.org/2001/XMLSchema')
+# generic namespaces
+xsd = _bsfs.Namespace('http://www.w3.org/2001/XMLSchema')()
+
+# core bsfs/bsie namespaces
+bsfs = _bsfs.Namespace('https://schema.bsfs.io/core')
+bsie = _bsfs.Namespace('https://schema.bsfs.io/ie')
+
+# auxiliary namespaces
+bsd = bsie.distance()
+bse = bsie.Node.Entity()
+bsf = bsie.Literal.Array.Feature
+bsl = bsfs.Literal
+bsn = bsie.Node
+bsp = bsie.Node.Preview()
# export
__all__: typing.Sequence[str] = (
+ 'bsd',
'bse',
+ 'bsf',
'bsfs',
- 'bsm',
+ 'bsie',
+ 'bsl',
+ 'bsl',
+ 'bsn',
'bsp',
'xsd',
)