diff --git a/README.md b/README.md index b822b9532f7bef3b17de71f5bc5294ee82829357..46c07fcdf4119e967cc87ccd8ecc2fea2b37160b 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [](https://git-ce.rwth-aachen.de/wzl-mq-ms/forschung-lehre/lava/unified-device-interface/python/commits/master) # Python Unified Device Interface -Current stable version: 9.3.5 +Current stable version: 9.3.6 ## Installation 1. Install the WZL-UDI package via pip @@ -58,6 +58,9 @@ Funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) ## Recent changes +**9.3.6** - 2024-03-18 + - fixed serialization of semantic values + **9.3.5** - 2024-03-18 - fixed metadata provisioning of arguments and returns diff --git a/setup.py b/setup.py index 5023de3e0115e6cb18e118a81982881a5c2ec965..d477a6803b2d5cb5f3dbcd2929ebe3173eb983ed 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ with open("README.md", "r", encoding="utf-8") as fh: long_description = fh.read() setup(name='wzl-udi', - version='9.3.5', + version='9.3.6', url='https://git-ce.rwth-aachen.de/wzl-mq-public/soil/python', project_urls={ "Bug Tracker": "https://git-ce.rwth-aachen.de/wzl-mq-public/soil/python/-/issues", diff --git a/src/soil/datatype.py b/src/soil/datatype.py index d9d50785061299d60e6058e9030ccd244d495b3f..fdbede65c9e393dec77efa6c97c822162f117460 100644 --- a/src/soil/datatype.py +++ b/src/soil/datatype.py @@ -1,6 +1,9 @@ import enum +import rdflib + from .error import TypeException +from .semantics import Namespaces class Datatype(enum.Enum): @@ -31,3 +34,6 @@ class Datatype(enum.Enum): if legacy_mode: return ["bool", "int", "double", "string", "time", "enum"][self.value] return ["boolean", "int", "float", "string", "time", "enum"][self.value] + + def to_semantic(self): + return [rdflib.XSD.boolean, rdflib.XSD.int, rdflib.XSD.float, rdflib.XSD.string, rdflib.XSD.dateTime, rdflib.XSD.string][self.value] \ No newline at end of file diff --git a/src/soil/measurement.py b/src/soil/measurement.py index a2546e7d32de9c71244935a1eb30524a45d61d47..741c16681b9ffba7142dd4e60c88521161019a1a 100644 --- a/src/soil/measurement.py +++ b/src/soil/measurement.py @@ -221,7 +221,7 @@ class Measurement(Variable): data_graph.add((measurement_subject, Namespaces.qudt.unit, unit_triples[0][2])) data_graph.add((measurement_subject, Namespaces.schema.license, Semantics.data_license)) - rdf_value = Variable.serialize_value(data_graph, self.__getitem__('value', 0)) + rdf_value = self.serialize_value(data_graph, self.__getitem__('value', 0)) data_graph.add((measurement_subject, Namespaces.qudt.value, rdf_value)) data_graph.add((measurement_subject, Namespaces.schema.dateCreated, diff --git a/src/soil/parameter.py b/src/soil/parameter.py index 55949a38cb8ceccaf3c98cc9138e27664f8e5233..70cf90d96a9ee4defe5c83b57db89493ecf685de 100644 --- a/src/soil/parameter.py +++ b/src/soil/parameter.py @@ -159,7 +159,7 @@ class Parameter(Variable): result.remove(triples[0]) try: - rdf_value = Variable.serialize_value(result, self.__getitem__('value', 0)) + rdf_value = self.serialize_value(result, self.__getitem__('value', 0)) result.add((Semantics.namespace[self._semantic_name], Namespaces.qudt['value'], rdf_value)) except DeviceException as e: if isinstance(e._predecessor, NotImplementedException): diff --git a/src/soil/stream.py b/src/soil/stream.py index 9c9b35c905b62be6426f3174b12eb5c060efe294..ba6b4551159705bb0f43fd00c8629bb804932c7d 100644 --- a/src/soil/stream.py +++ b/src/soil/stream.py @@ -129,7 +129,7 @@ class Job(ABC): # replace value data.remove((None, Namespaces.qudt.value, None)) - data.add((measurement_subject, Namespaces.qudt.value, Variable.serialize_value(data, self.value))) + data.add((measurement_subject, Namespaces.qudt.value, self.serialize_value(data, self.value))) # replace timestamp data.remove((None, Namespaces.schema.dateCreated, None)) diff --git a/src/soil/variable.py b/src/soil/variable.py index c0e59349db581982820e0f12915d1407c5baab6f..1838d66eba612380667d84edbd2a8d27430c3358 100644 --- a/src/soil/variable.py +++ b/src/soil/variable.py @@ -289,8 +289,7 @@ class Variable(Element, ABC): except RangeException as e: raise e - @staticmethod - def serialize_value(data_graph: rdflib.Graph, value: Any) -> rdflib.term.Identifier: + def serialize_value(self, data_graph: rdflib.Graph, value: Any) -> rdflib.term.Identifier: if isinstance(value, list): blank_node = rdflib.BNode() data_graph.add((blank_node, Namespaces.rdf.rest, Namespaces.rdf.nil)) @@ -303,7 +302,7 @@ class Variable(Element, ABC): blank_node = new_blank_node return blank_node else: - return rdflib.Literal(value) + return rdflib.Literal(value, datatype=self.datatype.to_semantic()) @staticmethod def is_scalar(value):