adesse

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs

commit 0da6e63a21abffcba0447c66403805b578f070ca
parent 93faf56e03006afdc6553d2ec7fc644fe057449c
Author: lash <dev@holbrook.no>
Date:   Wed, 24 Sep 2025 05:15:14 +0100

Make entity uris flexible

Diffstat:
Aadesse/config.py | 7+++++++
Madesse/ns.py | 21+++++++++++++++------
Madesse/testimony.py | 11++++++++---
Mtest/test_serialize.py | 3+++
4 files changed, 33 insertions(+), 9 deletions(-)

diff --git a/adesse/config.py b/adesse/config.py @@ -0,0 +1,7 @@ +namespace_sources = { + 'DF': 'http://defalsify.org/rdf/0.1/core/', + 'COUNTRY': 'http://www.iso.org/obp/ui/#iso:code:3166:', + 'MIME': 'http://www.iana.org/assignments/media-types/', + 'PSS': 'http://standards.internetofproduction.org/pub/r7g0n9fo/release/4#', + 'WOT': 'http://xmlns.com/wot/0.1/#', + } diff --git a/adesse/ns.py b/adesse/ns.py @@ -1,22 +1,27 @@ from rdflib.namespace import Namespace, DefinedNamespace from rdflib.term import URIRef +from .config import namespace_sources as ns + UU = Namespace('URN:uuid:') -COUNTRY = Namespace('http://www.iso.org/obp/ui/#iso:code:3166:') +COUNTRY = Namespace(ns['COUNTRY']) SHA256 = Namespace('URN:sha256:') -MIME = Namespace('http://www.iana.org/assignments/media-types/') +MIME = Namespace(ns['MIME']) class DF(DefinedNamespace): subject: URIRef object: URIRef agent: URIRef perceivedThrough: URIRef + perceivedTime: URIRef + hasIdentity: URIRef verdict: URIRef hasClaim: URIRef testimonyFor: URIRef + sum: URIRef # classes Event: URIRef @@ -24,12 +29,16 @@ class DF(DefinedNamespace): Testimony: URIRef # perceptionmedium - inPerson: URIRef + video: URIRef + audio: URIRef + text: URIRef + presence: URIRef + realtime: URIRef # results certified: URIRef - _NS = Namespace('http://defalsify.org/rdf/0.1/core/') + _NS = Namespace(ns['DF']) class PSS(DefinedNamespace): @@ -42,11 +51,11 @@ class PSS(DefinedNamespace): PRINT3D: URIRef - _NS = Namespace('http://standards.internetofproduction.org/pub/r7g0n9fo/release/4#') + _NS = Namespace(ns['PSS']) class WOT(DefinedNamespace): PubKey: URIRef - _NS = Namespace('http://xmlns.com/wot/0.1/#') + _NS = Namespace(ns['WOT']) diff --git a/adesse/testimony.py b/adesse/testimony.py @@ -8,9 +8,9 @@ from adesse.uri import to_uuid_uri class Testimony(Entity): - def __init__(self, label, date: datetime.datetime, target, identity, medium=DF.inPerson, uu=None): + def __init__(self, label, date: datetime.datetime, target, identity, uu=None): super().__init__(label, uu=uu) - self.medium = medium + self.medium = [] self.dt = date self.target = target self.identity = identity @@ -27,14 +27,19 @@ class Testimony(Entity): self.behalf.append(v) + def add_medium(self, v): + self.medium.append(v) + + def apply(self, g): uu = to_uuid_uri(self.uu) g.add((uu, RDF.type, DF.Testimony)) g.add((uu, DF.perceivedTime, Literal(self.dt.isoformat(timespec='seconds'), datatype=XSD.dateTime))) - g.add((uu, DF.perceivedThrough, DF.inPerson)) g.add((uu, DF.verdict, self.verdict)) g.add((uu, DF.testimonyFor, self.target.to_ref())) g.add((uu, DF.hasIdentity, self.identity)) + for v in self.medium: + g.add((uu, DF.perceivedThrough, v)) for v in self.behalf: g.add((uu, PROV.actedOnBehalfOf, v)) for v in self.claim: diff --git a/test/test_serialize.py b/test/test_serialize.py @@ -12,6 +12,7 @@ from adesse.event import Event from adesse.bundle import Bundle from adesse.testimony import Testimony from adesse.attachment import Attachment +from adesse.ns import DF class TestSerialize(unittest.TestCase): @@ -39,6 +40,8 @@ class TestSerialize(unittest.TestCase): b = URIRef('http://internetofproduction.org') v.add_behalf(b) + v.add_medium(DF.presence) + v.add_medium(DF.realtime) o.add_testimony(v) o.apply(z)